我有以下pytest目录结构:
system_tests/
├── conftest
├── pytest.ini
│
├── suite_1/
│ └── test_A.py
│
└── suite_2/
└── sub_suite_2a/
└── test_B.py
当每个测试方法运行时,许多第三方库/进程在当前工作目录中生成工件
sub_suite
文件夹(使用CLI或IDE“播放”按钮)执行pytest时,文件将在sub_suite
文件夹中生成,我希望它们位于该文件夹中李>system_tests
文件夹运行pytest以运行所有测试时,所有工件都在system_tests
文件夹中创建,这不是我想要的李>有没有一种简单的方法可以强制pytest始终使用test class文件夹作为工作目录,这样无论运行测试的位置如何,我都可以得到相同的结果
要实现这一点,您有很多选择。这里有一些
一,。 编写pytest fixture以检查当前工作目录是否等于所需的工作目录,如果不等于,则将所有工件文件移动到所需的目录如果您生成的工件都是相同类型的文件(例如.*.jpg、*.png、*.gif),并且您只希望它们位于不同的目录中,那么这就足够了。类似的方法可以工作
然后,您可以根据需要将该装置添加到测试中
二,。 您可以将pytest
rootdir
配置为所需的目录,因为pytest使用rootdir
来存储特定于项目/测试运行的信息当您运行pytest时,将其作为
有关更多信息,请参见此处:https://docs.pytest.org/en/latest/customize.html#initialization-determining-rootdir-and-inifile
如果两者都不适用于您,请详细说明您的需求。当然,这可以通过pytest实现
一种不同的、更健壮的方法:始终按完整路径引用文件
__file__
是一个自动声明的Python变量,它是当前模块的名称。因此,在test_B.py
文件中,它的值为:system_tests/suite_2/sub_suite_2a/test_B.py
。只需找到父对象并选择文件的写入位置现在,您将它们都放在同一个位置,并且可以告诉您的版本控制系统忽略它们
如果代码在库中,请确保可以使用此选项更改当前目录:
以下函数级fixture将更改为测试用例目录,运行测试(yield),然后更改回调用目录以避免副作用,如@hi2meuk所建议的:
request
是一个内置的pytest夹具fspath
是正在执行的测试模块的LocalPath
dirname
是测试模块的目录request.config.invocationdir
-执行pytest的文件夹request.config.rootdir
-pytest root,不会根据运行pytest的位置而改变。此处未使用,但可能有用李>任何由测试启动的进程都将使用测试用例文件夹作为它们的工作目录,并将它们的日志、输出等复制到那里,而不管测试套件是在哪里执行的
相关问题 更多 >
编程相关推荐