基于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相关推荐

  1. Python自动化测试框架之Pytest教程【让你小鸡变老鹰】

    Pytest  pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点: · 简单灵活,容易上手 · 支持参数化 · 能够支持简单的单元测试和复杂的功能测试,还可以用来做sele ...

  2. 接口自动化测试框架开发 | Pytest+Allure+AIOHTTP+用例自动生成

    测试开发实战技能进阶学习,文末加群! 近期准备优先做接口测试的覆盖,为此需要开发一个测试框架,经过思考,这次依然想做点儿不一样的东西. 接口测试是比较讲究效率的,测试人员会希望很快能得到结果反馈,然而 ...

  3. Python自动化测试框架之Pytest相关用法-基本使用(1)

    前期准备 需要准备:pytest库 执行命令:pip install pytest.由于已经安装好了,所以执行情况会如下图所示 安装完成后,如果能够导入说明安装成功可以使用了 Pytest相关 1.基 ...

  4. Python自动化测试框架之Pytest相关用法-Fixture(2)

    1.setup和teardown 和unittest一样,pytest也有自己的前置后置条件:setup.teardown.但不同的是,pytest的类型比较多,多达10种,根据不同的生效范围分别为以 ...

  5. pytest接口自动化测试框架 | 汇总

    视频来源:B站<冒死上传!pytest接口自动化测试框架(基础理论到项目实战及二次开发)教学视频[软件测试]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...

  6. 【万字长文】2022年最全的搭建Web自动化测试框架教程

    测试框架的设计有两种思路,一种是自底向上,从脚本逐步演变完善成框架,这种适合新手了解框架的演变过程.另一种则是自顶向下,直接设计框架结构和选取各种问题的解决方案,这种适合有较多框架事件经验的人.本章和 ...

  7. 从0开始搭建Web自动化测试框架

    前言: 测试框架的设计有两种思路,一种是自底向上,从脚本逐步演变完善成框架,这种适合新手了解框架的演变过程.另一种则是自顶向下,直接设计框架结构和选取各种问题的解决方案,这种适合有较多框架事件经验的人 ...

  8. 大厂年薪43w测试开发手把手教你搭建Web自动化测试框架,超详细

    测试框架的设计有两种思路,一种是自底向上,从脚本逐步演变完善成框架,这种适合新手了解框架的演变过程.另一种则是自顶向下,直接设计框架结构和选取各种问题的解决方案,这种适合有较多框架事件经验的人.本章和 ...

  9. python自动化测试框架pytest.pdf_Python自动化测试框架

    随着技术的进步和自动化技术的出现,市面上出现了一些自动化测试框架.只需要进行一些适用性和效率参数的调整,这些自动化测试框架就能够开箱即用,大大节省了开发时间.而且由于这些框架被广泛使用,他们具有很好的 ...

最新文章

  1. opencv python下载_[福利] OpenCV4 Python 最新中文版官方教程来了(附下载)
  2. EXSI 连接硬件USB pass-through
  3. 数据库自动收缩带来的严重问题
  4. core sync是什么软件_什么是Quick Sync Video
  5. 洛谷 - P1198 - 最大数 - 线段树
  6. erlang精要(27)-异常处理
  7. python语言map函数及map object at 乱码错误
  8. 1304. 和为零的N个唯一整数
  9. BaaS API 设计规范
  10. 基于java的房地产客户管理系统
  11. ptc creo 4.0 m140中文版(CAD设计软件) 附安装教程
  12. 139显示无法imap服务器,139邮箱客户端 imap服务器
  13. 模拟赛DAY 2 T2不老梦
  14. ICC编译器生成优化报告
  15. shui0418笔记
  16. 为什么说区块链是新的博弈竞技场
  17. static(静态方法中)如何调用非静态方法?
  18. 关于短视频平台框架搭建与技术选型探讨
  19. gitpage镜像网站自定义域名及优化
  20. 身为iOS开发,你是愿意在大公司做凤尾,还是在小公司做鸡头?

热门文章

  1. CAN总线学习笔记 | CAN基础知识介绍
  2. kotlin设置按钮不可点击_3dmax渲染720全景效果图动画流程,学习VR动画不可错过的必备知识...
  3. 搜索不到投屏设备怎么办_乐播投屏搜索不到设备怎么办 手把手解决你的烦恼...
  4. 华为p30android,HUAWEI P30 规格参数
  5. JavaScript中NAN到底是什么?NAN==NAN?
  6. python猪脸识别_别@微信团队了,我用Python给自己戴上了圣诞帽!
  7. 【Python第25课】字符串的分割与拼接
  8. 医学影像坐标系问题(世界坐标系、解剖坐标系和图像坐标系)
  9. 微软“云暨移动技术孵化计划”落户南昌 布局AI+VR生态
  10. 【学习记录】之二:centos7快速配置goolge-test