我有一个简单的测试。
def test_sample(str):
print str
使用pytest_generate_tests(),例如
def pytest_generate_tests(metafunc):
argnames = [str]
argvalues = [[Hello], [World]]
print "Entered pytest_generate_tests"
metafunc.parametrize(argnames, argvalues)
现在,如果我使用python-xdist并行运行测试。我看到pytest_generate_tests()被称为" n"次数取决于cmdline选项。
py.test -n 2 - >打印"输入pytest_generate_tests"两次。 这是正确的行为吗?我期待只有测试将在单独的线程中执行。
ENV: python 2.7 py.test 2.5.2 pytest-xdist 1.10
答案 0 :(得分:2)
是的,这是正确的... pytest_generate_tests
是py.test在收集阶段使用的一个钩子,而这个钩子又由每个从设备执行以获得要执行的测试(“测试项目”) 。哪个从站执行的测试项目由启动测试会话的进程处理。
我尚未完全研究所有内部组件,但我认为其中一个原因是您无法将测试项目从一个进程发送到另一个进程,因为它们不可序列化。因此,方法是让每个从属设备自己进行收集,以获得测试项目及其“测试ID”,然后可以在进程之间作为通信方式进行交换,从属设备应执行每个测试以及报告测试结果回来了。