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

单元测试框架Pytest的基本操作

Pytest基本操作

  • 1. 详解
    • 1.1 命名规则:
    • 1.2 自定义查找规则:
    • 1.3 3种运行方式
    • 1.4 执行顺序
  • 2. 断言
    • 2.1 定义
    • 2.2 断言的规则
  • 3. mark
    • 3.1 mark的作用
    • 3.2 mark的标记方式
    • 3.3 注册标签名
    • 3.4 skip跳过标记
  • 4. pytest的参数化
  • 5. pytest的夹具(fixture测试夹具)
    • 5.1. 作用
    • 5.2. 夹具应用场景
    • 5.3. 夹具的定义及使用:
    • 5.4. fixture的范围

1. 详解

一文5000字详解Pytest单元测试,看完不会来打我【保姆级教程】

1.1 命名规则:

 🔸 模块名: test_*.py或者是 *_test.py(即以test_开头或_test结尾的py文件)
​ 🔸类名:Test开头,且类里没有__init__函数(否则容易报错)
​ 🔸方法名:test_开头

1.2 自定义查找规则:

我们还可以自定义查找的规则,但自定义的规则配置文件要放在你要运行的项目的根目录下(见上图),且配置文件要严格以pytest.ini命名,pytest.ini文件内容举例如下:

[pytest]	# 只能修改=右边的值
python_files = demo_*.py	# 模块名以demo_开头
python_functions = demo_*	# 方法名以demo_开头
python_classes = Demo*	# 类名名以Demo开头

1.3 3种运行方式

【pytest】一、pytest的3种运行方式,运行指定测试用例,跳过测试用例

1.4 执行顺序

pytest有自己内置的执行顺序规则,一般是从上往下,即同一个py文件中,从上往下执行测试用例。

2. 断言

参考文章:pytest篇3-断言详解

2.1 定义

断言就是在测试代码中添加的一些判断逻辑,用于判断被测程序的实际输出是否符合预期结果。如果实际输出结果与预期不符,则断言抛出异常,测试失败;否则测试通过。(添加断言在对应的方法里面,做判断测试用例结果是否满足预期)

2.2 断言的规则

pytest断言的规则如下:

  1. 如果表达式为False,则断言失败,抛出AssertionError异常;
  2. 如果表达式为True,则断言成功,测试通过;
  3. 如果使用assert not表达式,则当表达式为True时,断言失败,测试失败;
  4. 如果使用assert == 表达式,则当两个表达式的值相等时,断言成功,否则断言失败。
    在这里插入图片描述

3. mark

【pytest】使用 mark 标记及运行测试用例,注册、管理 mark 标记

3.1 mark的作用

在实际工作中,我们要写的自动化用例会比较多,也不会都放在一个py文件中,如果有几十个py文件,上百个方法,而我们只想运行当中部分的用例时怎么办?
pytest提供了一个非常好用的mark功能,可以给测试用例打上各种各样的标签,运行用例时可以指定运行某个标签。mark功能作用就是灵活的管理和运行测试用例。

pytest的mark功能允许我们通过自定义标记来对测试用例进行分组、选择和过滤

3.2 mark的标记方式

​ 标签既可以打到方法上,也可以打到类上,标记的两种方式:
🍊 直接标记类或方法或函数:@pytest.mark.标签名
🍊 类属性:pytestmark = [pytest.mark.标签名, pytest.mark.标签名],需要注意的是属性名称是固定的

使用mark标记测试用例非常简单,只需要在测试函数或类上方添加注解即可。例如,我们可以使用@pytest.mark.feature来标记一个测试函数属于某个特定的功能模块:

3.3 注册标签名

我们要想运行已经打好标记的函数,还需要对标签名进行注册,告诉pytest有哪些标签,如果不进行注册运行时(pytest的高级版本)可能会报警告让你进行注册。

​ 我们只需要在项目根目录下创建一个pytest.ini文件,注意文件名是不可修改的,否则pytest会找不到。内容格式如下

 - 首先在项目根目录创建一个文件 pytest.ini ,这个是 pytest 的配置文件; 然后在 pytest.ini 文件的- markers 中写入你的 mark 标记, 冒号 “:” 前面是标记名称,后面是 mark 标记的说明,可以是空字符串;- 注意:pytest.ini 文件中只能使用纯英文字符,绝对不能使用中文的字符(尤其是冒号和空格)!
# pytest.ini
# 只能修改=右边的值
[pytest]	
python_files = demo_*.py	# 模块名以demo_开头
python_functions = demo_*	# 方法名以demo_开头
python_classes = Demo*	# 类名名以Demo开头# 注册标签
markers = login   : 'marks tests as login'logout  : 'marks tests as logout'success : 'marks tests as success'failed  : 'marks tests as failed'

规范使用 mark 标记:
注册完 mark 标记之后 pytest 便不会再告警,但是有时手残容易写错 mark 名,导致 pytest 找不到用例,一时想不开很难debug,尤其是团队协作时很容易出现类似问题,所以我们需要 “addopts = --strict” 参数来严格规范 mark 标记的使用!

  • 在 pytest.ini 文件中添加参数 “addopts = --strict”;
  • 注意要另起一行,不要在 markers 中添加;
  • 添加该参数后,当使用未注册的 mark 标记时,pytest会直接报错:“ ‘xxx’ not found in markersconfiguration option ”,不执行测试任务; 注意:pytest.ini
  • 配置文件不支持注释,不支持注释,不支持注释…
# pytest.ini[pytest]
markers 
http://www.lryc.cn/news/360706.html

相关文章:

  • Java web应用性能分析之【java进程问题分析工具】
  • 02-2.3.2_2 单链表的查找
  • 设计模式(十四)行为型模式---访问者模式(visitor)
  • 【Matplotlib作图-3.Ranking】50 Matplotlib Visualizations, Python实现,源码可复现
  • 加入不正确的位置编码会破坏掉原本的信息吗?
  • 区块链合约开发流程
  • 建筑企业有闲置资质怎么办?
  • Java开发-特殊文本文件,日志技术
  • Django ORM深度游:探索多对一、一对一与多对多数据关系的奥秘与实践
  • 无人机路径规划:基于鸽群优化算法PIO的无人机三维路径规划MATLAB代码
  • ArcGIS属性域和子类型
  • 电子电器架构 --- 什么是域控制器?
  • 链表头部插入结点
  • k8s集群修改apiserver的ip地址
  • C语言编程技巧:深度挖掘与高效实践
  • 十_信号14 - system()
  • 【Python网络爬虫】详解python爬虫中URL资源抓取
  • AI办公自动化:用kimi批量提取音频中的标题并重命名
  • flyfish3.0.0配置避坑
  • Spring (33)CSRF(跨站请求伪造)保护
  • 【一刷《剑指Offer》】面试题 29:数组中出现次数超过一半的数字
  • vx小程序初学
  • vue 笔记01
  • 开发电商系统的技术选型
  • C++STL---vector常见用法
  • linux文件共享之samba
  • 端午传统食品创意营销方案
  • 制作ChatPDF之Elasticsearch8.13.4搭建(一)
  • 一种最大重叠离散小波包特征提取和支持向量机的ECG心电信号分类方法(MATLAB 2018)
  • 德勤:中国、印度等对ChatGPT等生成式AI应用,处领先地位