繁体   English   中英

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

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

我有很多“长时间测试”,我必须等待一些相对较大的超时(分钟)。 例如我在测试中调用了一些 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有一个pytest-xdist插件,可以启用测试运行并行化。 也就是说,您的测试将由多个进程(在多个 CPU 上)同时运行。 这并不完全符合您的要求——它不会暂停长时间运行的测试——但它确实允许其他测试在运行长时间运行的测试的同时运行。

如果您可以编辑问题以描述测试的“第一部分”和“第二部分”的含义,我可能会给出更好的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM