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 常用命令行选项(二)
本文接上篇继续简介pytest常用的命令行选项. 8.-v(--verbose) 选项 使用-v/--verbose选项,输出的信息会更详细.最明显的区别就是每个文件中的每个测试用例都占一行,测试的名 ...
- 前端构建工具之gulp_常用插件
gulp常用插件的使用 今天来看看一下gulp的常用插件的使用 就像gruntjs需要一个Gruntfile.js文件一样,gulp也需要一个文件作为它的主文件,在gulp中这个文件叫做gulpfil ...
- Jenkins常用插件说明(持续更新)
本文主要记录在学习以及使用Jenkins过程中常用的对我们有帮助的插件,同时本文将会持续进行更新.如果大家发现有其他野很好用的插件,也欢迎参照下面的格式,在评论中进行回复反馈. 一.通用插件 1.Em ...
- Maven常用插件
maven利用各种插件来管理构建项目,本文记录下工作中常用到的插件及使用方法.每个插件都会提供多个目标(goal),用于标示任务.各插件配置在pom.xml里,如下: <build> [. ...
- Struts2 JQuery UI常用插件
一.什么是插件 ①是遵循一定接口规范编写的程序 ②是原有系统平台功能的扩展和补充 ③只能运行在规定的系统平台下,而不能单独运行 注:由于jQuery插件是基于jQuery脚本库的扩展,所以所有jQue ...
- Easy UI常用插件使用
一.easy UI是类似于jQuery UI的插件库,它提供了丰富的各种常用插件:tree.datagrid... tree插件: 语法:$(selector).tree([settings]); 常 ...
- AngularJS常用插件与指令收集
angularjs 组件列表 bindonce UI-Router Angular Tree angular-ngSanitize模块-$sanitize服务详解 使用 AngularJS 开发一个大 ...
- jQuery常用插件
jQuery UI插件简介: jQuery UI是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库.包含底层用户交互.动画.特效和可更换主题的可视控件.我们可以直接用它来构建具 ...
- Sublime 常用插件简介
Sublime 常用插件简介 emmet: 前端必备神器.花个十几分钟学下Emmet语法 ,就可以极大提高web开发者HTML和CSS工作效率啦.一句话,牛逼---必备 CSS3: CSS3语法高 ...
- maven常用插件pom配置
一.问题描述: 部署一个maven打包项目时,jar包,依赖lib包全部手动上传至服务器,然后用maven部署报错:Exception in thread "main" java. ...
随机推荐
- Create GUID / UUID in JavaScript?
Code function uuidv4() { return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c => (c ^ crypto.g ...
- centos7.x下环境搭建(四)—redis安装
redis介绍 redis是用C语言开发的一个开源的高性能键值对(key-value)数据库.它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止redis支持的键值数据类型如下字符串.列表 ...
- 用itemloader提取,清洗数据的技巧
def parse_item(self, response): item_loader = NewItemLoader(NewItem(), response) item_loader.add_xpa ...
- [個人紀錄] regular 搜集
判斷有理數 ^(0|[1-9]([0-9]{1,5})?)((\.(([0-9]{1,5})?[1-9])))?$
- HTML CSS布局定位
我们在编写网页代码时,首先应该做的就是设计好页面的布局形式,然后再往里面填充内容.网页布局的好与坏,直接决定了网页最终的展示效果.PC端常见的网页布局形式有两列布局.三列布局等.在CSS中,我们通常使 ...
- Java NIO学习系列一:Buffer
前面三篇文章中分别总结了标准Java IO系统中的File.RandomAccessFile.I/O流系统,对于I/O系统从其继承体系入手,力求对类数量繁多的的I/O系统有一个清晰的认识,然后结合一些 ...
- python2.7写的图形密码生成器
#coding:utf8import random,wxdef password(event): a = [chr(i) for i in range(97,123)] b = [chr(i) for ...
- Composer安装laravel框架
一.打开CMD,进入想安装的目录,输入如下图所示,安装一个blog的项目: 二.进入指定目录即可看到生成的blog项目,如下图:
- C++运算符重载学习总结
在C ++中,我们可以使运算符适用于用户定义的类. 这意味着C ++能够为运算符提供数据类型的特殊含义,这种能力称为运算符重载. 例如,我们可以在像String这样的类中重载运算符'+',这样我们就可 ...
- 使用Fiddler监听java HttpURLConnection请求
使用Fiddler监听java HttpURLConnection请求