Pytest插件pytest-repeat重复执行

安装

pip install pytest-repeat

doc

https://pypi.org/project/pytest-repeat/

https://github.com/pytest-dev/pytest-repeat

  • 2020年10月31日最后一次更新
  • 最新版本0.9.1
  • 其他没啥内容,就一些简单的使用方法,也在侧面上说明这个插件是比较简单的

使用方法

第一种用法:装饰器 @pytest.mark.repeat(次数)

  • 示例代码

    import pytest
    @pytest.mark.repeat(3)
    def test_a01():
    assert 1==2 if __name__ == '__main__':
    pytest.main(['-sv',__file__])
  • 示例输出

    collecting ... collected 3 items
    
    test_demo.py::test_a01[1-3] FAILED
    test_demo.py::test_a01[2-3] FAILED
    test_demo.py::test_a01[3-3] FAILED ================================== FAILURES ===================================
    ________________________________ test_a01[1-3] ________________________________ @pytest.mark.repeat(3)
    def test_a01():
    > assert 1==2
    E assert 1 == 2 test_demo.py:4: AssertionError
    ________________________________ test_a01[2-3] ________________________________ @pytest.mark.repeat(3)
    def test_a01():
    > assert 1==2
    E assert 1 == 2 test_demo.py:4: AssertionError
    ________________________________ test_a01[3-3] ________________________________ @pytest.mark.repeat(3)
    def test_a01():
    > assert 1==2
    E assert 1 == 2 test_demo.py:4: AssertionError
    =========================== short test summary info ===========================
    FAILED test_demo.py::test_a01[1-3] - assert 1 == 2
    FAILED test_demo.py::test_a01[2-3] - assert 1 == 2
    FAILED test_demo.py::test_a01[3-3] - assert 1 == 2
    ============================== 3 failed in 0.10s ==============================
  • 从结果看,重复插件的使用会让你的用例变成多个(这点未必是你想要的,要注意)

第二种用法:命令行参数

  • 语法

    pytest --count=3 test_demo.py
  • 示例代码

    import pytest
    def test_a01():
    assert 1==2 if __name__ == '__main__':
    pytest.main(['-sv','--count=5',__file__])
  • 输出跟上面第一个用法的是一样的

  • 但装饰器是要装饰在每个测试用例上的,而命令行的做法就是一把梭,全部运行多次。

第三种用法:结合repeat-scope运行

  • 如果我们要对多个测试函数进行重复运行,要么加多个装饰器,要么用命令行参数

  • 但是上述两种方法都是A重复,B重复这样,无法做到AB-AB-AB的模式

  • 如果要实现组合重复运行,那就要用到该插件提供的另外一个参数--repeat-scope

  • --repeat-scope类似于pytest fixture的scope参数,--repeat-scope也可以设置参数: sessionmoduleclass或者function(默认值)

    • function(默认)范围针对每个用例重复执行,再执行下一个用例
    • class 以class为用例集合单位,重复执行class里面的用例,再执行下一个
    • module 以模块为单位,重复执行模块里面的用例,再执行下一个
    • session 重复整个测试会话,即所有收集的测试执行一次,然后所有这些测试再次执行等等
  • 示例代码1(不加repeat-scope):A运行2次,B运行2次

    import pytest
    
    def test_a():
    assert 1==2 def test_b():
    assert 1==2 if __name__ == '__main__':
    pytest.main(['-sv','--count=2',__file__])
    #运行结果 AABB
    =========================== short test summary info ===========================
    FAILED test_demo.py::test_a[1-2] - assert 1 == 2
    FAILED test_demo.py::test_a[2-2] - assert 1 == 2
    FAILED test_demo.py::test_b[1-2] - assert 1 == 2
    FAILED test_demo.py::test_b[2-2] - assert 1 == 2
    ============================== 4 failed in 0.11s ==============================
  • 示例代码(加repeat-scope):A-B运行2次

    import pytest
    
    def test_a():
    assert 1==2 def test_b():
    assert 1==2 if __name__ == '__main__':
    pytest.main(['-sv','--count=2','--repeat-scope=module',__file__]) # ABAB
    =========================== short test summary info ===========================
    FAILED test_demo.py::test_a[1-2] - assert 1 == 2
    FAILED test_demo.py::test_b[1-2] - assert 1 == 2
    FAILED test_demo.py::test_a[2-2] - assert 1 == 2
    FAILED test_demo.py::test_b[2-2] - assert 1 == 2
    ============================== 4 failed in 0.11s ==============================
  • 如果--repeat-scope=session在此处的效果是一样的

  • 这个插件的--repeat-scope=并没有同步fixture的scope(多了个package)

说在最后

  • Pytest-repeat.py的部分源码

    def pytest_addoption(parser):
    parser.addoption(
    '--count',
    action='store',
    default=1,
    type=int,
    help='Number of times to repeat each test') parser.addoption(
    '--repeat-scope',
    action='store',
    default='function',
    type=str,
    choices=('function', 'class', 'module', 'session'),
    help='Scope for repeating tests')

Pytest插件pytest-repeat重复执行的更多相关文章

  1. linux命令之 repeat 重复执行命令

    $ vim ~/.bashrc function repeat() { number=$1 shift echo $@ for n in $(seq $number); do $@ done } $ ...

  2. 重复执行用例(pytest-repeat)

    前言 平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来.自动化运行用例时候,也会出现偶然的bug,可以针对单个用例,或 ...

  3. Pytest系列(13)- 重复执行用例插件之pytest-repeat的详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 平常在做功能测试的时候,经常 ...

  4. Pytest系列(十三)- 重复执行之pytest-repeat的使用

    写在前面 这个插件,可以帮助我们很好的解决自动化测试过程中的一些偶线性bug难以复现的问题,但前提是,当前自动化脚本是独立的,不依赖任何其他脚本.个人觉得还是失败重运行的一种体现,就和TestNG是一 ...

  5. pytest文档27-pytest分布式执行(pytest-xdist)

    前言 平常我们手工测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟.如果一个测试人员执行需要1000分钟才能执行完,当项目非常紧急的时候, 我们会用测试人力成本换取时间成本,这个时候多找 ...

  6. Pytest(6)重复运行用例pytest-repeat

    前言 平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来. 自动化运行用例时候,也会出现偶然的bug,可以针对单个用例, ...

  7. pytest文档58-随机执行测试用例(pytest-random-order)

    前言 通常我们认为每个测试用例都是相互独立的,因此需要保证测试结果不依赖于测试顺序,以不同的顺序运行测试用例,可以得到相同的结果. pytest默认运行用例的顺序是按模块和用例命名的 ASCII 编码 ...

  8. Pytest测试框架(一):pytest安装及用例执行

    PyTest是基于Python的开源测试框架,语法简单易用,有大量的插件,功能非常多.自动检测测试用例,支持参数化,跳过特定用例,失败重试等功能. 安装 pip install -U pytest  ...

  9. Pytest(16)随机执行测试用例pytest-random-order

    前言 通常我们认为每个测试用例都是相互独立的,因此需要保证测试结果不依赖于测试顺序,以不同的顺序运行测试用例,可以得到相同的结果. pytest默认运行用例的顺序是按模块和用例命名的 ASCII 编码 ...

  10. 二、为什么要选用pytest以及 pytest与unittest比较

    为什么要选择pytest,我看中的如下: 写case,不需要像unittest那样,创建测试类,继承unittest.TestCase pytest中的fixture(类似于setUp.tearDow ...

随机推荐

  1. C语言白盒测试讲义

    好久没有做过C语言的白盒测试了,估计以后也没这个机会.把自己之前参加过的培训素材做个分享. 素材下载链接:https://pan.baidu.com/s/1LPD9Az04zEj8RuCICaKYxQ ...

  2. webpack 配置echarts 按需加载

    引入babel-plugin-equire插件,方便使用.yarn add babel-plugin-equire -D 在.babelrc文件中的配置 { "presets": ...

  3. ModuleNotFoundError: No module named 'XXX'

    先来一张表情包: pycharm在小黑框使用pip安装某个包,在解释器没有找到某个包,所以运行程序的时候总是报错. 我相信大家可能都遇到这样的问题. 我下载有3.8.3.10版本的python,我py ...

  4. 【云原生 · Docker】Docker简介及基本组件

    [云原生·Docker]Docker简介及基本组件 1.Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linu ...

  5. Git基操记录

    小结 说多了都是泪,最近在整理Java的笔记,记笔记我比较喜欢使用markdown(当时使用Hexo的原因之一),毕竟作为刚入门槛一点点的程序小白,还没用上Idea(很多大佬都推荐这个),目前还在使用 ...

  6. CPU cache知识 —— ARM架构cache结构和细节

    cache如何寻址 处理器访问cache时,cache电路会将CPU地址进行解码,分成3个部分,分别是: offset: 用于某个cache line -- 字抽取: index: 用于匹配某个cac ...

  7. 漫谈计算机网络:网络层 ------ 重点:IP协议与互联网路由选择协议

    面试答不上?计网很枯燥? 听说你学习 计网 每次记了都会忘? 不妨抽时间和我一起多学学它 深入浅出,用你的空闲时间来探索计算机网络的硬核知识! 博主的上篇连载文章<初识图像处理技术> 图像 ...

  8. Entity Framework Core 7中高效地进行批量数据插入

    因为之前的版本中,EF Core无法实现高效地批量插入.修改.删除数据,所以我开发了Zack.EFCore.Batch这个开源项目,比较受大家的欢迎,获得了400多个star. 从.NET 7开始,微 ...

  9. Excel2010表格内容被加密,无法编辑内容。

    Sub PasswordBreaker() Dim i As Integer, j As Integer, k As Integer Dim l As Integer, m As Integer, n ...

  10. CTF隐写术总结

    CTF隐写术总结 1.查看图像属性及详细信息 或者查看图像的高度,利用winhex等工具改变图像宽度或高度,查看是否有隐藏信息. 2.利用winhex或nodepad++打开搜索ctf,flag,ke ...