有什么自动化方法可以查看conftest.py文件中定义的pytest装置/函数的网络吗?

问题描述 投票:0回答:1

我继承了一个大型数据科学工作流程(Python),它使用分散在多个模块中的许多函数。对我来说幸运的是,这些函数中大约 50% 已经具有 pytest 覆盖率,并使用 conftest.py 文件设置大量的固定装置和模拟对象进行测试(dfs、dicts、列表等,带有虚假数据)。我负责创建另外 50% 的测试。

但是,大多数灯具从conftest或内部模块的函数/类中调用迷宫般的其他灯具,并且我很难对给定的灯具进行逆向工程以查看它如何与其他灯具/函数交互以返回最终对象(通常是一个简单的 df、混合类型字典、json 等)。

例如,我认为我的一个固定装置返回我想要的数据帧(我需要在新测试中作为模拟)首先从conftest中调用另一个固定装置,然后从内部模块调用导入的函数,该模块的返回被模拟比赛中的又一场比赛。不太疯狂,但这只是传递给原始固定装置的参数之一,还有另外三个具有类似的层次结构,可以沿着兔子洞找到实际读入的内容。

所以我想要的是一个网络或决策树,它将以图形方式展示我的测试环境中的所有单独“部分”如何交互。有没有人遇到或创建了一个好的包,可以为 pytest conftest.py 文件生成这样的输出?更明确地说,我正在想象一个 CL 工具,我传递了 conftest.py 文件,它会遍历所有装置和导入的函数,并将它们以某种 2D 表示形式进行布局,其中它们之间的连接显示为箭头。

python pytest fixtures
1个回答
0
投票

浏览复杂的固定装置和依赖关系网络确实具有挑战性,尤其是在处理大型数据科学工作流程时。幸运的是,有一些工具和技术可以帮助您可视化灯具之间的交互。让我们探讨几个选项:

pytest --设置计划: 您可以将 --setup-plan 选项与 pytest 一起使用来获取测试执行期间如何设置装置的详细视图。 在终端中运行以下命令: pytest --设置计划

这将向您显示装置的设置顺序及其依赖关系。 虽然它不会提供图形表示,但它可以帮助您了解夹具链。 pytest-fixture-tools: pytest-fixture-tools 包为各个测试提供了有用的夹具依赖性可视化。 尽管它不会创建夹具依赖关系的静态图,但它仍然对您的目的有用。 这是它的外观示例:

+--------------------------------+ |测试内容 | +--------------------+ | v

+--------------------------------+ |固定装置_foo | +--------------------+ | v

+--------------------------------+ |夹具_栏| +--------------------+

虽然这并没有覆盖整个夹具层次结构,但它确实显示了每个测试的依赖关系。 手动探索: 有时,通过检查代码并了解它们如何交互来手动跟踪夹具依赖关系是必要的。 从您感兴趣的装置开始,并遵循依赖关系链。 使用评论或文档来注释您的发现。 依赖图工具(pytest 之外): 虽然没有直接与 pytest 集成,但您可以使用外部工具来创建依赖关系图。 Graphviz:Graphviz 是一个用于创建图表的强大工具。您可以编写脚本来提取夹具依赖项并生成 Graphviz DOT 文件。然后,使用 Graphviz 渲染图形。 NetworkX (Python):NetworkX 是一个用于创建、分析和可视化复杂网络的 Python 库。您可以使用 NetworkX 构建灯具及其依赖关系的网络图。 自定义脚本: 如果您熟悉脚本编写,请考虑编写一个自定义 Python 脚本来解析 conftest.py 文件并构建依赖关系图。 您可以使用字典或图表等数据结构来表示灯具之间的关系。

© www.soinside.com 2019 - 2024. All rights reserved.