Python测试框架pytest(21)插件 – 单元测试覆盖率、随机执行用例

目录

1、pytest-cov(单元测试覆盖率)

1.1、安装

1.2、示例

2、pytest-random-order(随机执行用例)

2.1、安装

2.2、参数

2.3、示例

2.4、禁用随机

2.5、禁用插件

1、pytest-cov(单元测试覆盖率)

在做单元测试时,一般都会参考代码覆盖率来衡量代码的质量。

pytest-cov 插件可用来统计单元测试覆盖率。

1.1、安装

在命令行中运行以下命令进行安装:

pip install pytest-cov

或者(使用国内的豆瓣源,数据会定期同步国外官网,速度快。)

pip install pytest-cov -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

1.2、示例

创建测试项目,目录结构:

src目录存放项目的源码

test目录存放单元测试用例

Python测试框架pytest(21)插件 - 单元测试覆盖率、随机执行用例

1、src目录下,创建my_status.py文件,为源代码。

功能实现为根据不同的code值,返回成功或失败信息。

脚本代码:

#!/usr/bin/env python
-*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""

def get_status(result):
    if result.get("code") == 000000:
        return "成功"
    elif result.get("code") == 100000:
        return "失败: %s" % result.get("msg")
    elif result.get("code") == 100001:
        return "失败: %s" % result.get("msg")
    elif result.get("code") == 100002:
        return "失败: %s" % result.get("msg")
    elif result.get("code") == 200000:
        return "失败: %s" % result.get("msg")
    elif result.get("code") == 200001:
        return "失败: %s" % result.get("msg")
    elif result.get("code") == 200002:
        return "失败: %s" % result.get("msg")
    else:
        return "失败: 系统异常,请稍后再试"

2、test目录下,创建test_my_status.py文件,为单元测试用例。

编写一条测试用例,验证code值为成功的情况。

脚本代码:

#!/usr/bin/env python
-*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""

from src.my_status import get_status

def test_get_status_success():
    result = {
        "code": 000000,
        "msg": "success!"
    }
    assert get_status(result) == "成功"

3、命令行跳转到项目根目录下,输入执行命令(参数 –cov):

pytest --cov

运行结果:

可以看到src目录下的my_status.py文件代码覆盖率为24%,其余代码覆盖率为100%。

Python测试框架pytest(21)插件 - 单元测试覆盖率、随机执行用例

4、生成html覆盖率报告

输入执行命令(参数 –cov –cov-report=html):

pytest --cov --cov-report=html

运行结果:

Python测试框架pytest(21)插件 - 单元测试覆盖率、随机执行用例

执行完成后,会在项目的根目录下生成htmlcov报告目录。

Python测试框架pytest(21)插件 - 单元测试覆盖率、随机执行用例

打开报告(浏览器打开index.html文件),可查看代码覆盖率。

Python测试框架pytest(21)插件 - 单元测试覆盖率、随机执行用例

点击指定的文件(例如my_status.py),可查看还有哪些代码没有覆盖到(标红的)。

Python测试框架pytest(21)插件 - 单元测试覆盖率、随机执行用例

5、指定运行模块(包、文件)

输入执行命令(参数 –cov=模块):

例如1:

pytest --cov=src

运行结果:

指定运行src包下的所有模块

Python测试框架pytest(21)插件 - 单元测试覆盖率、随机执行用例

例如2:

pytest --cov=src.my_status

运行结果:

指定运行src包下的my_status.py模块

Python测试框架pytest(21)插件 - 单元测试覆盖率、随机执行用例

2、pytest-random-order(随机执行用例)

pytest 默认运行用例的顺序是按模块和用例命名的 ASCII 编码顺序执行的,这就意味着每次运行用例的顺序都是一样的。

pytest-random-order 插件可打乱用例的执行顺序,进行随机执行。

该插件允许用户控制他们想要引入的随机性级别并禁用对测试子集的重新排序。通过传递先前测试运行中报告的种子值,可以按特定顺序重新运行测试。

2.1、安装

在命令行中运行以下命令进行安装:

pip install pytest-random-order

或者(使用国内的豆瓣源,数据会定期同步国外官网,速度快。)

pip install pytest-random-order -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

2.2、参数

–random-order 使用默认配置进行随机测试(默认情况下,它是禁用的)。

–random-order-bucket={global,package,module,class,parent,grandparent,none}

在指定的测试范围内进行随机测试。

类型:

Python测试框架pytest(21)插件 - 单元测试覆盖率、随机执行用例

–random-order-seed=RANDOM_ORDER_SEED 使用特定种子进行随机测试。

2.3、示例

创建项目,目录结构如下:

Python测试框架pytest(21)插件 - 单元测试覆盖率、随机执行用例

创建module1包下的test_case1.py文件,编写测试用例。

脚本代码:

#!/usr/bin/env python
-*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""

class TestDemo():
    def test_case1(self):
        print("执行用例1")

    def test_case2(self):
        print("执行用例2")

    def test_case3(self):
        print("执行用例3")

创建module2包下的test_case2.py文件,编写测试用例。

脚本代码:

#!/usr/bin/env python
-*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""

class TestClass():
    def test_case4(self):
        print("执行用例4")

    def test_case5(self):
        print("执行用例5")

    def test_case6(self):
        print("执行用例6")

1、默认执行

打开命令行,项目根目录下,执行命令

pytest -v

运行结果:

默认按顺序执行。

Python测试框架pytest(21)插件 - 单元测试覆盖率、随机执行用例

2、使用参数 –random-order

命令行执行命令

pytest -v --random-order

运行结果:

按随机执行用例,默认使用–random-order-bucket=module。

–random-order-seed=179023,每次执行后seed值都会变。

Python测试框架pytest(21)插件 - 单元测试覆盖率、随机执行用例

3、使用参数 –random-order-bucket

命令行执行命令

pytest -v --random-order-bucket=global

运行结果:

参数值为global,将所有的用例打乱执行。

Python测试框架pytest(21)插件 - 单元测试覆盖率、随机执行用例

4、使用参数 –random-order-seed

在使用随机执行时,如果想按照上次随机执行用例的顺序,可以使用此参数。

例如上次执行后,–random-order-seed=455773,则使用seed值455773。

Python测试框架pytest(21)插件 - 单元测试覆盖率、随机执行用例

命令行执行命令

pytest -v --random-order-seed=455773

运行结果:

根据随机种子,执行顺序与上一次相同。

Python测试框架pytest(21)插件 - 单元测试覆盖率、随机执行用例

2.4、禁用随机

在模块或类中想禁止用例随机执行,可以使用

pytestmark = pytest.mark.random_order(disabled=True)

创建module1包下的test_case3.py文件,编写测试用例。

脚本代码:

#!/usr/bin/env python
-*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""

import pytest

pytestmark = pytest.mark.random_order(disabled=True)

def test_case7():
    print("执行用例7")

def test_case8():
    print("执行用例8")

def test_case9():
    print("执行用例9")

创建module2包下的test_case4.py文件,编写测试用例。

脚本代码:

#!/usr/bin/env python
-*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""

import pytest

class TestCase():
    pytestmark = pytest.mark.random_order(disabled=True)

    def test_case10(self):
        print("执行用例10")

    def test_case11(self):
        print("执行用例11")

    def test_case12(self):
        print("执行用例12")

命令行执行命令

pytest -v --random-order

运行结果:

设置禁止随机执行的用例,都是按照顺序执行的。

Python测试框架pytest(21)插件 - 单元测试覆盖率、随机执行用例

2.5、禁用插件

如果不想使用此插件,输入禁用插件的命令

pytest -p no:random_order

注意:默认情况下禁用随机化。通过传递 -p no:random_order 您将停止插件的注册,因此其钩子将不会被注册,并且命令行选项也不会出现在 –help 中。

Python测试框架pytest(21)插件 - 单元测试覆盖率、随机执行用例

Original: https://blog.csdn.net/wangmcn/article/details/121038634
Author: wangmcn
Title: Python测试框架pytest(21)插件 – 单元测试覆盖率、随机执行用例

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/773026/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球