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

到目前为止我尝试过的:

  • 片状pytest-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 刷新测试列表的方法?

#1楼 票数:2

您可以使用 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)

如果您正在编写位于 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

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

#2楼 票数:0

安装这个包:pytest-rerunfailures 使用这个命令:pip install pytest-rerunfailures

要重新运行所有测试失败,请使用 --reruns 命令行选项以及您希望测试运行的最大次数:

$ pytest --reruns 5

失败的夹具或 setup_class 也将重新执行。

要在重新运行之间添加延迟时间,请使用 --reruns-delay 命令行选项以及在启动下一次测试重新运行之前您希望等待的秒数:

$ pytest --reruns 5 --reruns-delay 1

  ask by murison translate from so

未解决问题?本站智能推荐:

7回复

pytest:如何在会话结束时获取所有失败测试的列表?(并且在使用xdist时)

我想列出在 session 结束时未能使用的所有测试。 Pytest 让你定义一个钩子pytest_sessionfinish(session, exitstatus) ,它在会话结束时调用,我希望在那里有那个列表。 session是一个_pytest.main.Session实例,它具有属性i
6回复

有没有办法控制pytest-xdist如何并行运行测试?

我有以下目录布局: testsuite*.py 模块的格式如下:我的问题是我想并行执行“测试套件”,即我希望 testsuite1、testsuite2、testsuite3 和 testsuite4 开始并行执行,但测试套件中的各个测试需要串行执行。 当我使用 py.test 中的 'xdist
1回复

当测试还包含多处理时,使用xdist与工人(例如-n1)一起进行pytest

我正在使用 蟒蛇 3.6 pytest 6.1.1 pytest xdist 2.1.0 Pycharm 2018.3.7 使用 HTML 插件进行报告以及自定义报告我正在通过 pycharm >pytest 运行自动化测试,参数如下: --html=../../reports/r
1回复

pytest-xdist为每个测试生成随机和唯一端口

我正在使用 pytest-xdist 插件运行一些测试,使用@pytest.mark.parametrize运行具有不同参数的相同测试。 作为这些测试的一部分,我需要打开/关闭 Web 服务器并在收集时生成端口。 xdist 在从站上进行测试收集并且它们不同步,所以我如何保证端口生成的唯一性。 我
1回复

Pytest-xdist适用于pip,但不适用于pipenv。没有加载/安排测试

当我通过pip和pipenv安装Pytest时,它可以工作。 但是,当通过命令pytest -n 4使用pytest-xdist插件时,这仅适用于pip而不适用于pipenv 。 没有计划或加载任何测试。 这是我当前的pipfile:
1回复

如何在每个pytest-xdist进程中运行setup

当我的测试运行程序启动时,我想设置一些东西(调整 sys.path,添加一些环境变量,启动一些全局装置)。 我可以使用什么钩子在产生的每个 xdist 进程中进行这些更改? 我试过重载几个普通的 pytest 钩子,但它们在子进程启动之前运行。
2回复

带有xdist的py.test跳过-n>1的所有测试

我的测试需要2分钟才能运行: …所以我想我会尝试xdist插件来并行运行它们。 所以我做了: 2秒钟将是惊人的加速……尽管我认为没有进行任何测试-某些点会出现,不是吗? 但是,如果我只用一个进程就“并行”运行… …然后时间恢复正常。 如何使xdist插件实际运行测试? 更
2回复

PytestXdist不同的测试被收集错误

第一次在这里发帖,过去 2 天我一直在尝试寻找解决 xdist 问题的方法。 当我尝试以 n=2 或更高的值运行时,我有时(我说有时是因为它随机工作)会遇到以下错误 抱歉,如果这是简单的解决方法,但在看了这么多其他帖子后,我个人觉得我没有找到我的答案。 如果需要更多信息,请告诉我,我会尽快回复! 谢