自动化测试-Pytest测试

目录

pytest简介

基本测试实例

编写测试文件

执行测试

pytest运行时参数

mark标记

Fixture 

pytest插件

Allure测试报告

测试步骤


pytest简介

Pytest‌是一个非常流行的Python测试框架,它支持简单的单元测试和复杂的功能测试,具有易于上手、功能强大、灵活配置等特点,已经成为最流行的测试框架之一‌。

简单易用‌Pytest的API设计简洁,使得编写测试用例非常容易
功能强大‌支持参数化测试、断言、fixture等功能,能够满足各种复杂的测试需求。
灵活配置‌可以通过插件扩展功能,支持与Selenium、Requests、Appium等工具集成,实现Web自动化、接口自动化和App自动化。
报告生成‌结合Allure,可以生成美观的测试报告。
插件丰富‌拥有大量的插件,如pytest-ordering、pytest-rerunfailures、pytest-xdist等,支持用例管理、执行、跳过、失败重跑等功能‌

安装 pip install pytest  版本检查 pytest --version

基本测试实例

pytest测试文件的命名规则和基本使用方法:1)测试文件命名‌:测试文件通常以test_开头或以_test 结尾。 ‌2)测试函数命名‌:测试函数应以test开头。3)运行测试用例‌:在命令行中使用pytest命令可以自动发现并运行所有的测试用例。也可以指定要运行的测试文件或测试函数‌

编写测试文件

sub_test.py 与test_example.py

#sub_test.py
def sub_num(a,b):return a-b
def test_sub():assert sub_num(2,3)==5
#test_example.py
def add_num(a,b):return a+b
def test_add():assert add_num(2,3)==5

执行测试

命令行执行 pytest 会过滤所有以test开头或结尾的文件,然后执行文件,匹配所有以test开头的类然后匹配所有以test开头的测试函数并执行

或者pytest ./文件目录  去解析特定文件

pytest运行时参数

-k:根据表达式选择测试用例。                                      -m:只运行带有标记的测试用例

-s:当测试失败时,打印出错误信息。                          --ff:先运行之前失败的测试用例

-x:在第一个测试失败时退出测试运行。                      --lf:运行上次失败的测试用例

--collect-only:仅收集测试用例,不运行它们。           --maxfail:指定在失败指定数量的测试用例后停止测试

-v:输出更详细的测试信息,包括测试用例名称及其所在的类。

--tb=style:控制台中的错误信息输出格式,例如--tb=line仅显示错误的那一行

mark标记

import pytest
def sub_num(a,b):return a-b
def test_sub1():assert sub_num(2,3)==-1
@pytest.mark.skip('pytest skip')
def test_sub2():assert sub_num(2,2)==0
@pytest.mark.skipif(condition=(1==1),reason='True pytest skipif')
def test_sub3():assert sub_num(2,1)==1
@pytest.mark.skipif('1==2')
def test_sub4():assert sub_num(3,1)==2
@pytest.mark.xfail  #预期到的结果
def test_sub5():assert sub_num(3,1)==23
@pytest.mark.xfail
def test_sub6():assert sub_num(3,1)==2
ls=[(1,2,3),(1,2,3),(2,4,6)]
@pytest.mark.parametrize('n1,n2,sum',ls)
def test_sub7(n1,n2,sum):assert n1+n2 == sum
#pytest -v -m smoke
#sub_test.py::test_example1 PASSED                                                                        [ 50%] 
#sub_test.py::test_example2 PASSED   
@pytest.mark.smoke
def test_example1():assert True
@pytest.mark.smoke
def test_example2():assert 1 + 1 == 2

Fixture 

pytest的fixture是一个非常强大的功能,主要用于在测试用例执行前后进行初始化和清理操作(类似setup、teardown)。通过使用@pytest.fixture()装饰器,可以将一个函数声明为fixture。该fixture的名字默认为函数名,也可以通过name参数指定别名。测试用例可以通过在参数列表中包含fixture的名字来使用它,pytest会在测试函数运行之前执行该fixture‌。

参数

scope

定义夹具的作用域,决定夹具的生命周期。可选值包括:

'function':每个测试函数调用时都会创建新的夹具(默认值)。
'class':每个测试类调用时创建一次夹具。
'module':每个模块调用时创建一次夹具。
'session':整个测试会话中只创建一次夹具。

autouse

默认为 False。如果设置为 True,则夹具会自动应用于所有测试,而不需要在测试中显式声明

params

允许为夹具提供多个参数值,测试函数将会被多次调用,每次使用不同的参数。

name为夹具指定一个名称,默认情况下使用函数名
import pytest
@pytest.fixture()
def fix_prepare():print('this is fixture prepare')
def test_fixture1(fix_prepare):print('test_fix1')
def test_fixture2(fix_prepare):print('test_fix2')
@pytest.fixture(scope='module')
#db_connection 夹具在整个模块中只会创建一次,两个测试函数都共享这个连接。
def db_connection():connection = "Database Connection"yield connection  # 提供夹具的值print("Closing the database connection")  # 清理工作# 使用夹具的测试函数
def test_db1(db_connection):assert db_connection == "Database Connection"def test_db2(db_connection):assert db_connection == "Database Connection"
@pytest.fixture(autouse=True) # 定义一个自动使用的夹具
def setup_environment(): #会在每个测试函数运行前自动调用,无需在测试函数中显式声明print("Setting up the environment")yield  #测试固件需要yeild支持teardownprint("Tearing down the environment")
# 测试函数
def test_example1():assert True
def test_example2():assert True
# 定义一个参数化的夹具
@pytest.fixture(params=["apple", "banana", "cherry"])
def fruit(request):return request.param
def test_fruit(fruit): # 使用夹具的测试函数#fruit 夹具会为每个测试函数提供不同的参数值,测试函数将会被调用三次,# 分别使用 "apple"、"banana" 和 "cherry"。assert fruit in ["apple", "banana", "cherry"]
if __name__=='__main__':pytest.main(['-vs','test_fixture.py'])

pytest插件

pytest-ordering

这个插件允许你控制测试函数的运行顺序,通过使用@pytest.mark.run(order=1)这样的装饰器

pytest-assume

这个插件引入了一个新的pytest.assume()函数,它允许你在一个测试中进行多次断言,并在第一次失败后停止测试。   

pytest-xdist

这个插件增加了对并行测试的支持,可以通过不同的CPU或者机器并行运行测试。   

pytest-instafail

这个插件在测试失败时提供实时的失败信息,而不是等到测试结束。 

pytest-rerunfailures

这个插件可以在测试失败后重新运行它们。   

pytest-html

这个插件生成美观的HTML测试报告。

pytest-metadata

这个插件允许你在测试结束后添加元数据。   

pytest-cov

这个插件提供了代码覆盖率的报告。

pytest-forked

这个插件是pytest-xdist的一部分,但也可以单独使用,提供了一种在多个进程中运行测试的方法

pytest-sugar这个插件提供了一种更好的控制台输出,可以显示测试进度。

Allure测试报告

测试步骤

1)allure的官网下载地址:https://github.com/allure-framework/allure2/releases

2)解压、配置环境变量,cmd 输入allure 检验安装配置

3)pip install allure-pytest 执行命令运行测试case  pytest --alluredir ./result/ 生成许多json文件等

4)allure generate .\result\ -o ./report/ --clean

5)windows下 allure generate ./path/to/your/test_results -o ./path/to/report --clean (-O可以写成--report--dir或--output 生成测试报告路径, generate生成测试报告,--clear清楚报告生成一个新的 )

6)查看测试报告: windows下可以 allure open -h localhost -p 8083 ./report/  (页面加载index.html一致loading,当然还可以使用别的方法)


    ‌

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

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

相关文章

从0入门自主空中机器人-3-【环境与常用软件安装】

关于本课程: 本次课程是一套面向对自主空中机器人感兴趣的学生、爱好者、相关从业人员的免费课程,包含了从硬件组装、机载电脑环境设置、代码部署、实机实验等全套详细流程,带你从0开始,组装属于自己的自主无人机,并让…

2、redis的持久化

redis的持久化 在redist当中,高可用的技术包括持久化,主从复制,哨兵模式,集群。 持久化是最简单的高可用的方法,作用就是备份数据。即将数据保存到硬盘,防止进程退出导致数据丢失。 redis持久化方式&…

[论文阅读] (34)ESWA2024 基于SGDC的轻量级入侵检测系统

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期…

深入解析:谱分解、SVD与PCA在算法中的应用与实现

特征值分解(EVD)、奇异值分解(SVD)和主成分分析(PCA)是矩阵分解技术的三种重要形式,它们在人工智能中扮演了关键角色。随着数据维度的快速增长和信息复杂度的提升,这些技术为处理高维…

[2025] 如何在 Windows 计算机上轻松越狱 IOS 设备

笔记 1. 首次启动越狱工具时,会提示您安装驱动程序。单击“是”确认安装,然后再次运行越狱工具。 2. 对于Apple 6s-7P和iPad系列(iOS14.4及以上),您应该点击“Optinos”并勾选“允许未经测试的iOS/iPadOS/tvOS版本”&…

第7章 程序流程控制 - 条件分支

汇编语言是一种低级编程语言,它与特定计算机架构的机器码有着直接对应关系。条件分支是程序流程控制的一部分,允许根据某些条件来决定执行哪一段代码。在汇编中,这通常通过比较指令和跳转指令来实现。 以下是一些经典的汇编语言源代码示例&a…

【笔记】在虚拟机中通过apache2给一个主机上配置多个web服务器

(配置出来的web服务器又叫虚拟主机……) 下载apache2 sudo apt update sudo apt install apache2 (一)ip相同 web端口不同的web服务器 进入 /var/www/html 创建站点一和站点二的目录文件(目录文件名自定义哈&#x…

路劲单伟彪新年致辞:稳驭轻舟 心向光明

岁序更替,华章日新。周期的轮回里积蓄着改变的力量,地产人正在顽强自救与不断求索中,用今天的抉择塑造未来的图景。 所谓落子无悔,抉择本身即是向前。不可否认,过去一年对于民营房企而言是极为艰难的一年。为了在地产…

vim里搜索关键字

vim是linux文本编辑器的命令,再vi的基础上做了功能增强 使用方法如下 1. / 关键字, 回车即可, 按n键查找关键字下一个位置 2.? 关键字, 回车即可, 按n键查找关键字下一个位置 3.示例

小程序中引入echarts(保姆级教程)

hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的在校大学生…

15-利用dubbo远程服务调用

本文介绍利用apache dubbo调用远程服务的开发过程,其中利用zookeeper作为注册中心。关于zookeeper的环境搭建,可以参考我的另一篇博文:14-zookeeper环境搭建。 0、环境 jdk:1.8zookeeper:3.8.4dubbo:2.7.…

一个最简单的ios程序(object_c)的编写

前言 如何在苹果系统MacOS创建一个简单的ios(iphone)程序,貌似非常的简单。但是,作为习惯了Windows开发的程序员来说,有时候还觉得有点麻烦,至少开始有点很不习惯。 本博文试着把这个过程展现一下&#xff…

文件传输工具FTransferor<优化篇>

在上一篇文章中,我们详细探讨了FTransferor文件传输工具的设计与实现,并展示了它在局域网文件传输方面的高效性。然而,随着互联网应用场景的不断丰富,传统的基于 TCP/UDP 的传输方式已经无法满足部分开发者的需求。特别是在跨平台…

Rabbitmq追问2

分析rabbitmq 默认使用姿势是什么 direct fanout还是什么 public void convertAndSend(String exchange, String routingKey, Object object, CorrelationData correlationData) throws AmqpException { this.send(exchange, routingKey, this.convertMessageIfNecessary(obje…

[文献阅读]ReAct: Synergizing Reasoning and Acting in Language Models

文章目录 摘要Abstract:思考与行为协同化Reason(Chain of thought)ReAct ReAct如何协同推理 响应Action(动作空间)协同推理 结果总结 摘要 ReAct: Synergizing Reasoning and Acting in Language Models [2210.03629] ReAct: Synergizing Reasoning an…

Rocky Linux下安装meld

背景介绍: meld是一款Linux系统下的用于 文件夹和文件的比对软件,非常常用; 故障现象: 输入安装命令后,sudo yum install meld,报错。 12-31 22:12:17 ~]$ sudo yum install meld Last metadata expirat…

2024年12月个人工作生活总结

本文为 2024年12月工作生活总结。 研发编码 Golang语言byte数组赋值 假定有如下变量: var strCode string var bCode [9]byte现需将string类型转换成byte类型,如下: bCode []byte(strCode)无法转换,提示: cannot…

【亚马逊云】基于Amazon EC2实例部署 NextCloud 云网盘并使用 Docker-compose 搭建 ONLYOFFICE 企业在线办公应用软件

文章目录 1. 部署EC2实例2. 安装 Docker 服务3. 安装docker-compose4. 创建Docker-compose文件5. 创建nginx.conf文件6. 运行docker-compose命令开始部署7. 访问ONLYOFFICE插件8. 访问NextCloud云盘9. 下载并启用ONLYOFFICE插件10. 上传文件测试11. 所遇问题12. 参考链接 1. 部…

如何在梯度计算中处理bf16精度损失:混合精度训练中的误差分析

如何在梯度计算中处理 bf16 精度损失:混合精度训练中的误差分析 在现代深度学习训练中,为了加速计算并节省内存,越来越多的训练任务采用混合精度(Mixed Precision)技术,其中常见的做法是使用低精度格式&am…

揭秘文件上传漏洞之操作原理(Thoughts on File Upload Vulnerabilities)

从上传到入侵:揭秘文件上传漏洞之操作原理 大家好,今天我们来聊一个"老而弥坚"的漏洞类型 —— 文件上传漏洞。虽然这个漏洞存在很多年了,但直到现在依然频频出现在各种漏洞报告中。今天我们就来深入了解一下它的原理和各种校验方…