python - pytest - 在所有其他测试之后重新运行失败的测试

标签 python pytest xdist

在我的场景中,我有一个写入文件的测试,以及一个(但可能有更多)想要读取该文件的测试。我不能简单地提取将该文件写入到函数/装置中,因为它涉及到内部的一些其他装置正在启动其他一些二进制文件以及写入该文件的二进制文件。所以我有一个固定装置,可以检查文件是否已经存在。

到目前为止我尝试过的:

  • flakypytest-rerunfailures插件 - 不合适,因为它们都会在失败时立即重新运行测试(当文件仍然不存在时),并且我想将其附加到测试队列的末尾。
  • 手动修改测试队列,如下所示:

...

request.session.items.append(request.node)
pytest.xfail("file not present yet")

这种方法有效,但仅当我在单个运行器上运行时(没有 xdist ,或通过传递 -n0 cli arg 将其打开, 在我的测试报告中我看到这样的内容:

test_load_file_before_save xfail
test_save_file PASSED        
test_load_file PASSED        
test_load_file_before_save PASSED    

当使用 xdist 运行时,xfailed 测试不会重复。有人知道如何继续吗?有什么方法可以强制 xdist 刷新测试列表吗?

最佳答案

您可以使用 pytest.cache 获取测试运行状态,并在失败时将该测试附加到队列中。

if request.config.cache.get(request.node):
    request.session.items.append(request.node)
    pytest.xfail("file not present yet")

您还可以使用 request.config.cache.set(data,val) 在 pytest 缓存中设置自定义值,以便在不同的运行中使用。

如果您正在编写测试目录中的文件,则可以使用 pytest-xdist 的 --looponfail 开关。它监视目录并重新运行测试,直到测试通过。 来自文档: 分布式和子进程测试: -f, --looponfail 在子进程中运行测试,等待修改的文件并 重新运行失败的测试集,直到全部通过。

可能有帮助的链接:Pytest-cache

作为一个友好的建议,如果您计划在并行线程中运行测试,我建议您使测试彼此独立。

关于python - pytest - 在所有其他测试之后重新运行失败的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52782812/

相关文章:

python - 如何在每个 pytest-xdist 进程中运行设置

python - 在运行多面测试之前,如何使用 python 正确执行全局固定装置?

python - 解析复杂的查询参数

python - 我想在 pytest 测试中使用标准输入

python - 在多个数据集上运行相同的测试

python - 为什么测试功能看不到我的 py.test 装置?

python - 具有全局固定装置时,如何将 Python 单元测试转换为 pytest?

python - 如何识别与主题相关的句子?

python - 如何提取带有三个正斜杠的字符串?

python - 结合 Sympy 和不确定性