Python Pytest 用例管理常用功能详解

pytest功能很强大,但是对用例的管理大多是用pytest的插件来实现,以下介绍几个常用的用例管理插件,有些功能使用前必须安装对应插件!!!

一、用例的执行顺序

pytest的默认执行顺序是从上往下执行用例,若涉及到执行顺序的变更,可以使用这个插件,通过pytest的装饰器来使用该插件,优先执行有装饰器的用例,然后再执行没加装饰器的用例。

安装:

     pip install pytest-ordering

使用:在用例上添加@pytest.mark.run(order=1) 装饰器来使用

    @pytest.mark.run(order=3)
    def test_a():
        print('a')

    @pytest.mark.run(order=1)
    def test_b():
        print('b')

    @pytest.mark.run(order=2)
    def test_c():
        print('c')

默认的执行顺序是 a b c,加了装饰器后执行顺序已经改变,变成了 b c a ,order=1数字越小越先执行

test_demo1.py::test_b b
PASSED
test_demo1.py::test_c c
PASSED
test_demo1.py::test_a a
PASSED

============================== 3 passed in 0.03s ==============================

二、跳过用例

当用例执行的粒度不需要这么细时,执行时可以跳过部分用例,可分为:

无条件跳过 : pytest.mark.skip(reason='跳过原因')  或  pytest.mark.skip()  '跳过原因'  可不加

有条件跳过 : pytest.mark.skipif(version>2, reason='跳过原因')  '跳过原因' 必须加

以上两个跳过都不需要安装插件,可直接使用。

无条件跳过:

    @pytest.mark.run(order=3)
    def test_a():
        print('a')

    @pytest.mark.skip(reason="粒度不需要")
    def test_b():
        print('b')

    @pytest.mark.skip()
    def test_c():
        print('c')

这里执行时,b 和 c 都会被跳过

test_demo1.py::test_a a
PASSED
test_demo1.py::test_b SKIPPED (粒度不需要)
test_demo1.py::test_c SKIPPED (unconditional skip)

======================== 1 passed, 2 skipped in 0.06s =========================

有条件跳过:需要先有条件,例如有变量 version=3


version = 3


@pytest.mark.skipif(version>4, reason="版本太低")
def test_a():
    print('a')


@pytest.mark.skipif(version>2, reason="版本太低")
def test_b():
    print('b')


@pytest.mark.skipif(version>1, reason="版本太低")
def test_c():
    print('c')

这里判断 version>n 的结果为 true时,则会跳过这个用例不会执行,否则不跳过,b c 都被跳过

test_demo1.py::test_a a
PASSED
test_demo1.py::test_b SKIPPED (版本太低)
test_demo1.py::test_c SKIPPED (版本太低)

======================== 1 passed, 2 skipped in 0.03s =========================

三、用例失败重

当用例执行失败时,会自动重试,主要在web自动化中用的较多,对于环境不稳定的接口自动化也可以使用。

安装:

    pip install pytest-rerunfailures

使用:需要在执行命令或者 pytest.ini 文件中加参数  --reruns=2,这里的2是重试的次数

import pytest


if __name__ == '__main__':

    pytest.main(['-vs', '--reruns=2'])

pytest.ini 文件是pytest的执行的配置文件,不管是主函数执行还命令行执行都会读取这个文件,详细了解请跳转至:http://t.csdn.cn/gYEWH

[pytest]

addopts = -vs --reruns 2
testpaths = test_demo1.py

python_files = test_*
python_classes = Test*
python_functions = test_*

markers =
    smoke: maoyan

 这里运行时 test_c 报错,可以看到 RERUN 重试了两次

test_demo1.py::test_a a
PASSED
test_demo1.py::test_b b
PASSED
test_demo1.py::test_c RERUN
test_demo1.py::test_c RERUN
test_demo1.py::test_c FAILED

================================== FAILURES ===================================
___________________________________ test_c ____________________________________

    def test_c():
>       raise Exception('error')
E       Exception: error

test_demo1.py:17: Exception
=========================== short test summary info ===========================
FAILED test_demo1.py::test_c - Exception: error
==================== 1 failed, 2 passed, 2 rerun in 0.25s =====================

四、用例多线程执行

当用例很多时,可以使用多线程执行来减少执行时间,提高执行效率.。

安装:

    pip install pytest-xdist

 使用:只需要在执行命令或者 pytest.ini 文件中加参数  -n=2 ,这里的2是指线程数

import pytest


if __name__ == '__main__':

    pytest.main(['-vs', '-n=2'])

  pytest.ini 文件是pytest的执行的配置文件,不管是主函数执行还命令行执行都会读取这个文件,详细了解请跳转至:http://t.csdn.cn/gYEWH

[pytest]

addopts = -vs -n 2
testpaths = test_demo1.py

python_files = test_*
python_classes = Test*
python_functions = test_*

markers =
    smoke: maoyan

 执行后可以看到这里分成两个线程执行,gw0  gw1 ,a c 是gw0线程执行,b 是gw1线程执行,若两条用例涉及到上下游传参,最好走同一条线程。

test_demo1.py::test_a 
test_demo1.py::test_b 
[gw1] PASSED test_demo1.py::test_b 
[gw0] PASSED test_demo1.py::test_a 
test_demo1.py::test_c 
[gw0] PASSED test_demo1.py::test_c 

============================== 3 passed in 3.08s ==============================

五、用例加标记,指定标记用例执行

给用例加标记,就可以运行指定标记的用例,比如冒烟用例。

配置:不需要下载插件,在pytest.ini 文件中配置标签,然后运行时加参数 -m smoke

参数可以加多个,比如 smoke:maoyan    、other:qita,标签名自定义,最好都是英文

[pytest]

addopts = -vs -n 2
testpaths = test_demo1.py

python_files = test_*
python_classes = Test*
python_functions = test_*

markers =
    smoke: maoyan

使用:对应用例上面加装饰器 @pytest.mark.smoke ,运行时加参数  -m 标签名

同时也可以一次选择多个标签一起运行,例如:-m "smoke or other", 运行时会选中标签有

@pytest.mark.smoke  和 @pytest.mark.other 的标签用例会被执行,其他的用例不会执行

import pytest


def test_a():
    print('a')

@pytest.mark.smoke
def test_b():
    print('b')


def test_c():
    print('c')

 这里主函数添加参数或者 pytest.ini 文件添加参数,只需要任选其一就行,不需要两种方式都加参数

import pytest


if __name__ == '__main__':

    pytest.main(['-vs', '-m=smoke'])
[pytest]

addopts = -vs -m smoke
testpaths = test_demo1.py

python_files = test_*
python_classes = Test*
python_functions = test_*

markers =
    smoke: maoyan

运行之后可以看到只有加了标签的用例才会被执行,b 加了标签,只执行 b

test_demo1.py::test_b b
PASSED

======================= 1 passed, 2 deselected in 0.04s =======================

注: 这里主函数添加参数或者 pytest.ini 文件添加参数,只需要任选其一就行,不需要两种方式都加参数,想要了解 pytest.ini 配置文件的, 请跳转至:http://t.csdn.cn/gYEWH

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,pytest是一个功能强大的测试框架,可以用于编写和运行测试代码。pytest可以使用参数化(parametrize)来定义多个测试用例,并使用pytest.mark.parametrize装饰器将参数传递给测试函数。通过使用pytest的parametrize功能,我们可以传递不同的参数值来运行相同的测试函数,这样可以减少代码的重复编写并提高测试效率。例如,可以通过传递不同的参数值来测试同一个函数的不同输入和输出结果。 另外,pytest还可以生成测试报告,包括HTML测试报告。使用pytest-html插件,可以将测试结果以HTML格式展示,这样可以更直观地查看测试用例的执行情况和结果。 在编写测试代码时,可以使用pytest的装饰器来标记测试函数。例如,使用@pytest.mark.skip可以跳过某个测试用例,这在某些情况下可能很有用。测试函数可以通过执行pytest.main方法来运行,可以指定运行的测试文件或者测试函数。 总结来说,pytest是一个灵活且功能丰富的测试框架,可以用于编写和运行Python代码的测试。它支持参数化测试、生成测试报告等功能,使得测试代码的编写和执行更加简单和高效。123 #### 引用[.reference_title] - *1* *3* [pythonpytest库用法详解](https://blog.csdn.net/weixin_44799217/article/details/128046150)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *2* [Python中的pytest](https://blog.csdn.net/qq_45629649/article/details/120667538)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值