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

标签 python pytest

我有一个简单的测试。

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/

相关文章:

python - 如何根据多列从一个数据帧中减去另一个数据帧中的值?

python - Pytest django 数据库访问不允许使用 django_db 标记

python - 如何使用协程作为 pytest fixture ?

python - 直接调用 fixture "setUp"。 Fixtures 不应该被直接调用

python - 是否有用于共享运行/测试配置的基于 PyCharm 的工作流?

python - 中断后重新启动 for 循环

python - 在 SLURM 中运行程序时如何保存打印语句?

python - 在某些约束下生成随机数

javascript - 将 Django DateTime 对象序列化为 json 然后实例化 JS Date 对象并返回的最佳方法是什么?

python - 如何将参数传递给 pytest fixture ?