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

How to pause py.test test and do some other tests at the time of waiting?

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

所以问题是——如何暂停一些测试,但在等待的时候做其他测试。 我不能只使用 sleep() - 在这种情况下,完整的测试服将持续数小时(15 分钟 *(此类测试的数量))。

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

  1. 运行 所有长测试的第一部分(暂停 15 分钟之前)(在上面的长测试示例中调用 API)
  2. 运行 所有短测试
  3. (可选)如果 (2) 用时少于 15 分钟,请稍等
  4. 运行 所有长测试的第二部分(暂停后)(检查上面示例中的网页)

但这只会是一团糟,很难管理。

这会产生很多 运行 在 (1) 中的虚拟测试 - 实际上这类似于测试设置,我不需要它们的结果,但 pytest 会将它们视为单独的测试一样。

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

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

UPD2 第二个想法 xdist 可能会有所帮助如果我有足够多的并行进程那么久运行宁测试不会在长时间等待期间阻塞小测试..

有一个 pytest-xdist plugin for pytest 可以启用测试 运行 并行化。也就是说,您的测试将同时被多个进程(在多个 CPU 上)同时 运行。这并不完全符合您的要求——它不会暂停 long-运行ning 测试——但它确实允许其他测试同时 运行 long-运行ning 测试 运行ning.

如果您可以编辑您的问题来描述您所说的 "first parts" 和 "second parts" 测试的意思,我可能会给出更好的答案。