python-xdist插件会导致pytest_generate_tests多次执行吗?

1 投票
1 回答
701 浏览
提问于 2025-04-17 23:03

我有一个简单的测试。

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”次。

比如说,运行命令py.test -n 2时,会打印“进入pytest_generate_tests”两次。这是正常的行为吗?我原本以为只会在不同的线程中执行测试。

环境: python 2.7 py.test 2.5.2 pytest-xdist 1.10

1 个回答

2

没错,这个说法是对的…… pytest_generate_tests 是一个钩子,用于 py.test 在收集测试的阶段。每个“从属进程”会执行这个钩子,以获取要执行的测试(也就是“测试项”)。至于哪个从属进程执行哪个测试项,则由启动测试会话的那个进程来处理。

我还没有完全研究所有的内部机制,但我觉得其中一个原因是,测试项不能在不同的进程之间传递,因为它们不能被序列化(简单来说,就是不能转换成一种可以传输的格式)。所以每个从属进程都需要自己收集测试项和它们的“测试 ID”,这样才能在进程之间进行交流,既包括哪个从属进程应该执行哪个测试,也包括如何报告测试结果。

撰写回答