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

2024-04-29 08:58:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我目前所做的努力:

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

。。。在

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

这种方法是可行的,但只有当我在单运行器上运行时(不使用xdist),或者通过传递-n0cli arg来打开它, 在我的测试报告中我看到了这样的情况:

^{pr2}$

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


Tags: 文件方法函数插件队列pytest过程request
1条回答
网友
1楼 · 发布于 2024-04-29 08:58:35

你可以用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缓存中设置要在不同运行之间使用的自定义值。在

如果您正在编写test目录中的文件,可以使用pytest xdist的 looponfail开关。它监视目录并重新运行测试,直到测试通过。 根据文档: distributed and subprocess testing: -f, looponfail run tests in subprocess, wait for modified files and re-run failing test set until all pass.

可能有用的链接:Pytest-cache

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

相关问题 更多 >