在我的场景中,我有一个写入文件的测试,还有一个(但可能还有更多)想要读取该文件的测试。我不能简单地提取将文件写入功能/夹具的过程,因为它涉及其他一些夹具,这些夹具内部正在启动其他二进制文件,而该二进制文件则写入该文件。所以我有一个固定装置,可以检查文件是否已经存在。
到目前为止我尝试过的事情:
...
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刷新测试列表的某种方法?
答案 0 :(得分:1)
您可以使用pytest.cache获取测试运行状态,并在失败的情况下将该测试附加到队列中。
if request.config.cache.get(request.node):
request.session.items.append(request.node)
pytest.xfail("file not present yet")
您还可以在pytest缓存中设置自定义值,以通过request.config.cache.set(data,val)
在不同的运行中使用。
如果要写入测试目录中的文件,则可以使用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
作为一个友好的建议,如果计划将其测试在并行线程中运行,我建议您使测试彼此独立。
答案 1 :(得分:0)
安装这个包:pytest-rerunfailures 使用这个命令:pip install pytest-rerunfailures
要重新运行所有失败的测试,请使用 --reruns 命令行选项以及您希望测试运行的最大次数:
$ pytest --reruns 5
失败的fixture 或setup_class 也会被重新执行。
要在重新运行之间添加延迟时间,请使用 --reruns-delay 命令行选项以及您希望在启动下一次测试重新运行之前等待的秒数:
$ pytest --reruns 5 --reruns-delay 1