全功能Python测试框架:pytest
python通用测试框架大多数人用的是unittest+HTMLTestRunner,这段时间看到了pytest文档,发现这个框架和丰富的plugins很好用,所以来学习下pytest.
pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点:
- 简单灵活,容易上手
- 支持参数化
- 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests)
- pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等
- 测试用例的skip和xfail处理
- 可以很好的和jenkins集成
- report框架----allure 也支持了pytest
安装pytest:
pip install -U pytest
验证安装的版本:
pytest --version
几个pytest documentation中的例子:
例子1:
import pytest# content of test_sample.py
def func(x):return x + 1
def test_answer():assert func(3) == 5
命令行切换到文件所在目录,执行测试(也可以直接在IDE中运行):
这个测试返回一个失败报告,因为func(3)不返回5。
例子2:
当需要编写多个测试样例的时候,我们可以将其放到一个测试类当中,如:
class TestClass: def test_one(self): x = "this" assert 'h' in x def test_two(self): x = "hello" assert hasattr(x, 'check')
运行以上例子:
从测试结果中可以看到,该测试共执行了两个测试样例,一个失败一个成功。同样,我们也看到失败样例的详细信息,和执行过程中的中间结果。-q即-quiet,作用是减少冗长,具体就是不再展示pytest的版本信息。
如何编写pytest测试样例
通过上面2个实例,我们发现编写pytest测试样例非常简单,只需要按照下面的规则:
- 测试文件以test_开头(以_test结尾也可以)
- 测试类以Test开头,并且不能带有 init 方法
- 测试函数以test_开头
- 断言使用基本的assert即可
运行模式
Pytest的多种运行模式,让测试和调试变得更加得心应手,下面介绍5种常用的模式。在介绍之前需要提醒一句,运行pytest时会找当前目录及其子目录中的所有test_*.py 或 *_test.py格式的文件以及以test开头的方法或者class,不然就会提示找不到可以运行的case了。
1.运行后生成测试报告(htmlReport)
安装pytest-html:
pip install -U pytest-html
运行模式:
pytest --html=report.html
报告效果:
在以上报告中可以清晰的看到测试结果和错误原因,定位问题很容易。
2.运行指定的case
当我们写了较多的cases时,如果每次都要全部运行一遍,无疑是很浪费时间的,通过指定case来运行就很方便了。
例子代码:
class TestClassOne(object):def test_one(self):x = "this"assert 't'in xdef test_two(self):x = "hello"assert hasattr(x, 'check')class TestClassTwo(object):def test_one(self):x = "iphone"assert 'p'in xdef test_two(self):x = "apple"assert hasattr(x, 'check')
运行模式:
模式1:直接运行test_se.py文件中的所有cases:
pytest test_se.py
模式2:运行test_se.py文件中的TestClassOne这个class下的两个cases:
pytest test_se.py::TestClassOne
模式3:运行test_se.py文件中的TestClassTwo这个class下的test_one:
pytest test_se.py::TestClassTwo::test_one
注意:定义class时,需要以T开头,不然pytest是不会去运行该class的。
3.多进程运行cases
当cases量很多时,运行时间也会变的很长,如果想缩短脚本运行的时长,就可以用多进程来运行。
安装pytest-xdist:
pip install -U pytest-xdist
运行模式:
pytest test_se.py -n NUM
其中NUM填写并发的进程数。
4.重试运行cases
在做接口测试时,有事会遇到503或短时的网络波动,导致case运行失败,而这并非是我们期望的结果,此时可以就可以通过重试运行cases的方式来解决。
安装pytest-rerunfailures:
pip install -U pytest-rerunfailures
运行模式:
pytest test_se.py --reruns NUM
NUM填写重试的次数。
5.显示print内容
在运行测试脚本时,为了调试或打印一些内容,我们会在代码中加一些print内容,但是在运行pytest时,这些内容不会显示出来。如果带上-s,就可以显示了。
运行模式:
pytest test_se.py -s
另外,pytest的多种运行模式是可以叠加执行的,比如说,你想同时运行4个进程,又想打印出print的内容。可以用:
pytest test_se.py -s -n 4
全功能Python测试框架:pytest相关推荐
- gtest测试框架使用详解_【python】新手小白必看,教你如何使用全功能Python测试框架 - python秋枫...
大家好,我是在升职加薪道路上越奋斗头发越少的阿茅. 今天来跟想入门还徘徊在门外的小白们聊一聊 1.安装和简单使用 2.配置文件 3.断言 一. 第1步 (安装和简单使用) pytest是一个非常成熟的 ...
- Python测试框架pytest(04)fixture - 测试用例调用fixture、fixture传递测试数据
Python测试框架pytest系列可以查看下列 Python测试框架pytest(01)简介.安装.快速入门_编程简单学的博客-CSDN博客 Python测试框架pytest(02)PyCharm设 ...
- Python测试框架pytest(05)fixture - error和failed、fixture实例化、多个fixture
Python测试框架pytest系列可以查看下列 Python测试框架pytest(01)简介.安装.快速入门_编程简单学的博客-CSDN博客 Python测试框架pytest(02)PyCharm设 ...
- Python测试框架pytest(03)setup和teardown
Python测试框架pytest系列可以查看下列 Python测试框架pytest(01)简介.安装.快速入门_编程简单学的博客-CSDN博客 Python测试框架pytest(02)Py ...
- Python测试框架Pytest的基础入门
Pytest简介 Pytest is a mature full-featured Python testing tool that helps you write better programs.T ...
- Python测试框架pytest(01)简介、安装、快速入门
1.简介 pytest 是成熟的功能齐全的 Python 测试工具,可帮助你编写更好的程序. pytest 是一个使构建简单和可伸缩的测试变得容易的框架.测试具有表达性和可读性,不需要样板代码.几分钟 ...
- Python 测试框架pytest
1.简介 pytest 是一个成熟的.功能齐全的 Python 测试工具,帮助你编写更好的程序. 2.特点 1)容易上手,入门简单,文档丰富,文档中有很多demo学习 2)可以支持简单的单元测试.复杂 ...
- Python测试框架pytest(23)插件 - pytest-picked、pytest-lazy-fixture
目录 1.pytest-picked(运行未提交的git用例) 1.1.安装 1.2.参数 1.3.用法 1.4.示例 2.pytest-lazy-fixture(在pytest.mark.param ...
- Python测试框架pytest(22)插件 - pytest-xdist(分布式执行)
目录 1.安装 2.示例 3.原理和流程 4.解决:多进程运行次数 当测试用例非常多的时候,一条条按顺序执行测试用例,是很浪费测试时间的.这时候就可以用到 pytest-xdist,让自动化测试用例可 ...
最新文章
- cad菜单栏快捷键_拒绝效率低下,教你瞬间提升10倍!老师傅珍藏多年CAD快捷键...
- 机器学习内卷化:博士数量激增,本硕毕业生有点慌 | reddit热议
- openwrt监控linux,OpenWRT上判断客户端在线个数
- python创建一个新的txt文件-如何在python中编辑文本文件并创建一个新的文本文件?...
- SQlite-数据库的访问实例(转)
- 对于机器学习中,数据增强
- 电子科技大学研究生计算机与科学,川大和电子科技大学那个计算机考研专业好?...
- C# Note32: 查漏补缺
- Opencv实现利用滑动条来调整阈值
- MogDB/openGauss 生态工具-MTK(Migration ToolKit) 数据库迁移
- 云小课 | 区块链关键技术之一:共识算法
- 教你高效管理CrossOver容器
- vue 获取本地的json文件内容
- HTTP请求时POST参数到底应该怎么传?
- 如何设置电脑的保护色?
- HarvestText
- 开源HIDS OSSEC部署与扩展使用(安检)
- DS1302时钟(电子钟)
- Android shape画一个圆角虚线框
- 关于少儿编程编程语言的选择,python还是c++