测试开发必知必会:Pytest框架实战
off999 2025-05-21 15:46 36 浏览 0 评论
每天进步一点点,关注我们哦,每天分享测试技术文章
本文章出自【码同学软件测试】
码同学公众号:自动化软件测试
码同学抖音号:小码哥聊软件测试
应用场景:
pytest 框架可以解决我们多个测试脚本一起执行的问题。
它提供了测试用例的详细失败信息,使得开发者可以快速准确地改正问题。它兼容最新版本的 Python。它还兼容 unittest、doctest 和 nose,开箱即用。接下来我们详细了解下pytest框架。
01
安装和介绍
概念:
pytest 是 python 的一种单元测试框架,同自带的 Unittest 测试框架类似,相比于 Unittest 框架使用起来更简洁,效率更高
官网:https://docs.pytest.org/en/latest/
中文文档地址:https://www.osgeo.cn/pytest/
01
特点和书写规则
特点:
- 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
- 支持简单的单元测试和复杂的功能测试
- 支持参数化
- 执行测试过程中可以将某些测试跳过,或者对某些预期失败的 Case 标记成失败 支持重复执行失败的 Case
- 支持运行由 Nose, Unittest 编写的测试 Case
- 具有很多第三方插件,并且可以自定义扩展
- 方便的和持续集成工具集成
安装:
通过pip命令安装指定版本
pip3 install pytest==5.4.3pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效。
使用 pytest编写用例,必须遵守以下规则:
测试文件名必须以“test”开头或者"test"结尾(如:test_ab.py)
测试方法必须以“test”开头。test*.py 或 *test.py
测试类命名以“Test”开头。用例识别:包含所有test_*的方法(测试类不能带有— init—方法)
断言使用基本的assert即可
使用 pytest 需要更改 pycharm 集成设置
Pytest 可以执行 uinttest 写的用例和方法02
运行方式
运行方式分为两种
- 命令行模式【建议】
- 主函数模式
命令行模式【建议】
命令行中执行 pytest -s test_demo01.py主函数模式
import pytest
class Test:def test_case01(self):print(1)
def test_case02(self):print(2)# 主函数执行if __name__ == '__main__':pytest.main(['-s','test_demo01.py'])在 test_demo01.py文件中增加主函数
-s 表示支持控制台打印,如果不加,print 不会出现任何内容
运行结果
- . 表示成功
- F 表示失败
小结:建议使用命令行的形式运行,对比主函数模式更加方便
03
setup 和 teardown
pytest 在运行自动化脚本的前后会执行两个特殊的方法,分别是 setup 和 teardown 在执行脚本之前会执行 setup方法,在执行脚本之后会执行 teardown 方法,我们可以在 setup 中进行获取驱动对象的操作,在teardown 中进行关闭驱动对象的操作
应用场景:
函数级别方法
运行于测试方法的始末,运行一次测试函数会运行一次 setup 和teardown。
示例代码
import pytestclass Test:
def setup(self):print('test--->setup')def teardown(self):print('test--->teardown')def test_case01(self):print('test--->1')
def test_case02(self):print('test--->2')
# 主函数执行if __name__ == '__main__':pytest.main(['-s','test_demo01.py'])执行结果
示例代码
import pytestclass Test:
def setup_class(cls):print('test--->setupcls')def teardown_class(cls):print('test--->teardowncls')def test_case01(self):print('test--->1')
def test_case02(self):print('test--->2')
# 主函数执行if __name__ == '__main__':pytest.main(['-s','test_demo01.py'])执行结果
02
Pytest-常用插件
插件列表网址: https://plugincompat.herokuapp.com包含很多插件包,大家可依据工作的需求选择 使用。
01
Pytest-html测试报告
应用场景
自动化测试脚本最终执行是通过还是不通过,需要通过测试报告进行体现
使用命令进行安装 指定版本
pip install pytest-html=2.1.1
执行命令
pytest test_login.py --html=report.html
查看报告
报告展示:
02
控制函数执行顺序
应用场景:
现实生活中,如果想下订单,必须先登录,我们可以通过插件的形式来控制函数执行的顺序 安装
使用命令 pip3 install pytest-ordering
- 标记于被测试函数,@pytest.mark.run(order=x)
- 根据order传入的参数来解决运行顺序
- order值全为正数或全为负数时,运行顺序:值越小,优先级越高
- 正数和负数同时存在:正数优先级高
示例代码
import pytest
class Test:
def test_case01(self):print('test--->001')
@pytest.mark.run(order=2)def test_case02(self):print('test--->002')
@pytest.mark.run(order=1)def test_case03(self):print('test--->003')执行结果
03
失败重试
免费领取 码同学软件测试 课程笔记+超多学习资料+完整视频+最新面试题,可以转发文章 + 私信「码同学666」获取资料哦
应用场景:
由于网络的原因造成自动化脚本报错,我们可以使用失败重试的插件,当失败后尝试再次运行,一般情况最终成功可以视为成功,但最好进行进行排查时候是脚本问题
使用命令pip3install pytest-rerunfailures 进行安装使用在配置文件中的命令行参数中增加 -- reruns n
pytest -s test_demo2.py --reruns 3
示例代码
class Test:
def test_a(self):assert 1,1 # 断言成功
def test_b(self):print('失败')assert 0,1 # 断言失败运行结果
R 表示重试
注意重试时,如果脚本通过,那么后续不再重试
03
pytest高级用法
01
跳过测试函数
应用场景:
同一个软件在不同的设备上可能会有不同的效果,比如,iOS 的 3d touch 操作是需要 6s 以上设备支持 的,6 和 6s 都可以安装同一款应用,如果设备不支持,那么根本没有必要去测试这个功能。此时,我们可以 让这种函数进行跳过
使用方式:
在需要跳过的测试脚本之上加上装饰器 @pytest.mark.skipif(condition, reason="xxx") | |
condition reason | 跳过的条件,必传参数 标注原因,必传参数 |
示例代码:
class Test:
def test_a(self):assert 1,1 # 断言成功@pytest.mark.skipif(condition=True,reason='x')def test_b(self):print('失败')assert 0,1 # 断言失败执行结果
02
预期失败
应用场景:
举例,测试手机号码输入框长度为11位数字,如果我们传入一个 12 位数字,此时可以使用预期失败
@pytest.mark.xfail(condition=None, reason=None, raises=None, run=True, strict=False)
- condition 跳过条件,必填参数
- reason 标注原因,必填参数
使用方式:
在需要标记预期失败的测试脚本之上加上装饰器示例
示例代码:
class Test:
def test_a(self):print('-----testa')assert 1,1 # 断言成功
@pytest.mark.xfail(condition=True,reason='x')def test_b(self):print('-----testb')assert 0,1 # 断言失败
@pytest.mark.xfail(condition=True, reason='x')def test_c(self):print('-----testc')assert 0, 2 # 断言失败执行结果:
x 表示预期失败结果失败 不算是bug,X 表示预期失败结果成功 算是bug
03
数据参数化
应用场景:
登录功能都是输入用户名,输入密码,点击登录。但登录的用户名和密码如果想测试多个值是没有办法 用普通的操作 实现的。数据参数化可以帮我实现这样的效果。
方法名:
@pytest.mark.parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)
- argnames 参数名
- argvalues 参数对应值,类型必须为可迭代类型,一般使用list
一个参数使用方式
- argnames 为字符串类型,根据需求决定何时的参数名
- argvalues 为列表类型,根据需求决定列表元素中的内容
- 在测试脚本中,参数,名字与 argnames 保持一致
- 在测试脚本中正常使用
argvalues 列表有多少个内容,这个脚本就会运行几次
示例代码:
class Test:
@pytest.mark.parametrize('age',[18,19,23,21])def test_01(self,age):print(age)执行结果:
多个参数:
class Test:
@pytest.mark.parametrize(('name','age'),[('zhangsan',18),('lisi',19)]) def test_01(self,name,age):print(name,age)执行结果:
04
Pytest-fixture
应用场景:
fixture 修饰器来标记固定的工厂函数,在其他函数,类调用它时会被激活并优先执行,通常会被用于完成预置处理和重复操作
使用方式:
- 通过函数引用
示例代码:
class Testlogin:
@pytest.fixture()def test_login(self):print('登录操作')uname = 'lily'return uname
def test_a(self,test_login):print(f'test_a {test_login}')
def test_b(self):print('不需要登录操作')运行结果:
免费领取码同学软件测试课程笔记+超多学习资料+学习完整视频,可以关注我们公众号哦:自动化软件测试
本文著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
相关推荐
- 多媒体播放器(多媒体播放器怎么使用)
-
1.开启蓝牙耳机:拨动蓝牙耳机的电源开关,长按住蓝牙耳机的【电源】按钮5秒钟左右松手,直至指示灯长亮蓝色即可。注:(蓝牙耳机型号不同,具体蓝牙耳机开启方式请参考蓝牙耳机说明书操作)2.开启手机蓝牙:向...
-
- 全国教育平台登录入口(2020全国教育平台登录入口)
-
1、首先我们需要打开全国中小学教育平台官网,进入到主页当中;官网链接:https://www.xueanquan.com/(复制打开)2、在主界面右上角我们可以看到登录入口,点击“您好,请登录”,输入账号及密码;3、这里的账号老师和学生之间...
-
2026-01-28 06:51 off999
- 新手怎么从1688拿货(新手怎么从1688拿货卖烟酒怎么拿货)
-
在1688平台上进货分为以下几个步骤:1.注册并登录1688账号:首先,您需要在阿里巴巴旗下的小额批发平台1688(https://www.1688.com/)注册一个账号。如果已经有淘宝...
- 放置三国满v无限元宝(放置三国无限元宝破解版是真的吗)
-
步骤如下:。首先,你需要打开GG,然后运行游戏,并进入游戏中的商店或充值界面。接下来,输入当前游戏元宝的值并点击“搜索”按钮。然后在游戏中重新获得几个元宝,再次输入新的元宝值并点击“搜索”按钮。重复此...
- 安卓安装包下载(telegarm安卓安装包下载)
-
安装软件可以使用手机自带的应用商店,或者下载apk安装包安装手机安装包安装方法:1.apk文件是安卓手机的安装包,可以通过手机qq来安装和打开apk文件。2.首先在手机上打开qq,找到页面中的apk文...
- 财经股票怎么投资(股票初学者相关财经知识)
-
可以!答案是肯定的,不过现在对直播的主讲人还是有一些要求和限制的,首先主讲人要有从业人员资格证书,这是硬件条件。其次就是所讲的内容是什么,要符合要求,不能讲股票名称,推荐股票,通常情况下↓都是对大盘走...
- 魔兽争霸3冰封王座下载教程(魔兽争霸3冰封王座下载教程手机版)
-
没法下载,因为没有说明在什么平台下载可以在网易的官方网站上进行下载,下载地址如下:https://dz.blizzard.cn/下载的时候请选择中间的“平台完整版”,这个版本包含了《魔兽争霸3》游戏本...
- 360浏览器下载资源失败的原因
-
应该是因为手机上,没有足够的空间造成的。360浏览器如果无法下载文件,也有可能是因为网络原因,网络不通畅导致的,手机上没有足够的空间,也会造成无法下载360浏览器下载不了东西的原因可能有以下几个方面:...
- b站网页入口(b站网页入口链接怎么打开)
-
1.不存在无需付费的B站网站入口。2.这是因为B站是一个商业化的视频分享平台,为了维持平台的运营和提供更好的服务,需要收取一定的费用。3.尽管B站有一些免费的内容可以观看,但是对于一些高质量的原...
- 新商盟卷烟订货平台(新商盟卷烟网)
-
你好。其实这个新商盟系统本身就不怎么好,经常出现问题。你说的情况应该是:一,网络未连接。忘记连接和忽断网。二,系统出现问题。这还是常见。三,未点到登陆按钮,可用回车健代替。如果无法解决影响订烟,请及时...
- 极品五笔(极品五笔的拼音怎么打)
-
读音是“jípǐnwǔbǐshūrùfǎ”。“极”,读音为jí,基本含义为顶端,最高点,尽头,如登极、登峰造极;引申含义为指地球的南北两端或电路、磁体的正负两端,如极地、极圈。也常做形容词...
- pubg国际服正版下载(pubg国际服正版下载最新地址)
-
您好,以下是下载PUBGMobile国际服正式版的步骤:1.首先,您需要在您的设备上卸载任何先前安装的PUBGMobile版本。2.打开您的手机或平板电脑的应用商店(GooglePlayS...
- 视频剪辑制作教学(视频剪辑及制作)
-
可以在视频播放的时候截图,之后保存成JPEG的形式就可以了。具体的方法:设备如果是手机的话,可以在视频图标上点击打开播,到需要做成照片时暂停一下。然后再按下电源键的同时按下手机的音量减键,之后,当存了...
- 人工智能培训一般多少钱(二本人工智能就业现状)
-
python学习根据每个人的基础情况和学习的课程不同,费用自然也是不同的,一般在一万元到三万元之间,具体就看培训机构如何收费。现在市面上的培训机构很多,想学习python的朋友一定要慎重选择,根据课程...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
win7系统还原步骤图解(win7还原电脑系统的步骤)
-
python入门到脱坑 输入与输出—str()函数
-
linux软件(linux软件图标)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
