如何暂停py.test测试并在等待时做一些其他测试?

时间:2016-12-30 08:10:19

标签: python pytest

我有很多'长时间测试',我必须等待一些相对较大的超时(分钟)。 例如,我在测试中调用了一些API,等待15分钟,然后检查网页上的更改。

所以问题是 - 如何暂停某些测试,但在等待时进行其他测试。 我不能只使用睡眠() - 在这种情况下完整的测试套装将持续数小时(15分钟*(此类测试的数量))。

我看到的一个解决方案 - 安排测试(使用钩子pytest_collection_modifyitems):

  1. 运行所有长测试的第一部分(暂停15分钟之前)(在上面的长测试示例中调用API)
  2. 运行所有简短测试
  3. (可选)等待(2)花费不到15分钟
  4. 运行所有长测试的第二部分(暂停后)(查看上例中的网页)
  5. 但那只是一团糟,很难管理。

    这产生了许多在(1)中运行的虚拟测试 - 事实上这就像测试设置,我不需要它们的结果,但pytest会将它们视为单独的测试。

    UPD xdist没有多大帮助 - 即使我可以控制它如何并行化测试(在哪些组中同时运行),我将不得不并行运行所有长时间的测试,因为我想做一些有用的事情。等待,而不仅仅是等待(15分钟*(长测试次数))/(xdist进程数)。

    这似乎是唯一的方法 - 修补pytest的主循环。所以它会异步运行测试。但我甚至不知道从哪里开始这样做..

1 个答案:

答案 0 :(得分:0)

有一个pytest-xdist plugin for pytest可以启用测试运行并行化。也就是说,您的测试将同时由多个进程(在多个CPU上)同时运行。这并没有完全达到你所要求的 - 它不能暂停长时间运行的测试 - 但它确实允许其他测试在长时间运行的测试运行的同时运行

如果你可以编辑你的问题来描述你的意思"第一部分"和"第二部分"测试,我或许可以给出更好的答案。