Skipping/excluding 测试模块 if 运行 Pytest 并行
Skipping/excluding test module if running Pytest in parallel
我有多个测试文件,比如
test_func1.py
test_func2.py
test_func3.py
我事先知道如果我运行 Pytest 并行,test_func3.py
不会通过,例如pytest -n8
。原因是 test_func3.py
包含许多处理文件 i/o 进程的参数化测试。并行写入同一文件会导致失败。在串行测试模式下,该模块中的所有测试都通过。
我想知道如何跳过整个模块以防 Pytest 以选项 -n
启动?我的想法是应用 skipif
标记。我需要检查我的代码 -n
参数是否已传递给 pytest
.
...>pytest # run all modules
...>pytest -n8 # skip module test_func3.py automatically
pytest-xdist
包支持四种调度算法:
- 每个
- 加载
- 加载范围
- 加载文件
调用 pytest -n
是 load
调度的快捷方式,即调度程序将负载平衡所有工作人员的测试。
使用loadfile
调度,测试文件中的所有测试用例将由同一个worker顺序执行。
pytest -n8 --dist=loadfile
就可以了。缺点可能是整个测试套件的执行可能比使用 load
慢。好处是所有测试都会执行,不会跳过任何测试。
测试中可能存在影响部分服务设置的情况。
此测试不能 运行 与任何其他测试并行。
有一种方法可以像这样跳过个人测试:
@pytest.mark.unparalleled
def test_to_skip(a_fixture):
if worker_id == "master":
pytest.skip('Can't run in parallel with anything')
这里的第一个缺点是它会被跳过,因此您需要 运行 单独进行这些测试。为此,您可以将它们放在单独的文件夹中,或者用一些标签标记。
第二个缺点是其中使用的任何固定装置都将被初始化。
我有多个测试文件,比如
test_func1.py
test_func2.py
test_func3.py
我事先知道如果我运行 Pytest 并行,test_func3.py
不会通过,例如pytest -n8
。原因是 test_func3.py
包含许多处理文件 i/o 进程的参数化测试。并行写入同一文件会导致失败。在串行测试模式下,该模块中的所有测试都通过。
我想知道如何跳过整个模块以防 Pytest 以选项 -n
启动?我的想法是应用 skipif
标记。我需要检查我的代码 -n
参数是否已传递给 pytest
.
...>pytest # run all modules
...>pytest -n8 # skip module test_func3.py automatically
pytest-xdist
包支持四种调度算法:
- 每个
- 加载
- 加载范围
- 加载文件
调用 pytest -n
是 load
调度的快捷方式,即调度程序将负载平衡所有工作人员的测试。
使用loadfile
调度,测试文件中的所有测试用例将由同一个worker顺序执行。
pytest -n8 --dist=loadfile
就可以了。缺点可能是整个测试套件的执行可能比使用 load
慢。好处是所有测试都会执行,不会跳过任何测试。
测试中可能存在影响部分服务设置的情况。 此测试不能 运行 与任何其他测试并行。
有一种方法可以像这样跳过个人测试:
@pytest.mark.unparalleled
def test_to_skip(a_fixture):
if worker_id == "master":
pytest.skip('Can't run in parallel with anything')
这里的第一个缺点是它会被跳过,因此您需要 运行 单独进行这些测试。为此,您可以将它们放在单独的文件夹中,或者用一些标签标记。
第二个缺点是其中使用的任何固定装置都将被初始化。