自动化测试框架之Pytest
基于python的自动化测试框架:
- unittest (白盒单元测试)
- pytest(白盒单元测试)
- robotframework (系统测试)
pytest 可以用来做 系统测试 的自动化, 它的特点有
用 Python 编写测试用例,简便易用
可以用 文件系统目录层次 对应 手工测试用例 层次结构
灵活的 初始化清除 机制
可以灵活挑选测试用例执行
利用第三方插件,可以生成不错的报表
pytest测试用例
class Test_错误密码:def test_C001001(self):print('\n用例C001001')assert 1 == 1def test_C001002(self):print('\n用例C001002')assert 2 == 2def test_C001003(self):print('\n用例C001003')assert 3 == 2
(1)要求编写测试用例代码文件 必须以 test_
开头,或者以 _test
结尾
(2)如果我们把测试用例存放在类中, 类名必须以 Test
为前缀的 类
,用例对应的方法必须以 test
为前缀的方法
(3)测试用例代码执行命令:pytest
- 如果我们希望 显示测试代码中print的内容,因为这些打印语句在调试代码时很有用,可以加上命令行参数 -s
pytest -s
- 如果我们希望得到更详细的执行信息,包括每个测试类、测试函数的名字,可以加上参数 -v,这个参数可以和 -s 合并为 -sv
pytest -sv
(4)产生测试报告
安装pytest-html插件
pip install pytest-html
产生报告
pytest cases --html=report.html --self-contained-html
初始化清除
- 模块级别
模块级别
的初始化、清除 分别 在整个模块的测试用例 执行前后执行,并且 只会执行1次
def setup_module():print('\n *** 初始化-模块 ***')def teardown_module():print('\n *** 清除-模块 ***')class Test_错误密码:def test_C001001(self):print('\n用例C001001')assert 1 == 1def test_C001002(self):print('\n用例C001002')assert 2 == 2def test_C001003(self):print('\n用例C001003')assert 3 == 2class Test_错误密码2:def test_C001021(self):print('\n用例C001021')assert 1 == 1def test_C001022(self):print('\n用例C001022')assert 2 == 2
执行命令 pytest cases -s
,运行结果如下
collected 5 itemscases\登录\test_错误登录.py*** 初始化-模块 ***用例C001001
.
用例C001002
.
用例C001003
F
用例C001021
.
用例C001022
.*** 清除-模块 ***
- 类级别
类级别
的初始化、清除 分别 在整个类的测试用例 执行前后执行,并且 只会执行1次
def setup_module():print('\n *** 初始化-模块 ***')def teardown_module():print('\n *** 清除-模块 ***')class Test_错误密码:@classmethoddef setup_class(cls):print('\n === 初始化-类 ===')@classmethoddef teardown_class(cls):print('\n === 清除 - 类 ===')def test_C001001(self):print('\n用例C001001')assert 1 == 1def test_C001002(self):print('\n用例C001002')assert 2 == 2def test_C001003(self):print('\n用例C001003')assert 3 == 2class Test_错误密码2:def test_C001021(self):print('\n用例C001021')assert 1 == 1def test_C001022(self):print('\n用例C001022')assert 2 == 2
执行命令 pytest cases -s
,运行结果如下
collected 5 itemscases\登录\test_错误登录.py*** 初始化-模块 ***=== 初始化-类 ===用例C001001
.
用例C001002
.
用例C001003
F=== 清除 - 类 ===用例C001021
.
用例C001022
.*** 清除-模块 ***
- 方法级别
方法级别 的初始化、清除 分别 在类的 每个测试方法 执行前后执行,并且 每个用例分别执行1次
def setup_module():print('\n *** 初始化-模块 ***')def teardown_module():print('\n *** 清除-模块 ***')class Test_错误密码:@classmethoddef setup_class(cls):print('\n === 初始化-类 ===')@classmethoddef teardown_class(cls):print('\n === 清除 - 类 ===')def setup_method(self):print('\n --- 初始化-方法 ---')def teardown_method(self):print('\n --- 清除 -方法 ---')def test_C001001(self):print('\n用例C001001')assert 1 == 1def test_C001002(self):print('\n用例C001002')assert 2 == 2def test_C001003(self):print('\n用例C001003')assert 3 == 2class Test_错误密码2:def test_C001021(self):print('\n用例C001021')assert 1 == 1def test_C001022(self):print('\n用例C001022')assert 2 == 2
执行命令 pytest cases -s
,运行结果如下
collected 5 itemscases\登录\test_错误登录.py*** 初始化-模块 ***=== 初始化-类 ===--- 初始化-方法 ---用例C001001
.--- 清除 -方法 ------ 初始化-方法 ---用例C001002
.--- 清除 -方法 ------ 初始化-方法 ---用例C001003
F--- 清除 -方法 ---=== 清除 - 类 ===用例C001021
.
用例C001022
.*** 清除-模块 ***
挑选测试用例执行
- 指定一个模块
pytest cases\登录\test_错误登录.py
- 指定目录
指定一个目录
pytest cases
指定多个目录
pytest cases1 cases2\登录
- 指定一个类
pytest cases\登录\test_错误登录.py::Test_错误密码
- 指定一个类方法
pytest cases\登录\test_错误登录.py::Test_错误密码::test_C001001
- 根据函数名字
pytest -k C001001 -s
注意,-k 后面的名字
可以是测试函数的名字,可以是类的名字,可以是模块文件名,可以是目录的名字
是大小写敏感的
不一定要完整,只要能有部分匹配上就行
可以用 not 表示选择名字中不包含,比如
pytest -k "not C001001" -s
可以用 and 表示选择名字同时包含多个关键字,比如
pytest -k "错 and 密码2" -s
可以用 or 表示选择名字 包含指定关键字之一即可,比如
pytest -k "错 or 密码2" -s
数据驱动
如果有一批测试用例,具有 相同的测试步骤
,只是 测试参数数据不同
。
自动化测试时,把测试数据从用例代码中 分离
开来,以后增加新的测试用例,只需要修改数据。
class Test_错误登录:@pytest.mark.parametrize('username, password, expectedalert', [(None, '88888888', '请输入用户名'),('byhy', None, '请输入密码'),('byh', '88888888', '登录失败 : 用户名或者密码错误'),('byhy', '8888888', '登录失败 : 用户名或者密码错误'),('byhy', '888888888', '登录失败 : 用户名或者密码错误'),])def test_UI_0001_0005(self, username, password, expectedalert):alertText = loginAndCheck(username, password)assert alertText == expectedalert
用例 UI-0001
到 UI-0005
这5个登录的测试用例,共同的特点是,它们测试步骤是一模一样的,只是输入的数据(用户名、密码)不同,要检查的输出数据(错误提示)不同。
自动化测试框架之Pytest相关推荐
- Python自动化测试框架之Pytest教程【让你小鸡变老鹰】
Pytest pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点: · 简单灵活,容易上手 · 支持参数化 · 能够支持简单的单元测试和复杂的功能测试,还可以用来做sele ...
- 接口自动化测试框架开发 | Pytest+Allure+AIOHTTP+用例自动生成
测试开发实战技能进阶学习,文末加群! 近期准备优先做接口测试的覆盖,为此需要开发一个测试框架,经过思考,这次依然想做点儿不一样的东西. 接口测试是比较讲究效率的,测试人员会希望很快能得到结果反馈,然而 ...
- Python自动化测试框架之Pytest相关用法-基本使用(1)
前期准备 需要准备:pytest库 执行命令:pip install pytest.由于已经安装好了,所以执行情况会如下图所示 安装完成后,如果能够导入说明安装成功可以使用了 Pytest相关 1.基 ...
- Python自动化测试框架之Pytest相关用法-Fixture(2)
1.setup和teardown 和unittest一样,pytest也有自己的前置后置条件:setup.teardown.但不同的是,pytest的类型比较多,多达10种,根据不同的生效范围分别为以 ...
- pytest接口自动化测试框架 | 汇总
视频来源:B站<冒死上传!pytest接口自动化测试框架(基础理论到项目实战及二次开发)教学视频[软件测试]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...
- 【万字长文】2022年最全的搭建Web自动化测试框架教程
测试框架的设计有两种思路,一种是自底向上,从脚本逐步演变完善成框架,这种适合新手了解框架的演变过程.另一种则是自顶向下,直接设计框架结构和选取各种问题的解决方案,这种适合有较多框架事件经验的人.本章和 ...
- 从0开始搭建Web自动化测试框架
前言: 测试框架的设计有两种思路,一种是自底向上,从脚本逐步演变完善成框架,这种适合新手了解框架的演变过程.另一种则是自顶向下,直接设计框架结构和选取各种问题的解决方案,这种适合有较多框架事件经验的人 ...
- 大厂年薪43w测试开发手把手教你搭建Web自动化测试框架,超详细
测试框架的设计有两种思路,一种是自底向上,从脚本逐步演变完善成框架,这种适合新手了解框架的演变过程.另一种则是自顶向下,直接设计框架结构和选取各种问题的解决方案,这种适合有较多框架事件经验的人.本章和 ...
- python自动化测试框架pytest.pdf_Python自动化测试框架
随着技术的进步和自动化技术的出现,市面上出现了一些自动化测试框架.只需要进行一些适用性和效率参数的调整,这些自动化测试框架就能够开箱即用,大大节省了开发时间.而且由于这些框架被广泛使用,他们具有很好的 ...
最新文章
- opencv python下载_[福利] OpenCV4 Python 最新中文版官方教程来了(附下载)
- EXSI 连接硬件USB pass-through
- 数据库自动收缩带来的严重问题
- core sync是什么软件_什么是Quick Sync Video
- 洛谷 - P1198 - 最大数 - 线段树
- erlang精要(27)-异常处理
- python语言map函数及map object at 乱码错误
- 1304. 和为零的N个唯一整数
- BaaS API 设计规范
- 基于java的房地产客户管理系统
- ptc creo 4.0 m140中文版(CAD设计软件) 附安装教程
- 139显示无法imap服务器,139邮箱客户端 imap服务器
- 模拟赛DAY 2 T2不老梦
- ICC编译器生成优化报告
- shui0418笔记
- 为什么说区块链是新的博弈竞技场
- static(静态方法中)如何调用非静态方法?
- 关于短视频平台框架搭建与技术选型探讨
- gitpage镜像网站自定义域名及优化
- 身为iOS开发,你是愿意在大公司做凤尾,还是在小公司做鸡头?
热门文章
- CAN总线学习笔记 | CAN基础知识介绍
- kotlin设置按钮不可点击_3dmax渲染720全景效果图动画流程,学习VR动画不可错过的必备知识...
- 搜索不到投屏设备怎么办_乐播投屏搜索不到设备怎么办 手把手解决你的烦恼...
- 华为p30android,HUAWEI P30 规格参数
- JavaScript中NAN到底是什么?NAN==NAN?
- python猪脸识别_别@微信团队了,我用Python给自己戴上了圣诞帽!
- 【Python第25课】字符串的分割与拼接
- 医学影像坐标系问题(世界坐标系、解剖坐标系和图像坐标系)
- 微软“云暨移动技术孵化计划”落户南昌 布局AI+VR生态
- 【学习记录】之二:centos7快速配置goolge-test