一篇文章入门Pytest!

目录

一、安装

二、语法

三、执行

四、前后置setup/teardown

五、fixture

六、数据驱动

七、报告

一、安装

需要安装的库

pytest
pytest-html            生成HTML格式的测试报告
pytest-xdist           用例分布式执行,多CPU分发
pytest-ordering        改变用例执行顺序
pytest-rerunfailures   用例失败重跑
allure-pytest          生成allure测试报告
pyYAML                 yaml文件库

安装命令

# 将要安装的库放到 requirements.txt 文件中,然后执行
pip install -r requirements.txt

二、语法

  1. 模块名(用例文件名)必须以test_开头或者_test结尾

  2. 测试类必须以Test开头,且不能有init方法

  3. 测试方法必须以test开头

三、执行

执行命令
  1. 主函数

# test_login.py
import pytestclass TestLogin:def test_01(self):print("用例1")if __name__ == '__main__':pytest.main()		# 执行所有
  1. 命令行

# 在命令行中切换到对应目录下后,直接命令行输入
pytest
  1. 读取pytest.ini配置文件

pytest.ini是pytest单元测试框架的核心配置文件,用来改变pytest默认的行为

  1. 一般放在项目的根目录;

  2. 编码必须是ANSI

[pytest]
addopts = -vs
testpaths = ./project
python_files = test*.py
python_classes = Test*
python_functions = test
  • addopts 命令行参数

  • testpaths 测试用例文件夹

  • python_files 搜索文件名

  • python_classes 搜索的测试类名

  • python_functions 搜索的测试方法名的开头

执行命令参数
-s          输入调试信息,如用例中的print
-v          打印信息更详细
文件名(或文件夹)   指定运行文件(或文件夹里文件)用例
-n      分布式运行
--reruns 2   失败重跑(失败重跑2次,加上第一次一共跑了3次)
-x      只要有一个用例报错,测试停止
--maxfail=2     最多出现两个用例报错,测试停止
-k "方法名包含的字符"      根据用例部分字符串执行指定用例

例如

# 主函数
pytest.main(['-vs', 'test_login.py', '-n=2', '--reruns=2'])
# 使用nodeid 执行指定方法
pytest.main(['-vs', './文件名/类名::方法名'])
# 命令行
pytest -vs -n 2 --reruns 2 -k "login "
执行顺序

unittest根据ASCII码;pytest:从上到下

改变执行顺序:

# 使这个用例第一个执行
@pytest.mark.run(order=1)
def test_login():print("Done")
分组执行

pytest.ini文件添加:

markers = smoke: 冒烟用例login: 登录用例

用例文件:

@pytest.mark.smoke
def test_login2():print("Done")

命令行执行命令:

pytest -vs -m "smoke"
# 执行多个分组
pytest -vs -m "smoke or login"
跳过测试用例
# 无条件跳过
@pytest.mark.skip(reason="跳过原因")
# 符合条件跳过
@pytest.mark.skipif(num>3, reason="数量超过3个")

四、前后置

每个用例都有的功能,可以集体提取出来,比如UI自动化的执行前打开浏览器、执行结束后关闭浏览器的操作

# test_login.py
import pytestclass TestLogin:# 在所有用例之前,只执行一次def setup_class(self):print("在类执行前执行,比如创建日志对象、创建数据库连接")# 在每个用例之前都会执行一次def setup(self):print("每个用例执行前先执行setup:打开浏览器,加载网页")def test_01(self):print("用例1")def teardown(self):print("每个用例执行结束后执行teardown:关闭浏览器")def teardown_class(self):print("类执行结束后,执行一次,比如:销毁日志对象、关闭数据库连接")if __name__ == '__main__':pytest.main()		# 执行所有

五、fixture

fixture实现部分用例的前后置

@pytest.fixture()参数

  • scope:被标记方法的作用域,function(默认)、class、module、package/session

  • params:参数化

  • autouse:自动执行,默认False

  • ids:使用params参数化时,给每个值设置一个变量名

  • name:给被标记的方法起一个别名【当取了别名以后,原名就不能用了】

import pytest@pytest.fixture()
def my_fixture():print("这是前置方法")yieldprint("这是后置方法")class TestLogin:def test01(self):print("用例1")# 这个用例执行前会先执行my_fixture方法# 用例执行完后会执行my_fixture的yielddef test_02(self, my_fixture):print("用例2")

如果所有方法有前后置需要,则在fixture里加参数autouse=True用例里也不需要写fixture名调用

@pytest.fixture(autouse=True)
...省略...
class TestLogin:def test01(self):print("用例1")
params参数化

params支持列表、元组、字典列表、字典元组

import pytest@pytest.fixture(scope='function', params=["亚索", "凯南", "腕豪"])
def my_fixture(request):yield request.paramprint("后置")class TestLogin:def test01(self, my_fixture):print("得到参数:", my_fixture)

工程应用

通过conftest.py@pytest.fixture()结合使用,实现全局前后置

conftest.py 文件是单独存放fixture的配置文件,用处是可以在不同的py文件中使用同一个fixture函数,使用时原则上需要将conftest.py文件和用例放到同一层(放在根目录貌似也可以),并且不需要导入。且可以存在多个conftest.py文件(放在不同文件夹中)。调用也可以调用多个:

def test_01(self, my_fixture1, my_fixture2)

上面调用方式就是先调my_fixture1,再调用my_fixture2。

六、数据驱动

@pytest.mark.parametrize(args_name, args_value)
  • args_name:参数名

  • args_value:参数值;有多少参数值,用例就会执行多少次

例1:

import pytestclass TestLogin:@pytest.mark.parametrize('args', ['北京', '上海', '广州'])def test_01(self, args):print(args)if __name__ == '__main__':pytest.main()

例2:

import pytestclass TestLogin:@pytest.mark.parametrize('city, rank', [['北京', '1'], ['上海', '2'], ['广州', '3']])def test_01(self, city, rank):print(city, rank)if __name__ == '__main__':pytest.main()

七、报告

  1. 下载allure,解压,配置环境变量

  2. 添加执行参数 --alluredir,可以去pytest.ini文件中修改(如下)。也可以在主函数中添加pytest.main(['--alluredir=./temp'])这样生成的json文件会放到temp文件夹中

[pytest]
addopts = -vs --alluredir ./temp
testpaths = ./project
python_files = test*.py
python_classes = Test*
python_functions = test
  1. 在主函数下增加代码

if __name__ == '__main__':pytest.main()os.system('allure generate ./temp -o ./report --clean')

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

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

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

相关文章

【Bug】iOS 不支持运行或调试你的项目的上一个生成版本。 请先确保生成解决方案,再运行或调试它。

文章目录 问题问题代码原因解决处理Bug的具体步骤 问题 在windows以hot restart(hot restart不需要mac 而pair to mac需要)的方式部署到iphone报:不支持运行或调试你的项目的上一个生成版本。 请先确保生成解决方案,再运行或调试…

基于SSM宠物信息交流平台JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档(1万字以上)开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统:Window操作系统 2、开发工具:IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

东芝TB67B008FTG三相无刷马达驱动IC

TB67B008FTG是一款无刷直流电机用的三相PWM驱动器,专为无传感器的应用场景设计。它具有一系列突出的功能,使其在现代电机控制中发挥重要作用,尤其是在需要高效、稳定运行的场景中。本文将详细介绍TB67B008FTG的特点、应用以及它在电机控制领域…

idea和webstorm性能优化

idea和webstorm性能优化 简介 今天打开了idea弹了一个弹窗,大概意思如下。 The IDE has detected Microsoft Defender with Real-Time Protection enabled. It might severely degrade IDE performance. It is recommended to add the following paths to the Def…

【Axure高保真原型】移动案例

今天和大家分享多个常用的移动案例的原型模板,包括轮盘滑动控制元件移动、页面按钮控制元件移动、鼠标单击控制元件移动、元件跟随鼠标移动、鼠标拖动控制元件移动、键盘方向键控制元件移动,具体效果可以点击下方视频观看或打开下方预览地址查看哦 【原…

算法笔记day06

目录 1.添加逗号 2.跳台阶 3.扑克牌顺子 1.添加逗号 添加逗号_牛客题霸_牛客网 算法思路&#xff1a; 按照提议模拟即可&#xff0c;从后向前遍历字符串&#xff0c;遍历三个字符之后&#xff0c;将其插入将这三个字符插入到新的字符串中再加上逗号。 #include <iostrea…

Thymeleaf模板引擎教程(详细总结)

Thymeleaf 是一个服务器端 Java 模板引擎&#xff0c;能够处理 HTML 、 XML 、 CSS 、 JAVASCRIPT 等模板文件。 Thymeleaf 模板可以直接当作静态原型来使用&#xff0c;它主要目标是为开发者的开发工作流程带来优雅的自然 模板&#xff0c;也是 Java 服务器端 HTML5 开…

Docker设置日志滚动

问题描述 Docker 容器中的进程会将打印到控制台(console)的日志保存到容器的目录下&#xff0c;默认的 Docker 配置不带有日志的回滚。会在自己的容器目录下往同一个日志文件中不停写入&#xff0c;最后会导致磁盘空间占满的问题。 解决方案 方案一&#xff1a;全局范围内修…

一文掌握Cephadm部署Ceph存储集群

&#x1f4da; 博客主页&#xff1a; StevenZeng学堂 &#x1f389; 本文专栏: 一文读懂Kubernetes一文读懂Harbor云原生安全实战指南云原生存储实践指南 ❤️ 摘要&#xff1a;随着企业数据量的增长和存储需求的复杂化&#xff0c;Ceph因其高可扩展性和灵活性&#xff0c;能…

网络安全的五大误区,你中招了吗?

在数字化时代&#xff0c;网络安全问题日益突出&#xff0c;许多人在使用网络过程中存在一些误区&#xff0c;导致个人信息泄露、财产损失等问题。本文将为您揭示网络安全的五大误区&#xff0c;帮助您提高安全防范意识。 误区一&#xff1a;使用复杂密码就一定安全 许多人认为…

考研读研生存指南,注意事项

本视频课程&#xff0c;涉及考研读研的方方面面&#xff0c;从考研初试→复试面试→研究生生活→导师相处→论文专利写作混毕业&#xff0c;应有尽有。有了他&#xff0c;你的研究生生涯稳了。 读研考研注意事项&#xff0c;研究生生存指南。_哔哩哔哩_bilibili 一、考研初试注…

临阵磨枪!这份软考中级集成案例分析答题万金油赶紧收藏

在系统集成项目管理工程师案例分析科目的考试中&#xff0c;主要分为“计算题”和“分析题”两大类。 计算题主要围绕着进度管理和成本管理进行出题&#xff0c;比如挣值计算、网络图、关键路径等等&#xff0c;一般占据一道大题。 而分析题呢主要占三道大题&#xff0c;主要…

前端开发 环境变量 process.env.NODE_ENV 是什么

背景&#xff1a; 前端开发过程中&#xff0c;解决Access跨域问题&#xff0c;使用跨域代理&#xff0c;注意这里是指前端的跨域代理&#xff0c;所以这里配置的只适用于开发环境。至于生产环境一般由后端配置跨域代理&#xff0c;一般使用ngnix解决生产环境的跨域代理。 一、…

新款任天堂switch游戏机方案,支持4K60HZ投屏方案,显示器,手柄方案

据传任天堂将推出新的一代的switch掌机&#xff0c;而新款掌机将支持4K60HZ投屏 都2402年了再做1080P确实有点不太象话了 4K60HZ相较于1080P能够提升很多游戏体验&#xff0c;这时不管是HDMI显示器或者是VR眼睛清晰度都会让人舒服很多。 不过新一代的任天堂似乎也在PD协议上…

家政小程序搭建,数字化市场发展下的意义

家政服务行业作为当下社会生活中不可或缺的行业&#xff0c;需求量在逐渐增加&#xff0c;行业发展也趋向多样化。 随着数字化的浪潮&#xff0c;家政行业逐渐向数字化、智能化升级发展&#xff0c;推动行业高质量发展&#xff0c;迎合现代化发展趋势&#xff0c;这一转型为行…

网站分享丨UU在线工具

在日常的工作、学习和生活中&#xff0c;我们常常会遇到各种各样需要借助工具来解决的问题。今天就给大家介绍一个功能强大、涵盖众多实用工具的在线平台 ——UU 在线工具。 一、丰富多样的工具分类 1.文档处理类&#xff1a; PDF 工具&#xff1a;提供了 PDF 转 Word、PDF 合…

IDEA中文乱码�

这篇文章网上到处都是&#xff0c;但我写作的初衷是为了更好地审视自己的作品&#xff0c;并通过不断的总结与反思来提升自我。 文章目录 前言原因分析解决方案一、设置字体为支持中文的字体二、设置字符编码为 UTF-8三、修改 IDEA 配置文件&#xff0c;让其支持中文编码第一种…

资讯 | 财富通科技政务协同办公管理软件通过麒麟软件适配认证

2024年9月25日&#xff0c;财富通科技研发的政务协同办公管理软件成功通过中国国产操作系统麒麟软件的适配认证。本次认证是继公司区块链产品“基于区块链的企业及人员资质数字证书服务平台”认证以后得第二次认证。这一成就标志着财富通科技在推动国产软件生态建设方面迈出了坚…

Java项目-基于springboot框架的广场舞团系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

Debug-029-el-table实现自动滚动分批请求数据

前情提要 最近做了一个小优化&#xff0c;还是关于展示大屏方面的。大屏中使用el-table展示列表数据&#xff0c;最初的方案是将数据全部返回&#xff0c;确实随着数据变多有性能问题&#xff0c;有时请求时间比较长。这里做的优化就是实现列表的滚动到距离底部一定高度时再次请…