爆肝整理,pytest自动化测试框架-常用插件整理(必知必会)


前言

Pytest拥有丰富的插件架构。超过800个以上的外部插件和活跃的社区,在PyPI项目中以“ pytest- *”为标识。

1、pytest-html:用于生成HTML报告

一次完整的测试,测试报告是必不可少的,但是pytest自身的测试结果过于简单,而pytest-html正好可以给你提供一份清晰报告。

安装:

pip install -U pytest-html

用例:

import pytest
# import time

# 被测功能
def add(x, y):
    # time.sleep(1)
    return x + y

# 测试类
class TestLearning:
    data = [
        [3, 4, 7],
        [-3, 4, 1],
        [3, -4, -1],
        [-3, -4, 7],
    ]
    @pytest.mark.parametrize("data", data)
    def test_add(self, data):
        assert add(data[0], data[1]) == data[2]

运行完,会生产一个html文件 和 css样式文件夹assets,用浏览器打开html即可查看清晰的测试结果。

A1

A2

更加清晰美观的测试报告插件: allure-python(常用)

2、pytest-cov:用于生成覆盖率报告

在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况。

安装:

pip install -U pytest-cov

运行:

E:\workspace-py\Pytest>pytest --cov=.
========================================================================== test session starts ==========================================================================
platform win32 -- Python 3.7.3, pytest-6.0.2, py-1.9.0, pluggy-0.13.0
rootdir: E:\workspace-py\Pytest
plugins: allure-pytest-2.8.18, cov-2.10.1, html-3.0.0, rerunfailures-9.1.1, xdist-2.1.0
collected 4 items                                                                                                                                                        

test_sample.py ....                                                                                                                                                [100%]

----------- coverage: platform win32, python 3.7.3-final-0 -----------
Name             Stmts   Miss  Cover
------------------------------------
conftest.py          5      3    40%
test_sample.py       7      0   100%
------------------------------------
TOTAL               12      3    75%


=========================================================================== 4 passed in 0.06s ===========================================================================

3、pytest-xdist:实现多线程、多平台执行

通过将测试发送到多个CPU来加速运行,可以使用-n NUMCPUS指定具体CPU数量,或者使用-n auto自动识别CPU数量并全部使用。

安装:

pip install -U pytest-xdist

用例:

import pytest
import time

# 被测功能
def add(x, y):
    time.sleep(3)
    return x + y

# 测试类
class TestAdd:
    def test_first(self):
        assert add(3, 4) == 7

    def test_second(self):
        assert add(-3, 4) == 1

    def test_three(self):
        assert add(3, -4) == -1

    def test_four(self):
        assert add(-3, -4) == 7

运行:

pytest test_sample.py

pytest test_sample.py -n auto

pytest test_sample.py -n 2

上述分别进行了未开多并发、开启4个cpu、开启2个cpu。

4、pytest-rerunfailures:实现重新运行失败用例

我们在测试时可能会出现一些间接性故障,比如接口测试遇到网络波动,web测试遇到个别插件刷新不及时等,这时重新运行则可以帮忙我们消除这些故障。

安装:

pip install -U pytest-rerunfailures

运行:

pytest test_sample.py --reruns 3

如果你想设定重试间隔,可以使用 --rerun-delay 参数指定延迟时长(单位秒);

如果你想重新运行指定错误,可以使用 --only-rerun 参数指定正则表达式匹配,并且可以使用多次来匹配多个。

pytest --reruns 5 --reruns-delay 1 --only-rerun AssertionError --only-rerun ValueError

如果你只想标记单个测试失败时自动重新运行,可以添加 pytest.mark.flaky() 并指定重试次数以及延迟间隔。

@pytest.mark.flaky(reruns=5, reruns_delay=2)
def test_example():
    import random
    assert random.choice([True, False])

5、pytest-randomly:实现随机排序测试

测试中的随机性非常越大越容易发现测试本身中隐藏的缺陷,并为你的系统提供更多的覆盖范围。

安装:

pip install -U pytest-randomly

运行:

pytest test_sample.py

这功能默认情况下处于启用状态,但可以通过标志禁用(假如你并不需要这个模块,建议就不要安装)。

pytest -p no:randomly

如果你想指定随机顺序,可以通过 --randomly-send 参数来指定,也可以使用 last 值来指定沿用上次的运行顺序。

pytest --randomly-seed=4321
pytest --randomly-seed=last

6、其他活跃的插件

还有一些其他功能性比较活跃的、一些专门为个别框架所定制的、以及为了兼容其他测试框架,这里暂不做演示

pytest-django:用于测试Django应用程序(Python Web框架)。
pytest-flask:用于测试Flask应用程序(Python Web框架)。
pytest-splinter:兼容Splinter Web自动化测试工具。
pytest-selenium:兼容Selenium Web自动化测试工具。

pytest-testinfra:测试由Salt,Ansible,Puppet, Chef等管理工具配置的服务器的实际状态。
pytest-mock:提供一个mock固件,创建虚拟的对象来实现测试中个别依赖点。
pytest-factoryboy:结合factoryboy工具用于生成各式各样的数据。
pytest-qt:提供为PyQt5和PySide2应用程序编写测试。
pytest-asyncio:用于使用pytest测试异步代码。
pytest-bdd:实现了Gherkin语言的子集,以实现自动化项目需求测试并促进行为驱动的开发。
pytest-watch:为pytest提供一套快捷CLI工具。

pytest-testmon:可以自动选择并重新执行仅受最近更改影响的测试。
pytest-assume:用于每个测试允许多次失败。
pytest-ordering:用于测试用例的排序功能。
pytest-sugar:可立即显示失败和错误并显示进度条。
pytest-dev/pytest-repeat:可以重复(可指定次数)执行单个或多个测试。

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

勇往直前,脚踏实地,只要努力不放弃,成功就在眼前,每一次努力都会迈向辉煌的一步,相信自己,坚持到底!

坚持坚持再坚持,无论身处何地,只要心怀梦想,努力追求,终将收获辉煌;不畏困难,敢于超越,每一次努力都离成功更近一步,相信自己,勇往直前!

不论阻碍多少,不管困苦如何,只要心怀信念,努力拼搏,就能超越自我,创造辉煌;奋斗是生命的底色,坚持是成功的密码,相信自己,勇敢前行,未来属于那些不懈奋斗的人。