自动化测试-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.rhkb.cn/news/498832.html

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

相关文章

CPT203 Software Engineering 软件工程 Pt.2 敏捷方法和需求工程(中英双语)

文章目录 3. Aglie methods(敏捷方法)3.1 Aglie methods(敏捷方法)3.1.1 特点3.1.2 优点3.1.3 缺点3.1.4 原则3.1.5 计划驱动与敏捷方法的对比 3.2 Scrum3.2.1 Scrum roles3.2.2 Scrum Activities and Artifacts3.2.2.1 Product B…

C#Halcon图像处理畸变校正之曲面校正

图像校正场景一般有两种,其一由镜头本身或安装角度引起,其二是被拍摄物品本身引起 理论处理流程 我的处理处理流程 1,加载网格校正图像 2,确定符合条件的网格区域 3,显示网格鞍点 4,显示网格线 5&#xff…

IO Virtualization with Virtio.part 1 [十二]

久等了各位! 本篇开始讲解 IO 虚拟化中的 virtio,我会以 Linux 的 IIC 驱动为例,从 IIC 驱动的非虚拟化实现,到 IIC 驱动的半虚拟化实现,再到最后 X-Hyper 中如何通过 virtio 来实现前后端联系,一步步把 v…

HTML——26.像素单位

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>像素</title></head><body><!--像素&#xff1a;1.指设备屏幕上的一个点&#xff0c;单位px&#xff0c;如led屏上的小灯朱2.当屏幕分辨率固定时&…

uniapp不能直接修改props的数据原理浅析

uniapp不能直接修改props的数据 Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the props value. Prop being mutated: "expectDeliveryAt" 避…

基于FISCO BCOS的电子签署系统

概述 本项目致力于构建一个安全、高效且功能完备的电子签署系统&#xff0c;通过整合区块链技术与传统数据库管理&#xff0c;为用户提供了可靠的电子签署解决方案&#xff0c;有效应对传统电子签署系统的数据安全隐患&#xff0c;满足企业和个人在数字化办公环境下对电子文档…

HackMyVM-Adria靶机的测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、Getshell 3、提权 四、结论 一、测试环境 1、系统环境 渗透机&#xff1a;kali2021.1(192.168.101.127) 靶 机&#xff1a;debian/linux(192.168.101.226) 注意事项&…

STM32-笔记23-超声波传感器HC-SR04

一、简介 HC-SR04 工作参数&#xff1a; • 探测距离&#xff1a;2~600cm • 探测精度&#xff1a;0.1cm1% • 感应角度&#xff1a;<15 • 输出方式&#xff1a;GPIO • 工作电压&#xff1a;DC 3~5.5V • 工作电流&#xff1a;5.3mA • 工作温度&#xff1a;-40~85℃ 怎么…

win32汇编环境下,对话框程序中生成listview列表控件,点击标题栏自动排序的示例

;;启动后的效果 ;点击性别后的效果 ;把代码抄进radasm里面&#xff0c;可以直接编译运行。重要的地方加了备注。 ;这个有点复杂&#xff0c;重要的地方加了备注 ;以下是ASM文件 ;>>>>>>>>>>>>>>>>>>>>>>>…

工业以太网交换机怎么挑选?

在现代工业中&#xff0c;工业以太网交换机是网络的核心设备。正确选择适合的交换机&#xff0c;直接关系到工业网络的运行稳定性和系统的可靠性。接下来&#xff0c;我们将围绕选型时需要重点考虑的几个方面展开讨论&#xff0c;并为您提供一些实用建议。 性能与传输速度 选择…

如何在 Ubuntu 22.04 上安装并开始使用 RabbitMQ

简介 消息代理是中间应用程序&#xff0c;在不同服务之间提供可靠和稳定的通信方面发挥着关键作用。它们可以将传入的请求存储在队列中&#xff0c;并逐个提供给接收服务。通过以这种方式解耦服务&#xff0c;你可以使其更具可扩展性和性能。 RabbitMQ 是一种流行的开源消息代…

Zabbix企业级分布式监控系统

第一章&#xff1a;监控概念及Zabbix部署 监控概述 对于监控系统在企业架构中不是新的技术&#xff0c;但却是必不可少的重要组成部分&#xff0c;所谓无监控&#xff0c;不运维&#xff01; 监控系统可以帮助运维、开发、测试等人员及时的发现服务器出现的故障&#xff0c;…

前端安全措施:接口签名、RSA加密、反调试、反反调试、CAPTCHA验证

文章目录 引言I 设置防爬虫功能使用robots.txt文件通过配置HTTP头部中的X-Robots-TagII 禁止打开开发者工具反复清空控制台无限debugger反调试检查是否按下了F12或其他调试快捷键禁用右键监听调试快捷键例子III 屏蔽粘贴/复制/剪切/选中IV 知识扩展: javascript内置命令调试分…

ThinkPHP 8高效构建Web应用-第一个简单的MVC应用示例

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 我们先实现一…

Visual Studio 中增加的AI功能

前言&#xff1a; 人工智能的发展&#xff0c;在现在&#xff0c;编程技术的IDE里面也融合了AI的基本操做。本例&#xff0c;以微软的Visual Studio中的人工智能的功能介绍例子。 本例的环境&#xff1a; Visual Studio 17.12 1 AI 智能变量检测&#xff1a; 上图展示了一…

理解生成协同促进?华为诺亚提出ILLUME,15M数据实现多模态理解生成一体化

多模态理解与生成一体化模型&#xff0c;致力于将视觉理解与生成能力融入同一框架&#xff0c;不仅推动了任务协同与泛化能力的突破&#xff0c;更重要的是&#xff0c;它代表着对类人智能&#xff08;AGI&#xff09;的一种深层探索。通过在单一模型中统一理解与生成&#xff…

TTL 传输中过期问题定位

问题&#xff1a; 工作环境中有一个acap的环境&#xff0c;ac的wan口ip是192.168.186.195/24&#xff0c;ac上lan上有vlan205&#xff0c;其ip子接口地址192.168.205.1/24&#xff0c;ac采用非nat模式&#xff0c;而是路由模式&#xff0c;在上级路由器上有192.168.205.0/24指向…

015-spring-动态原理、AOP的xml和注解方式

强制使用cglib动态代理 spring-AOP的使用

Postman测试big-event

报错500。看弹幕&#xff0c;知道可能是yml或sql有问题。 所以检查idea工作台&#xff0c; 直接找UserMapper检查&#xff0c;发现完全OK。 顺着这个error发现可能是sql有问题。因为提示是sql问题&#xff0c;而且是有now()的那个sql。 之后通过给的课件&#xff0c;复制课件…

CPT203 Software Engineering 软件工程 Pt.1 概论和软件过程(中英双语)

文章目录 1.Introduction1.1 What software engineering is and why it is important&#xff08;什么是软件工程&#xff0c;为什么它很重要&#xff09;1.1 We can’t run the modern world without software&#xff08;我们的世界离不开软件&#xff09;1.1.1 What is Soft…