我有一个简单的测试。
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 --> 打印“Entered pytest_generate_tests”两次。 这是正确的行为吗?我期望只有测试会在单独的线程中执行。
环境: python 2.7 py.测试2.5.2 pytest-xdist 1.10
最佳答案
是的,这是正确的... pytest_generate_tests
是 py.test 在收集阶段使用的一个钩子(Hook),它依次由每个从站执行,以获得要执行的测试(“test项目”)。哪个从属设备执行哪个测试项目,然后由启动测试 session 的进程处理。
我还没有完全研究所有内部结构,但我认为原因之一是您无法将测试项从一个进程发送到另一个进程,因为它们不可序列化。因此,该方法是让每个从属设备自己进行收集,以获得测试项目及其“测试 ID”,然后可以在进程之间交换这些测试项目和“测试 ID”,作为通信手段,哪个从属设备应该执行每个测试并报告测试结果返回。
关于python - python-xdist 插件是否会导致 pytest_generate_tests 执行多次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22521308/