pytest--常用插件

简介: pytest--常用插件

前戏


虽然pytest给我们提供了很多的功能,但是有些功能还是没有,而pytest的插件可以满足我们的需求,比如用例失败重跑,统计代码覆盖率等等功能。


pytest-sugar


pytest-sugar插件可以输出彩色字符。它也能在运行过程中显示错误和失败用例的堆栈回溯信息,而且还能在屏幕右侧显示进度条。

安装

pip install pytest-sugar

使用插件后

使用pytest-sugar插件后,通过的测试用例后面会打勾,失败的测试用例后面会打叉号,而且屏幕右侧会显示进度条。


pytest-rerunfailures


失败重跑,这个插件非常实用,比如做自动化的时候,有些接口由于网络的原因,不稳定,就要多次运行。

pip install pytest-rerunfailures
import pytest
from time import sleep
import random
def test_demo1():
    assert True
def test_demo2():
    a=random.randint(1,5)
    assert a==3
def test_demo3():
    assert True

使用--reruns num就可以自定义失败后重跑几次,上面的代码,不出意外的话跑五次会有成功的

说明:如果第一次成功就没有RR,直接显示通√(勾),也不显示下面的3 reren。如果五次都失败,也不显示×(叉)


pytest-repeat


如果你希望在一个会话中重复运行测试,则可以使用pytest-repeat插件。如果测试总是断断续续的失败,那么这个插件很有用

pip install pytest-repeat

有了pytest-repeat插件后,可以使用--count来指定每个测试用例运行多次


上面的结果是一个执行三次之后再执行下一个用例三次,但有时我们想一个用例执行完一次后执行下一个,在执行第二次。这时候就要加上--repeat-scope参数。

--repeat-scope的参数有function(默认参数)、class、module、session

  • function:每个用例重复运行,全部运行结束后在执行下一个用例
  • class:以class为用例集合单位,重复执行class里的用例,在执行下一个
  • module:以模块为单位,重复执行模块里面的用例,在执行下一个
  • session:重复整个测试会话,既所有的测试用例执行一次,然后再执行第二次

使用--repeat-scope=session重复执行整个会话用例,先来看下代码

def test_demo1():
    assert True
def test_demo2():
    assert True
def test_demo3():
    assert True

在函数里使用装饰器实现多次运行

在来修改一下代码

import pytest
def test_demo1():
    assert True
@pytest.mark.repeat(4)  # 添加repeat装饰器
def test_demo2():
    assert True
def test_demo3():
    assert True

在来执行一次

可以通过加参数-x来实现有失败就停止运行。-x的用法在之前也讲过。


pytest-xdist


官网:https://github.com/pytest-dev/pytest-xdist

并行运行测试。通常测试都是依次执行的,因为有些资源以此只能被一个测试用例访问。如果你的测试不需要访问共享资源,那么就可以通过并行运行来提速。pytest-xdist插件可以实现这个功能。你可以指定处理器进程数目来同时运行多个测试,甚至可以把测试放在多台机器上运行

pip install pytest-xdist

import pytest
from time import sleep
@pytest.mark.parametrize('x', list(range(10)))
def test_demo(x):
    sleep(1)
    assert True

上面的代码如果我们正常运行,最少也需要10s才能执行结束

pytest-xdist插件的-n numprocesses选项可以指定运行测试的处理器进程数,-n auto选项可以自动侦测系统里的CPU数目。以下是上例在多个处理器上运行的情况


我的cpu是四核的,所以启动了四个

可以看到,时间比刚才快了很对。我们不能指望有几个处理器就能快多少倍,因为总有一些额外的开销,但很多测试场景允许并行测试,如果测试时间较长,就可以大幅节省时间

pytest-xdist插件的功能还有很多,比如把测试全部转移到另外的机器上运行等。其他的用法可以参考pytest-xdist文档。

自定义启动多个CPU

pytest -v -n 10 auto test_001


pytest-timeout


正常情况下,pytest里的测试是没有时间限制的。如果测试中涉及会消失的资源,比如web服务,那么最好为测试加上时间限制

pytest-timeout插件就提供了这个功能,它允许你在命令行指定超时时间。或者直接在测试代码中标记超时时间

import pytest
from time import sleep
def test_demo1():
    assert True
def test_demo2():
    sleep(50)  # 等待50s
    assert True
def test_demo3():
    assert True

pip install pytest-timeout

也可以把参数加到配置文件里

[pytest]
addopts = -rsxX -l -v --tb=short --strict --timeout=5

相关文章
|
测试技术
Pytest-插件介绍与使用
Pytest-插件介绍与使用
55 1
|
测试技术 Python
|
测试技术 Python
|
测试技术
46-pytest-分布式插件pytest-xdist使用
46-pytest-分布式插件pytest-xdist使用
|
JSON 测试技术 数据格式
19-pytest-allure-pytest环境搭建
19-pytest-allure-pytest环境搭建
|
测试技术 Python
01-pytest-安装及入门
01-pytest-安装及入门
|
API 开发工具 开发者
vim插件开发之python-helloworld插件
vim插件开发之python-helloworld插件
123 0
|
自然语言处理 Java 测试技术
pytest学习和使用21-测试报告插件allure-pytest如何使用?
pytest学习和使用21-测试报告插件allure-pytest如何使用?
166 0
pytest学习和使用21-测试报告插件allure-pytest如何使用?
|
Linux 测试技术 Python
pytest学习和使用1-pytest安装和版本查看
pytest学习和使用1-pytest安装和版本查看
487 0
pytest学习和使用1-pytest安装和版本查看
|
测试技术 C++
pytest学习和使用18-pytest.ini配置文件如何使用?
pytest学习和使用18-pytest.ini配置文件如何使用?
120 0