学会这套Pytest接口自动化测试框架,击败99%的人

Pytest 的下载安装

1、Python3 使用 pip install -U pytest 安装

2、查看 pytest 版本信息 pytest --version 

3、pytest 用例的执行规则:

①测试文件以 test_xx.py 命名需要以 test_开头(或_test 结尾)

②测试类以 Test_开头,并且不能带有 init 方法

③测试函数或方法以 test_xx 开头总体上分为三个阶段:

  1. 编写测试用例
  2. 执行测试用例
  3. 输出测试报告

第一步:编写测试用例

pytest 执行时默认是执行指定路径下以test_开头或者以_test 结尾的文件里的测试类或者方法,默认是执行以 Test_开头的类和 test_开头的方法

1、首先创建 py 文件命名以 test_开始或者以_test 结尾

2、若是新建类,测试类需要以 Test_开头

3、测试用例(方法)需要以 test_开头

1.1 测试用例的优化

1.1.1 assert 断言(判断执行结果是否满足预期):

Pytest 最常用的断言一般有以下五种:

assert xx:判断 xx 为真assert not xx:判断 xx 不为真assert a in b:判断 b 包含 a assert a == b:判断 a 等于 b assert a !=b:判断 a 不等于 b

添加断言在对应的方法里面,做判断测试用例结果是否满足预期,示例如下:

执行结果如下:断言失败的结果会显示出来

1.1.2 断言优化

如果想要在失败的时候看到更详细的信息,可以在断言上添加说明,示例如下:

执行结果如下图,可以看到失败时断言的说明信息

同时,我也为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接点击文末小卡片免费领取资料文档

软件测试视频教程观看处:

2024年Python自动化测试全套保姆级教程,70个项目实战,3天练完,永久白嫖...

第二步:测试用例的执行

2.1 使用命令行执行

cmd 窗口,然后执行 pytest 文件路径/测试文件名例如 pytest ./test_tt.py

如果当前路径已经是放测试用例文件的文件夹下,想要测试文件,则直接可以  输入pytest 测试文件名 即可:

如果只输入 pytest,则会默认执行当前文件夹下所有以 test_开头(或_test 结尾)的文件。

2.2 IDE(PyChram)执行

写法如截图所示,pytest.main()(参数以列表的形式给出,如截图)

执行当前文件所在路径下的文件,指定文件名则执行指定的文件,若没指定,执行所有 test_

开头或者_test 结尾的文件。

2.3 执行指定文件指定方法

2.3.1 命令行编写方式

pytest路径/文件名::类名::方法名例如

2.3.2 pycharm 编写方式

如果是用 pycharm 写法如图,与上面的命令行等价:

2.4 带参数执行

常用的 pytest 带参数执行:列举几种,其余扩展可以自行百度

2.4.1 pytest -q简化控制台的输出

不带参数执行结果:

带参数执行结果:

2.4.2 Pytest -v 输出用例更加详细的执行信息,比如用例所在文件和用例名称

添加参数前执行结果:

添加参数后执行结果:

2.4.3 pytest -k 执行用例中包含‘关键字’的用例

待执行用例如截图所示:

执行代码和结果如图:(关键字需要用双引号)

2.4.4 pytest -s 输出用例中的调试信息,比如 print 打印信息,如果不加参数则不输出

待执行的用例:

添加参数前执行结果:

添加参数后执行结果:

2.4.5 pytest -m执行‘标记’的内容,执行特定的测试用例,执行有相同标记的测试用例,添加标记的方法如下:

需执行测试用例:

执行代码和结果如下:

执行有相同标记的用例,可以用于指定需执行的测试用例。

2.4.6 pytest -x执行失败则停止执行,后面的用例不会被执行

待执行用例:

带参数执行结果:

2.4.7 pytest --maxfail=n执行失败 n 次之后停止执行,n 是执行失败的次数

假设 n = 2 执行上面的用例:由于失败只有一次所以用例会继续执行完,直到两次失败才停止执行

2.4.8 pytest --count=n 执行用例 n 次,n=2 就是执行两次

如下执行 test_01 两次:

2.4.9 pytest --lf (last failed)重新运行上次失败的用例,若没有失败的会全部跑

2.4.10 pytest --ff (failed first)重新运行所有用例,但首先运行上次失败的用例

2.5 优质功能介绍

2.5.1 跳过用例的执行

根据特定的条件,不执行标识的测试函数. 方法:

skipif(condition, reason=None) 参数:

condition:跳过的条件,必传参数reason:标注原因,必传参数

使用方法:

@pytest.mark.skipif(condition, reason="xxx") condition 条件为真时跳过

@pytest.mark.skip()

示例如下:

2.5.2 标记为预期失败的用例

标记测试函数为失败函数

方法:

xfail(condition=None, reason=None, raises=None, run=True, strict=False)

常用参数:

condition:预期失败的条件,必传参数reason:失败的原因,必传参数

使用方法:

@pytest.mark.xfail(condition, reason="xx")condition 为真则标记失败

在某种条件不满足的时候, 预期它是失败的, 就将它标记为预期失败, 若

condition 条件不满足则正常执行

示例:

不带参数:

condition 条件满足的时候:

condition 条件不满足的时候:

2.5.3 参数化

方法:

parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)

常用参数:

argnames:参数名

argvalues:参数对应值,类型必须为 list 当参数为一个时格式:[value]

当 参 数 个 数 大 于 一 个 时 , 格 式 为 : [(param_value1,param_value2.....),(param_value1,param_value2 )]

使用方法:

@pytest.mark.parametrize(argnames,argvalues) 参数名,参数值@pytest.mark.parametrize("a",[3,6])单参数@pytest.mark.parametrize("a,b",[(1,2),(0,3)])多参数

参数值为 N 个,测试方法就会运行 N 次

示例:

单参数:

多参数:

2.5.4 执行标记的用例多次

首先安装 repeat:

pip install pytest-repeat

@pytest.mark.repeat(n)执行当前用例 n 次 然后再往下执行其他用例

示例:

2.5.5 调整用例的执行顺序

使用:

安 装 pip install pytest-ordering 在测试方法上加装饰器@pytest.mark.last--最后一个执行

@pytest.mark.run(order=1)---第几个执行

示例:

最后一个执行:

指定执行顺序:

2.5.6 自定义测试用例预置条件--pytest 精髓fixture

@pytest.fixture()(scope="function",params=None,autouse=False, ids=None, name=None)

调用时被优先执行 预处理或者重复操作scope:被标记方法的作用域

function" (default):作用于每个测试方法,每个 test 都运行一次

"class":作用于整个类,每个 class 的所有 test 只运行一次

"module":作用于整个模块,每个 module 的所有 test 只运行一次

"session:作用于整个 session(慎用),每个 session 只运行一次

params:(list 类型)提供参数数据,供调用标记方法的函数使用

autouse:是否自动运行,默认为 False 不运行,设置为 True 自动运行

若不为 True 则需要调用才会优先执行。

2.5.6.1 fixture 用法一

定义 fixture 与定义普通函数差不多,命名不要以 test 开头与用例区分开,fixture 有返回值, 没有返回值默认为 None。用例调用 fixture 返回值,直接就是把 fixture 的函数名称当做变量名称。

示例:

会优先于测试用例 test_01 执行

2.5.6.2 fixture 用法二

fixture 标记的函数可以应用于测试类外部,每次都会优先执行

2.5.6.3 fixture 用法三

传参数作为标识

2.5.6.4 使用多个fixture

如果用例需要用到多个fixture 的返回数据,fixture 也可以返回一个元组,list或字典,然后从里面取出对应数据。

也可以分成多个 fixture 在用例中传值多个 fixture 参数

2.5.6.5 fixture 作用范围

2.5.6.5.1 、function 每个方法执行之前执行一次

2.5.6.5.2 class 类执行开始时执行一次

2.5.6.5.3 module 在当前.py 脚本里面所有用例开始前只执行一次

2.5.6.5.4 session 级别是可以跨.py 模块调用的

也就是当我们有多个.py 文件的用例的时候, 如果多个用例只需调用一次fixture,那就可以设置为 scope="session"。

2.5.6.5.5 conftest.py 文件

新建 conftest.py 文件,名称固定,与运行的用例在同一个 package 下面,不用导入 pytest 会自动查找,文件里面可以单独管理一些预置的操作场景,在执行用例的时候就会预置执行。示例:

第三步:生成测试报告

想要生成测试报告,需要先安装 pytest-html 安装命令

pip install pytest-html

3.1 使用命令行生成报告

--html=路径/文件名.html 不写路径就默认为当前路径

3.2 使用 PyCharm 生成报告

生成的报告大概是这样的:

3.3 高大上的测试报告

想要生成高大上的测试报告自行百度 Pytest+Allure,可以集成到 Jenkins,自动生成高大上的自动化测试报告,效果图大概是这样的:

3.4 生成 xml 报告

--junit-xml=路径/文件名.xml

效果大概是这样的:

扩展

输出覆盖率报告

pytest 可以输出覆盖率的 html 报告使用命令如下:

pytest -vv --cov=./ --cov-report=html 有可能遇到报错:

pytest: error: unrecognized arguments: --cov-report=html

? inifile: None

? rootdir: /Users/joe/workspace/platform/mgap-mendel/mgap-mendel 原因:

缺少 pytest cov 的包

解决方法

pip install pytest-cov 大概是这样的:

设置重复执行的执行范围

--repeat-scope

--repeat-scope 类似于 pytest fixture 的 scope 参数,--repeat-scope 也可以设置参数:session , module,class 或者 function

function 范围针对每个用例重复执行,再执行下一个用例

class 以 class 为用例集合单位,重复执行 class 里面的用例,再执行下一个module 以模块为单位,重复执行模块里面的用例,再执行下一个

session 重复整个测试会话,即所有收集的测试执行一次,然后所有这些测试再次执行等等

示例:如下 scope=function --count=2 以用例为单位执行

执行每个用例两次,如果是 class 则以类为单位执行,是执行类里面的用例重复执行

重复测试直到失败

将 pytest 的-x 选项与 pytest-repeat 结合使用,以强制测试运行器在第一次失败时停止。例如:

pytest --count=1000 -x test_tt.py

这样将执行 1000 次用例,直到失败就停止,执行时可以带多个参数,更多的东西需自己去探索。

配置文件

配置文件可以改变 pytest 框架的运行规则,比如可以改变 pytest 收集用例的规则,添加命令参数。

如下配置 addopts = -s --html=./report.html 执行 pytest 时就能自动生成报告修改

python_files = test_*.py python_classes = Test_* python_functions = test_*

内容就可以改变 pytest 收集用例的规则,比如修改 python_files = test_*.py check_*.py则执行 pytest 时以 check_*.py 开头的文件也可以自动执行。

使用配置文件的方法,在项目根目录下新建 pytest.ini 文件,然后自行配置参数,常用的如下:

[pytest]

# 命令行参数addopts = -s # 搜索文件名

python_files = test_*.py # 搜索的类名python_classes = Test_* #搜索的函数名

python_functions = test_*

setup 与 teardown 函数

Pytest 是 unittest 的扩展,也可以实现 setup(开始时执行一次)和 teardown

(结束时执行一次)简单提及,详细内容可自行百度。

Pytest 支持 setup/teardown,但是更推荐使用 pytest.fixture

总结

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/240396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能优化算法应用:基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.骑手优化算法4.实验参数设定5.算法结果6.…

跨平台应用程序开发软件,携RAD Studio 12新版上线

RAD Studio 是一款专为程序员而准备的跨平台应用程序开发软件,内置Delphi和CBuilder这两种开发工具,另外还提供了新的C功能,扩展了对ExtJS的RAD服务器支持,增强了对vcL的高dpi支持,提高了firemonk (FMX)的质量等等&…

C++结合OpenCV:掌握图像基础与处理

本文详细介绍了使用 OpenCV4 进行图像处理的基础知识和操作。内容包括图像的基础概念、色彩空间理解、以及如何在 C 中进行图像读取、显示和基础操作。 1.图像的基本概念与术语 图像表示 在计算机视觉中,图像通常表示为一个二维或三维的数组。二维数组表示灰度图像&…

[SQL]实验 视图和索引的应用

实验目的: [实验目的和要求] 1、掌握视图的创建、修改和重命名的方法 2、掌握视图中数据的操作 3、了解索引的作用 4、掌握索引的创建方法 实验步骤: 1、在销售管理数据库中,创建一个女职工视图,包括员工的编号、姓名、性别、雇佣…

网站怎么才能做好SEO?网站SEO指引!!

在当今互联网的激烈竞争中,SEO(搜索引擎优化)已成为提升网站流量和吸引更多用户的关键手段。为了帮助您更好地掌握SEO网站优化技巧,本文将深入探讨以下几个方面: 一、关键词策略 关键词策略是SEO优化的基石。正确选择…

【WPF.NET开发】创建样式

本文内容 创建样式隐式应用样式显式应用样式以编程方式应用样式扩展样式TargetType 属性与 x:Key 属性之间的关系 使用 Windows Presentation Foundation (WPF),可以使用自己的可重用样式自定义现有控件的外观。 可以对应用、窗口和页面全局应用样式,也…

Ansible的脚本---Playbook剧本编写

playbook的组成部分 1、 tasks:任务 在目标主机上需要执行的操作。使用模块定义这些操作。每个任务都是一个模块的调用。 2、 variables:变量 用于存储和传递数据。类似于shell脚本中的变量。变量可以自定义。可以在playbook当中定义为全局变量&…

基于Vite+Vue3 给项目引入Axios

基于ViteVue3 给项目引入Axios,方便与后端进行通信。 系列文章指路👉 系列文章-基于Vue3创建前端项目并引入、配置常用的库和工具类 文章目录 安装依赖新建src/config/config.js 用于存放常用配置进行简单封装解决跨域问题调用尝试 安装依赖 npm install axios …

PIL/Pillow

Abstract PIL(Python Imaging Library)是一个用于图像处理的 Python 库。它提供了广泛的功能,包括图像加载、保存、调整大小、裁剪、旋转、滤镜应用等。 由于 PIL 的开发停止在 2009 年,因此推荐使用其后续的维护版本 Pillow。Pillow 是一个兼容 PIL 接…

Springboot启动异常 OgnlException: sqlSelect [java.lang.NoSuchMethodError

完整的日志如下: Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression ew ! null and ew.sqlSelect ! null. Cause…

不忍学弟学妹受苦受难!!!逐一讲解发动机原理实验报告(1)

固体火箭发动机侵蚀燃烧测试实验 经过了愉快迷糊——哦不瑟瑟发抖——哦不痛不欲生的两天,终于和小伙伴们协力完成了西北工业大学航天学院发动机原理实验报告。具体的实验指导书均可在本人博客资源站下载。 固体火箭发动机侵蚀燃烧测试实验,嗯哼—— 实…

MySQL 事务的ACID特性

MySQL事务是什么,它就是一组数据库的操作,是访问数据库的程序单元,事务中可能包含一个或者多个 SQL 语句。这些SQL 语句要么都执行、要么都不执行。我们知道,在MySQL 中,有不同的存储引擎,有的存储引擎比如…

c++学习笔记-提高篇-STL标准模板库3(stack容器、queue容器以及list容器)

目录 Stack容器 一、Stack容器介绍 二、stack常用接口 三、栈的示例 queue(队列)容器 一、queue容器介绍 二、queue常用接口 三、queue示例 list容器 一、list容器介绍 二、list常用接口及示例 (一)list构造函数 &am…

使用Swift Package Manager (SPM)实现xcframework分发

Swift Package Manager (SPM) 是苹果官方提供的用于管理 Swift 项目的依赖关系和构建过程的工具。它是一个集成在 Swift 编程语言中的包管理器,用于解决在开发过程中管理和构建包依赖项的需求。 1、上传xcframework.zip到服务端 压缩xcframeworks成一个zip包&…

【flink】状态清理策略(TTL)

flink的keyed state是有有效期(TTL)的,使用和说明在官网描述的篇幅也比较多,对于三种清理策略没有进行横向对比得很清晰。 全量快照清理(FULL_STATE_SCAN_SNAPSHOT)增量清理(INCREMENTAL_CLEANUP)rocksdb压缩清理(ROCKSDB_COMPACTION_FILTER) 注意&…

国图公考:公考常识题如何复习更高效?

公务员考试是许多人求职的首选之一,而公考常识题作为公务员考试的重要组成部分,对于考生来说具有很高的分值。在这一模块的复习中,有以下几点可以帮助考生提高学习效率,一起来看一下吧! 一、明确复习目标 了解自己在各个知识点上…

gitee版本回退本地和仓库的执行步骤(后悔药,无副作用,按说明书使用)

目录 1.本地回退 1.打开项目文件夹 3.回退到指定版本 4.选择回退模式并确认 5.本地回退成功 2.回退仓库版本 1.在git上面找到项目的提交记录 2.找到提交错误的版本​编辑 3.双击新页面这个版本进去 点击操作再点击revert​编辑 4.确认回退 ​5.仓库回退成功 在使用…

The Cherno C++笔记02

目录 Part 06 How the C Compiler Works 1.编译过程 2.C并不关心文件 3.翻译单元(Translation Unit) 4. 实际用代码感受一下编译过程 4.1 预处理 4.1.1 预处理的本质 4.1.2 预处理后的.i文件 4.1.3 骚操作 4.2 .asm文件(汇编语言源文…

安装nodejs,配置环境变量并将npm设置淘宝镜像源

安装nodejs并将npm设置淘宝镜像源 1. 下载nodejs 个人不喜欢安装包,所以是下载zip包的方式。这里我下载的node 14解压包版本 下载地址如下:https://nodejs.org/dist/v14.15.1/node-v14.15.1-win-x64.zip 想要其他版本的小伙伴去https://nodejs.org/di…

C++ 检测 是不是 com组件 的办法 已解决

在日常开发中,遇到动态库和 com组件库的调用 无法区分。检测是否com组件的办法 在头部文件,引入文件 如果能编译成功说明是 com组件,至于动态库如何引入,还在观察中 最简单办法 regsvr32 TerraExplorerX.dll 是com 组件 regs…