Pytest 识别case规则

一、Python测试框架,主要特点有以下几点:

  • 简单灵活,容易上手;
  • 支持参数化;
  • 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);
  • pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)、allure-pytest(生成测试报告)等;
  • 测试用例的skip和xfail处理;
  • 可以很好的和jenkins集成;
  • pytest默认执行顺序是按照case顺序位置先后执行的;
  • pytest.ini和conftest.py文件要放在执行的同级目录(根目录)

二、安装pytest

1、命令行安装:pip install pytest

2、通过pycharm 【File】-【settings】-【Python Interpreter】搜索后安装; 

通过命令行pytest执行test_mod1.py文件中的代码

import pytestdef test_one():print("执行测试用例test_one")def test_second():print("执行测试用例test_second")
在pycharm命令行中输入:pytest -v test_mod1.py
输出:
collected 2 itemstest_mod1.py::test_one PASSED                                                                                                                                                       [ 50%]
test_mod1.py::test_second PASSED

通过pytest.main( )执行test_mod1.py的代码

import pytestdef test_one():print("执行测试用例test_one")def test_second():print("执行测试用例test_second")if __name__ == '__main__':pytest.main(['-vs'])结果:
collecting ... collected 2 itemstest_mod1.py::test_one PASSED                                            [ 50%]执行测试用例test_onetest_mod1.py::test_second PASSED                                         [100%]执行测试用例test_second

三、识别case的规则

  • 如果pytest命令行有指定目录,则从该目录中开始查找测试用例文件,如果没有指定,则从当前运行目录开始查找文件。注意,该查找是递归查找,子目录中的文件也会被查找到。
  • 并不是能够查找到目录下的所有文件,只有符合命名规则的文件才会被查找。默认规则是以test_开头或者以_test结尾的.py文件。
  • 在测试文件中查找Test开头的类,以及类中以test_开头的方法,查找测试文件中test_开头的函数

文件目录结构如下

在命令行中执行 pytest -vs

D:\Python Data\pythonTeach>pytest -vs
# test_mod3.py
import pytestclass TestMod3:def test_five(self):print("执行测试用例test_five")def test_six(self):print("执行测试用例test_six")
# mod2_test.py
import pytestdef test_three():print("执行测试用例test_three")def test_four():print("执行测试用例test_four")
# test_mod1.py
import pytestdef test_one():print("执行测试用例test_one")def test_second():print("执行测试用例test_second")if __name__ == '__main__':pass

执行结果

mod2_test.py::test_three 执行测试用例test_three
PASSED
mod2_test.py::test_four 执行测试用例test_four
PASSED
test_mod1.py::test_one 执行测试用例test_one
PASSED
test_mod1.py::test_second 执行测试用例test_second
PASSED
mod3/test_mod3.py::TestMod3::test_five 执行测试用例test_five
PASSED
mod3/test_mod3.py::TestMod3::test_six 执行测试用例test_six
PASSED

因为 pytest -vs 该命令没有指定目录,则从 D:\Python Data\pythonTeach 文件夹(运行目录)递归查找以test_开头或者以_test结尾的.py文件,在测试文件中查找Test开头的类,以及类中以test_开头的方法,查找测试文件中test_开头的函数;

pytest 执行指定文件夹

pytest -vs ./mod3/结果:
collected 2 itemsmod3/test_mod3.py::TestMod3::test_five 执行测试用例test_five
PASSED
mod3/test_mod3.py::TestMod3::test_six 执行测试用例test_six
PASSED

递归执行mod3文件夹下的所有以test_开头或者以_test结尾的.py文件,在测试文件中查找Test开头的类,以及类中以test_开头的方法,查找测试文件中test_开头的函数;

三、pytest 执行case时可选参数

-v:                                        #打印详细运行的日志信息
-s:     pytest -s xxx.py                   #输出case中print的内容
-m:    pytest -m “tag名称”         #运行指定tag名称的用例,也就是运行有@pytest.mark.[标记名]这个标记的case
-k:     # pytest -k “类名、方法名、类名 and not 方法名” 运行指定case的用例
-x:          #遇到失败的case就是停止执行
--lf:       #只重新运行上次运行失败的用例(或如果没有失败的话会全部跑)
--ff:       #运行所有测试,但首先运行上次运行失败的测试(这可能会重新测试,从而导致重复的fixture setup/teardown)
--maxfail=num:   #当用例失败个数达到num时,停止运行
--collect-only:   #收集测试用例,展示出哪些用例会被执行(只是展示不会执行case)
--junit-xml:--junit-xml=path/name.xml        #在指定目录或当前目录下生成xml格式的报告(需要在pytest.ini文件内声明格式:junit_family=xunit2)
--steup-show                                #完整展示每个用例的fixture调用顺序
命令行执行:
pytest test_quick_start.py --junit-xml=report.xmlmain执行:
pytest.main(["-s", "TestCalc.py", "-m", "div", "--junit-xml=report.xml"])
pytest.main(["-vsx", "TestCalc.py", "-m", "div"])

@pytest.mark.标记名 为测试用例指定 tag 名称

import pytestdef test_one():print("执行测试用例test_one")@pytest.mark.smoke   # 为test_second()测试用例指定名称为smoke的tag
def test_second():print("执行测试用例test_second")
D:\Python Data\pythonTeach>pytest -vsm "smoke"

通过 -m "标记名" 指定执行用例 

结果:
test_mod1.py::test_second 执行测试用例test_second
PASSED

通过pytest.main( )执行标记的用例

# run_test.py
import pytestif __name__ == '__main__':pytest.main(["-vsm"," smoke","test_mod1.py"])

通过-k指定测试用例执行

D:\Buyer_test_code\testteach>pytest -vs -k "test_three"

执行结果

mod2_test.py::test_three 执行测试用例test_three
PASSED

上述命令行中加入了-k参数,-k “类名、方法名、类名 and not 方法名”来运行指定的case

任务:

1、编写test_demo1.py文件,文件中包含test_01, test_02,test_03函数,通过命令行执行test_demo1.py中的所有test开头的函数;

2、在项目目录下新建一个demo的文件夹,demo文件夹下新建test_demo2.py,test_demo2.py下包含test_04,test05函数,通过命令行执行该项目目录下所有test开头的.py文件;通过命令行只执行demo文件夹下的test开头的.py文件;

3、在命令行中分别加入-v, -s, -k 参数来执行case

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

C#简单使用Yolov5的Onnx格式模型进行目标检测

背景 最近要离职了,同事需要了解一下C#如何使用yolov5系列onnx格式模型进行目标检测,由于其对C#不熟练,可能会影响公司后续的开发进度,所以趁着还在,赶紧把手尾搞好。 方案 1、创建一个C# DotNet 8 控制台项目[可千…

LabVIEW动态数据交换实现数据通信

LabVIEW动态数据交换实现数据通信 介绍了LabVIEW软件在驱动一般多功能接口卡中的应用。LabVIEW作为一种图形化编程平台,被广泛应用于自动测量系统、工业过程自动化等领域。利用LabVIEW驱动实验室中常用的多功能接口卡,以实现数据采集和分析。 系统主要…

bxCAN 主要特性

bxCAN 主要特性 ● 支持 2.0 A 及 2.0 B Active 版本 CAN 协议 ● 比特率高达 1 Mb/s ● 支持时间触发通信方案 发送 ● 三个发送邮箱 ● 可配置的发送优先级 ● SOF 发送时间戳 接收 ● 两个具有三级深度的接收 FIFO ● 可调整的筛选器组: — CAN1 和…

Go语言的100个错误使用场景(一)|代码和项目组织

前言 大家好,这里是白泽。 《Go语言的100个错误以及如何避免》 是最近朋友推荐我阅读的书籍,我初步浏览之后,大为惊喜。就像这书中第一章的标题说到的:“Go: Simple to learn but hard to master”,整本书通过分析100…

ASP .NET Core Api 使用过滤器

过滤器说明 过滤器与中间件很相似,过滤器(Filters)可在管道(pipeline)特定阶段(particular stage)前后执行操作。可以将过滤器视为拦截器(interceptors)。 过滤器级别范围…

MATLAB环境下一种音频降噪优化方法—基于时频正则化重叠群收缩

语音增强是语音信号处理领域中的一个重大分支,这一分支已经得到国内外学者的广泛研究。当今时代,随着近六十年来的不断发展,己经产生了许多有效的语音增强算法。根据语音增强过程中是否利用语音和噪声的先验信息,语音增强算法一般…

基于springboot游戏分享网站源码和论文

网络的广泛应用给生活带来了十分的便利。所以把游戏分享管理与现在网络相结合,利用java技术建设游戏分享网站,实现游戏分享的信息化。则对于进一步提高游戏分享管理发展,丰富游戏分享管理经验能起到不少的促进作用。 游戏分享网站能够通过互…

快手社招一面算法原题

快手面试 最近收到一位读者的留言,是跟我吐槽「快手社招面试」的。 但是由于交谈内容太多东西需要脱敏,我打完马赛克之后,发现上下文都不连贯了。 遂罢。 但一转念,我想如果这真的是这个公司的普遍性问题,而非独立个例…

【极数系列】Flink环境搭建Linux版本 (03)

文章目录 引言01 Linux部署JDK11版本1.下载Linux版本的JDK112.创建目录3.上传并解压4.配置环境变量5.刷新环境变量6.检查jdk安装是否成功 02 Linux部署Flink1.18.0版本1.下载Flink1.18.0版本包2.上传压缩包到服务器3.修改flink-config.yaml配置4.启动服务5.浏览器访问6.停止服务…

verdaccio搭建npm私服

一、安装verdaccio 注:加上–unsafe-perm的原因是防止报grywarn权限的错 npm install -g verdaccio --unsafe-perm 二、启动verdaccio verdaccio 三、配置文件 找到config.yml一般情况下都在用户下的这个文件夹下面 注:首次启动后才会生成 C:\Users\h…

Idea上操作Git回退本地版本,怎么样保留已修改的文件,回退本地版本的四种方式代表什么?

Git的基本概念:Git是一个版本控制系统,用于管理代码的变更历史记录。核心概念包括仓库、分支、提交和合并。 1、可以帮助开发者合并开发的代码 2、如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突 3、代码文件版本管理 问题描述 当我们使用git提交代码…

深入了解低代码开发:多角度分类

引言 随着数字化时代的到来,应用程序的需求不断增长,企业和开发者们面临着更多的挑战,包括开发周期的压力、技术复杂性的增加以及对高效协作的需求。在这一背景下,低代码开发应运而生,成为解决这些挑战的一种强大工具…

算法基础课-数据结构

单链表 题目链接:826. 单链表 - AcWing题库 思路:AcWing 826. 单链表---图解 - AcWing 需要注意的点在于理解ne[idx] head,idx表示当前的点,意思是将当前的点链到头结点的后面,再将头结点链在当前idx的前面。 #inc…

JVM系列——垃圾收集器

对象存活判断 引用计数法 在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。 可达性分析算法 通过一系列称为“GC …

基于springboot+微信小程序+vue实现的校园二手商城项目源码

介绍 校园二手商城,架构:springboot微信小程序vue 软件架构 软件架构说明 系统截图 技术选型 技术版本说明Spring Boot2.1.6MVC核心框架Spring Security oauth22.1.5认证和授权框架MyBatis3.5.0ORM框架MyBatisPlus3.1.0基于mybatis,使用…

蓝桥杯备战——8.DS1302时钟芯片

1.分析原理图 由上图可以看到,芯片的时钟引脚SCK接到了P17,数据输出输入引脚IO接到P23,复位引脚RST接到P13。 2.查阅DS1302芯片手册 具体细节还需自行翻阅手册,我只截出重点部分 总结:数据在上升沿写出,下降沿读入,…

QGIS使用地理配准将3857坐标系转成上海城建坐标

控制点格式 如 mapX mapY sourceX sourceY enable dX dY residual -58653 70641 13452659.39 3746386.025 1 0 0 0 -58653 65641 13452693.09 3740477.283 1 0 0 0 ......保存为.points格式 图层预处理 图层投影为3857坐标系 地理配准 1. 打开图层-地理配准 工具 2. 导入…

基于FX构建大型Golang应用

Uber开源的FX可以帮助Go应用解耦依赖,实现更好的代码复用。原文: How to build large Golang applications using FX 构建复杂的Go应用程序可能会引入很多耦合 Golang是一种流行编程语言,功能强大,但人们还是会发现在处理依赖关系的同时组织大…

sql注入第一关

判断注入点的类型 通常 Sql 注入漏洞分为 2 种类型: 数字型字符型 数字型测试 在参数后面加上单引号,比如: http://xxx/abc.php?id1 如果页面返回错误,则存在 Sql 注入。 原因是无论字符型还是整型都会因为单引号个数不匹配而报错。 如果未报错&…

Go语言中的HTTP代理处理机制

在当今的互联网世界,HTTP代理是一种常见的网络通信方式,用于保护用户的隐私、突破网络限制或提高网络访问速度。在Go语言中,代理处理机制的实现可以为开发者提供强大的网络通信能力。本文将深入探讨Go语言中的HTTP代理处理机制。 首先&#…