我有以下目录布局:
runner.py
lib/
tests/
testsuite1/
testsuite1.py
testsuite2/
testsuite2.py
testsuite3/
testsuite3.py
testsuite4/
testsuite4.py
testsuite*.py 模块的格式如下:
导入pytest 类测试东西: def setup_class(self): '''做一些设置''' # 在这里做一些设置 def teardown_class(self): ''''做一些拆解''' # 在这里做一些拆解的东西 def test1(自我): # 做一些与 test1 相关的事情 def test2(自我): # 做一些与 test2 相关的事情 …… …… …… def test40(自我): # 做一些与 test40 相关的事情 如果 __name__=='__main()__' pytest.main(args=[os.path.abspath(__file__)])
我遇到的问题是我想并行执行“测试套件”,即我希望 testsuite1、testsuite2、testsuite3 和 testsuite4 开始并行执行,但测试套件中的各个测试需要串行执行。
当我使用 py.test 中的“xdist”插件并使用“py.test -n 4”启动测试时,py.test 正在收集所有测试并在 4 个工作人员之间随机负载平衡测试。这导致在“testsuitex.py”模块中每次测试时都要执行“setup_class”方法(这违背了我的目的。我希望每个类只执行一次 setup_class 并在之后连续执行测试)。
基本上我希望执行看起来像:
worker1:串行执行 testsuite1.py 中的所有测试 worker2:串行执行 testsuite2.py 中的所有测试 worker3:串行执行 testsuite3.py 中的所有测试 worker4:串行执行 testsuite4.py 中的所有测试
while worker1, worker2, worker3 and worker4
都是并行执行的。
有没有办法在“pytest-xidst”框架中实现这一点?
我能想到的唯一选择是启动不同的进程以在 runner.py 中单独执行每个测试套件:
def test_execute_func(testsuite_path): subprocess.process('py.test %s' % testsuite_path) 如果 __name__=='__main__': #收集所有测试套件名称 对于每个测试套件: multiprocessing.Process(test_execute_func,(testsuite_path,))