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

自动化框架pytest(1)

文章目录

        • 1 安装
        • 2 用例运行规则
        • 3. pytest命令参数
        • 4. pytest配置文件
        • 5. 前后置
        • 6. 断言
        • 7. 参数化

pytest 是⼀个非常流行且高效的Python测试框架,它提供了丰富的功能和灵活的用法,使得编写和运行测试用例变得简单而高效

1 安装
pip install pytest==8.3.2

在这里插入图片描述

2 用例运行规则
  1. 文件名以test_开头或_test结尾

在这里插入图片描述
test01 文件名不规范 不会执行里面的测试用例

  1. 测试类以Test开头, 并且不能有 __init__方法。

在这里插入图片描述
类的初始化方法: __init__
由于 pytest 的测试收集机制,测试类中不可以定义 __ init __ 方法。 pytest 采用自动发现机制来收集测试用例。它会自动实例化测试类并调用其所有以 test 结尾的方法作为测试用例。如果测试类中定义了 __ init __ 方法,那么当 pytest 实例化该类时, __ init __ 方法会被调用,这可能会掩盖测试类的实际测试逻辑,并引⼊额外的副作用,影响测试结果的准确性。
若测试类中存在初始化操作该采取什么⽅案?
为了避免使用 __ init __ 方法,建议在 pytest 中使用其他替代方案,如使用setUp() 和tearDown() 方法、使用类属性、使用 fixture 函数(具体使用后续会讲解)

  1. 测试方法以test开头

在这里插入图片描述

3. pytest命令参数

pytest 提供了丰富的命令行选项来控制测试的执行。以下是⼀些常用的 pytest 命令行参数及其
使用说明。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4. pytest配置文件

在当前项目下创建pytest.ini文件,该文件为 pytest 的配置文件,以下为常见的配置选项:
在这里插入图片描述
在这里插入图片描述

5. 前后置

三种实现方式:

方法类型作用范围执行时机说明
setup_method/teardown_method每个测试方法每个test_方法前后各执行一次
setup_class/teardown_class整个测试类类中第一个测试开始前/最后一个测试结束后执行
Fixture自定义作用域根据scope参数控制

在这里插入图片描述
在这里插入图片描述

6. 断言

断言( assert )是⼀种调试辅助工具,用于检查程序的状态是否符合预期。如果断言失败(即条件
为假),Python解释器将抛出⼀个 AssertionError 异常。断言通常用于检测程序中的逻辑错误。
pytest 允许你在 Python 测试中使用标准的 Python assert 语句来验证预期和值。

assert 条件, 错误信息#断⾔整数
a = 1
b = 2
assert a == b#断⾔字符串
str = "hello"
assert "hello" == str# 断⾔列表
expect_list = [1, 'apple', 3.14]
actual_list = [1, 'apple', 3.14]
# 断⾔元组
expect_tuple = (1, 'apple', 3.14)
actual_tuple = (1, 'apple', 3.14)
# 断⾔字典
expect_dict = {'name': 'Alice', 'age': 25}
actual_dict = {'name': 'Alice', 'age': 25}
# 断⾔集合
expect_set = {1, 2, 3, 'apple'}
actual_set = {1, 2, 3, 'apple'}
assert expect_list == actual_list
assert expect_tuple == actual_tuple
assert expect_dict == actual_dict
assert expect_set == actual_set

json接口返回值断言:

class Test_case2:def test(self):url = "https://jsonplaceholder.typicode.com/posts/1"r = requests.get(url=url)data = {"userId": 1,"id": 1,"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit","body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}assert data == r.json() #断言整个返回值jsonassert r.json()["id"] == 1 #断言返回值json的某个字段

在这里插入图片描述

html接口返回值断言:

 def test2(self):url = "https://jsonplaceholder.typicode.com/"r = requests.get(url=url)text = "{JSON} Placeholder"assert text in r.text

在这里插入图片描述

7. 参数化

参数化设计是自动化设计中的⼀个重要组成部分,它通过定义设计参数和规则,使得设计过程更加灵活和可控。
pytest中内置的 pytest.mark.parametrize 装饰器允许对测试函数的参数进行参数化。

示例1:在用例上使用参数化

    @pytest.mark.parametrize("test_input, expected", [("3+5", 8), ("5+8", 13)])def test3(self, test_input, expected):assert eval(test_input) == expected

在这里插入图片描述
示例2:在类上使用参数化

@pytest.mark.parametrize("n, expected", [(1, 2), (3, 4)])
class Test_2:def test1(self, n, expected):assert n + 1 == expecteddef test2(self, n, expected):assert n * 1 + 1 == expected

在这里插入图片描述
要对模块中的所有测试进行参数化,你可以将pytestmark全局变量赋值:

pytestmark = pytest.mark.parametrize("n, expected", [(1, 2), (3, 4)])
class Test_case2:def test3(self, n, expected):assert n + 1 == expectedclass Test_2:def test1(self, n, expected):assert n + 1 == expecteddef test2(self, n, expected):assert n * 1 + 1 == expected

在这里插入图片描述
除了使用 @parametrize 添加参数化外, pytest.fixture() 允许对 fixture 函数进行参数化。

示例3:自定义参数化数据源

def data_provider():
return ["a", "b"]
# 定义⼀个测试函数,它依赖于上⾯函数的返回值
@pytest.mark.parametrize("data", data_provider())
def test_data(data):
assert data != None
http://www.dtcms.com/a/332605.html

相关文章:

  • Vue3 Element-plus 封装Select下拉复选框选择器
  • Vue3 + Element Plus 实现可搜索、可折叠、可拖拽的部门树组件
  • 基于element-plus的基础表单样式
  • [微服务]ELK Stack安装与配置全指南
  • Pytest项目_day17(随机测试数据)
  • 大模型微调分布式训练-大模型压缩训练(知识蒸馏)-大模型推理部署(分布式推理与量化部署)-大模型评估测试(OpenCompass)
  • 专题:2025跨境电商市场布局、供应链与产业带赋能报告 |附130+份报告PDF、原数据表汇总下载
  • Sparse-ICP—(3) 点到面稀疏迭代最近点算法(matlab版)
  • PDF Replacer:高效便捷的PDF文档内容替换专家
  • 国内多光谱相机做得好的厂家有哪些?-多光谱相机品牌厂家
  • 8月4日实训考察:重庆五一职院走进成都国际影像产业园
  • ffmpeg-调整视频分辨率
  • 网站与政务新媒体自查情况的报告工具功能
  • Web攻防-大模型应用LLM搭建接入第三方内容喂养AI插件安全WiKI库技术赋能
  • 编程练习---邮费计算
  • 计算机网络 THU 考研专栏简介
  • SDN控制器是什么?它在网络里的作用相当于什么?
  • Easy Rules 规则引擎详解
  • 数据结构:二叉树的表示方式(Representation of Binary Trees)
  • 基于MIMO的MATLAB预编码
  • 【Kubernetes知识点问答题】kubernetes 控制器
  • 力扣400:第N位数字
  • JavaScript性能优化30招
  • 「 CentOS7 安装部署k8s」
  • 2025新版 工业级定位系统哪家技术好?
  • 用3D打印重新定义骑行-中科米堆CASAIM自行车座椅个性化设计
  • 源网荷储充:零碳园区实现 “净零排放” 的系统解决方案
  • WinForm 简单用户登录记录器实现教程
  • 【3D图像技术分析及实现】3DGS与深度学习网络结合以实现跨场景迁移的研究调研
  • LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。