问题总结!常用插件Pytest的测试用例的一些问题

目录

前言:

失败重跑 Pytest-rerunfailures

用例执行顺序 Pytest-ordering

重复执行 Pytest-repeat

多重断言 Pytest-assume


前言:

Pytest是Python中的一个流行的测试框架,它提供了许多功能强大的插件来支持自动化测试。

失败重跑 Pytest-rerunfailures

要求:python 3.5+、pytest 5.0+

安装:pip install pytest-rerunfailures

文档:https://pypi.org/project/pytest-rerunfailures/

使用方法:在命令行或 pytest.ini 配置文件 addopts 中添加选项:--reruns n(重新运行n次数),--reruns-delay m(等待m秒开始下次重新运行)

(1)命令行:pytest --reruns 3 --reruns-delay 5

(2)pytest.ini 文件:addopts = --reruns 3 --reruns-delay 5若要指定单个测试用例在失败时重新运行,需要在测试用例添加 flaky 装饰器,如:

@pytest.mark.flaky(reruns=n, reruns_delay=m)

@pytest.mark.flaky(reruns=2, reruns_delay=3) 
def test_01():        
assert 0

用例执行顺序 Pytest-ordering

默认情况下,Pytest 根据测试方法从上到下执行用例,可以通过第三方插件 Pytest-ordering 来改变测试顺序。

安装:pip install pytest-ordering

文档:https://pypi.org/project/pytest-ordering/

使用方法:在需要调整执行顺序的测试函数上标记 @pytest.mark.run(order=x)order 值越小,优先级越高;执行顺序按照如下排序:0 > 正数 > 未使用run修饰的 > 负数。

import pytest @pytest.mark.run(order=3) 
def test_01():
            print("test_01")
            assert 1     
@pytest.mark.run(order=2) 
def test_02(): 
           print("test_02") 
           assert 1     @pytest.mark.run(order=-1) 
def test_03(): 
           print("test_03")
           assert 1     
# 以上用例将按照 test_02 -> test_01 -> test_03 顺序执行

重复执行 Pytest-repeat

安装:pip install pytest-repeat

使用方法:在命令行或 pytest.ini 配置文件 addopts 中添加选项:

  • --count n(重复运行n次数)

  • --repeat-scope 可以覆盖默认的测试用例执行顺序,类似 fixture 的scope参数

  • function:默认,范围针对每个用例重复执行,再执行下一个用例

  • class:以class为用例集合单位,重复执行class里面的用例,再执行下一个

  • module:以模块为单位,重复执行模块里面的用例,再执行下一个

  • session:重复整个测试会话,即所有测试用例的执行一次,然后再执行第二次

(1)命令行:pytest --count 5

(2)pytest.ini 文件:addopts = --count 5

通常与 pytest 的 -x 搭配使用,重复测试直到失败,常用于验证一些偶现的问题

命令行运行:pytest --count=10 -x test_demo.py

# test_demo.py 文件
import pytest
@pytest.mark.repeat(10) 
# 将指定测试用例标记为执行重复多次
 def test_01(): 
           assert 1

多重断言 Pytest-assume

assert断言可以写多个断言,但一个失败,后面的断言将不再执行,可以使用 pytest-assume 来进行断言,即使断言失败,后面的断言还是会继续执行,比 assert 更高效。

安装:pip install pytest-assume

import pytest   
def test_01(): 
        pytest.assume(1==1)    
        pytest.assume(2==2)        
        pytest.assume(1==0)       
        pytest.assume(3==3)        
        print("测试完成")

作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!

留【自动化测试】即可【自动化测试交流】:574737577(备注ccc)icon-default.png?t=N4P3http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Af5vb8Yd04Vko7N1pLyynmp07ZePYHSQ&authKey=ks61fFogMnCB2Mw40a8gAbIgAW0iXxiu3fEp%2BsUtanTrM%2F8aJ4pzu%2B74Fo%2Fp%2Fd8G&noverify=0&group_code=574737577

猜你喜欢

转载自blog.csdn.net/DJ355/article/details/131128335