当前位置: 首页 > ai >正文

pytest 框架-第一集:初识

一、标记(mark)功能

1. 创建标记

ini

#创建标记
markers =smoke:冒烟用例users:用户模块order:订单模块
  • 解释:在pytest.ini 配置文件中,使用markers 关键字来定义自定义的标记。这里定义了 smoke(代表冒烟用例)、users(代表用户模块相关用例)、order(代表订单模块相关用例) 。这些标记后续可用于给测试用例分类打标签,方便在运行测试时筛选执行特定类别的:
    • 使用@pytest.mark.<标记名> 装饰器来给测试函数打标记。test_login 函数被打上了 users 标记,表示它属于用户模块相关的测试用例 ;test_register 函数被打上了 order 标记,表示它属于订单模块相关的测试用例。
    • 这里测试函数定义中出现的 self 参数,如果是在测试类中的方法,self 是合理的,表示类实例本身;如果是普通测试函数,不应该有 self 参数。

3. 在 pytest.ini 中加入运行时参数

ini

#配置常用运行参数
addopts = -vs -m "users or order"
  • 解释:在pytest.ini 配置文件的 addopts 配置项中,-vs 是 pytest 的运行选项,-v 表示显示详细的测试结果信息,-s 表示捕获标准输出(即允许测试函数中的print 语句正常输出内容 ) ;-m 选项用于根据标记表达式筛选测试用例执行,这里的表达式 "users or order" 表示运行被标记为 users 或者 order 的测试用例。

二、运行参数

这是 pytest 测试框架中常用运行参数及选项的说明:

运行参数

  • -vs :是-v-s两个参数的组合。
    • -v :表示输出详细信息,运行测试时会显示每个测试用例的详细执行结果,包括测试用例的名称、执行状态(通过 / 失败)等更多信息,方便了解测试全貌。
    • -s :用于在测试运行时显示调试信息,允许测试函数中的print语句正常输出内容,方便在测试过程中打印一些调试信息来辅助排查问题。
  • --html=./reports/r.html :用于生成 HTML 格式的测试报告,指定报告生成的路径和文件名。运行测试后,会在./reports目录下生成名为r.html的报告文件,通过浏览器打开可直观查看测试结果统计、用例执行情况等信息 。
  • -n=2 :开启多线程运行测试用例,这里n指定线程数为 2 ,能利用多核 CPU 资源加速测试执行,提升测试效率。
  • --reruns=2 :设置失败用例重跑机制,当测试用例执行失败时,会自动重新运行指定次数(这里是 2 次 ) 。有些测试用例可能因环境等偶然因素失败,重跑可减少误判。

其他

  • -x :只要有一个测试用例失败,就立即停止运行后续测试用例。在测试集较大,且希望尽快定位到首个失败点时很有用,避免不必要的测试执行。
  • --maxfail=2 :设定允许失败的用例数量上限,当失败的测试用例达到指定数量(这里是 2 个 ) ,就停止运行剩余测试用例。可用于快速判断测试集整体质量,当失败用例过多时及时终止。
  • -k :根据测试用例名称中的字符串来筛选并运行测试用例。比如-k "login" ,会运行名称中包含login字符串的测试用例,方便精准选择特定测试用例运行,提高测试针对性。
  • -m : 运行对应标记的测试用例

三、Pytest 中控制测试用例执行顺序

在 Pytest 中,测试用例默认按照从上到下的顺序执行。但通过使用@pytest.mark.run(order=X) 装饰器可以改变测试用例的执行顺序 ,其中X 是一个整数,整数越小,该测试用例越先执行。

python

@pytest.mark.run(order=1)
def test_add_user(self):print("增加用户")

  • @pytest.mark.run(order=1) :这是一个装饰器,用于指定test_add_user 这个测试用例的执行顺序。这里order=1 表示它会在其他未指定顺序或者指定顺序值比 1 大的测试用例之前执行。

补充示例

假设有另一个测试用例:

@pytest.mark.run(order=2)
def test_delete_user(self):print("删除用户")

 四、pytest跳过测试用例

无条件跳过和有条件

五、Pytest 测试用例的前后置

def setup_class(self):print("每个类之前的操作:每个类只执行一次")def teardown_class(self):print("每个类之后的操作:每个类只执行一次")def setup_method(self):print("每个用例之前的操作:每个用例执行一次")def teardown_method(self):print("每个用例之后的操作:每个用例执行一次")

六、部分前后置 Fixture 固件(一般用这个),和代码的耦合性更低。

  • 语法
    @pytest.fixture(scope="作用域",autouse="自动/手动",params="参数化",ids="参数化时参数别名",name="固件别名")
  • scope 的值(作用域)
    • function: 函数
    • class: 类
    • module: 模块,py 文件
    • session: 回话,所有用例
  • autouse 是否自动执行
    • True:自动调用
    • False:手动调用

ids: 参数化时参数别名

name: 固件别名,简化固件名

注意:一旦有了别名,那么固件名则失效了,只能用别名

七、基础路径设置

  1. 在 pytest.ini 中加入 base_url,就相当于创建了一个固件
# 基础路径
base_url = "http://192.168.0.100base_url = "

2.在用例中手动去调用这个固件

def test_login(self,exe_sql,base_url):print("登陆测试用例")print(exe_sql,base_url)

七、Fixture 固件一般会结合 conftest.py 文件使用

  1. conftest.py 文件名是固定的,是 fixture 的容器,专门用于放 fixture。
  2. 使用 conftest.py 文件中的 fixture 固件,不需要导包,直接用即可。
  3. 一个 conftest.py 中可以有多个 fixture 固件。
  4. conftest.py 文件也可以有多个,手动是谁先调用谁先执行,自动是外层的 conftest.py 的优先级比内层的 conftest.py 的优先级高。

http://www.xdnf.cn/news/6444.html

相关文章:

  • 3.2.4 掌握RDD行动算子
  • 周赛好题推荐
  • 采购管理系统实施要点有哪些,流程优化与风险防控指南
  • 论文中的“研究方法”怎么写?
  • NHANES指标推荐:OBS
  • 投影仪基础知识及选购方向小记①
  • [GPRC服务使用]grpc的基础数据类型与C++中的赋值方法
  • Ascend的aclgraph(九)AclConcreteGraph:e2e执行aclgraph
  • Linux --systemctl损坏
  • c++ std::deque
  • 国内优质沉金PCB厂家有哪些?
  • MySQL 读写分离
  • Java引用类型
  • Elasticsearch 快速入门指南
  • 山东大学计算机图形学期末复习8——CG11下
  • 文档多模态识别工具对比:MinerU、PaddleOCR、Marker
  • 2089. 找出数组排序后的目标下标——O(n)做法!
  • OpenCV CUDA模块中逐元素操作------数学函数
  • 原生微信小程序 textarea组件placeholder无法换行的问题解决办法
  • Secs/Gem第五讲(基于secs4net项目的ChatGpt介绍)
  • window 显示驱动开发-命令和 DMA 缓冲区简介
  • VBA编程时如何加密数据库连接的账号密码?
  • Ubuntu 编译SRS和ZLMediaKit用于视频推拉流
  • 高效管理多后端服务:Nginx 配置与实践指南
  • 《Python星球日记》 第78天:CV 基础与图像处理
  • 二程运输的干散货船路径优化
  • 图片、音频、视频都能转?简鹿格式工厂了解一下
  • ollama 升级换源
  • Buildroot 移植MiniGUI
  • 牛客网NC21994:分钟计算