Pytest精通指南(09)利用Fixture给函数设置别名


文章目录

      • 前言
      • 测试用例默认显示
        • 传递一个参数
        • 传递多个参数
      • 利用Fixture修改测试函数名称
        • 传递一个参数
        • 传递多个参数
      • 验证ids和params长度不一致
      • 修改Fixture函数名称


请添加图片描述

前言

pytest 中,@pytest.fixture 装饰器用于定义可以在多个测试函数中重用的设置和清理代码。

  • name 参数允许为fixture函数指定一个更易读、更有描述性的名称,这样在其他测试函数或fixture中引用它时就可以使用这个别名,而不是函数名本身。
  • ids 参数则是与 @pytest.fixture 装饰器一起使用的,用于给参数化测试中的每一组数据提供一个描述性的名称。这样,当运行测试时,每个测试实例在输出中会有一个更易于理解的名称,而不是默认生成的基于参数值的名称。

这样做的好处:

  • 可读性高:通过为 fixture 和参数化数据提供描述性的名称,测试代码和输出报告的可读性大大提高,使得开发和维护测试变得更加容易。
  • 明确意图:使用别名可以让其他开发者更容易理解测试的意图和目的,特别是当测试逻辑变得复杂时。
  • 组织性高:别名有助于组织和管理测试代码,特别是在大型项目中有许多测试函数和 fixture 时。
  • 调试方便:当测试失败时,描述性的名称可以帮助开发者更快地定位问题所在,而不需要逐个检查每个测试实例的参数值。

测试用例默认显示

传递一个参数

示例代码


import pytest@pytest.fixture(params=[111, 222, 333])
def data(request):  # 必须是request这个参数名return request.param  # 依次取列表中的每个值返回class TestClassCase05:def test_case(self, data):print(f"\n---test_case:data={data}")assert isinstance(data, int), "数据非int类型"

执行效果

请添加图片描述

传递多个参数

示例代码


import pytest@pytest.fixture(params=[111, 222, 333])
def data1(request):  # 必须是request这个参数名return request.param  # 依次取列表中的每个值返回@pytest.fixture(params=["aaa", "bbb", "ccc"])
def data2(request):  # 必须是request这个参数名return request.param  # 依次取列表中的每个值返回class TestClassCase05:def test_case(self, data1, data2):print(f"\n---test_case:data1={data1}, data2={data2}")assert isinstance(data1, int), "数据1非int类型"assert isinstance(data2, str), "数据2非str类型"

通过Test类执行效果

请添加图片描述

通过命令行执行效果

请添加图片描述

利用Fixture修改测试函数名称

传递一个参数

示例代码

import pytest# 这里需要注意:ids的长度需要与params传递的参数长度一致
@pytest.fixture(params=[111, 222, 333], ids=["item1", "item2", "item3"])
def data(request):  # 必须是request这个参数名return request.param  # 依次取列表中的每个值返回class TestClassCase05:def test_case(self, data):print(f"\n---test_case:data={data}")assert isinstance(data, int), "数据非int类型"

执行效果

请添加图片描述

传递多个参数

示例代码

# -*- coding: utf-8 -*-
"""
@WorkNo  : CS4224
@Author  : yangkai
@Email   : yangkai1@dev.bosc
@Project : PythonWorkspace
@Module  : test_case_05.py
@DateTime: 2024/4/3 08:30
"""import pytest# 这里需要注意:ids的长度需要与params传递的参数长度一致
@pytest.fixture(params=[18, 19, 20], ids=["age=18", "age=19", "age=20"])
def age(request):  # 必须是request这个参数名return request.param  # 依次取列表中的每个值返回@pytest.fixture(params=["张三", "李四", "王五"], ids=["name=zhangsan", "name=lisi", "name=wangwu"])
def name(request):  # 必须是request这个参数名return request.param  # 依次取列表中的每个值返回class TestClassCase05:def test_case(self, age, name):print(f"\n---test_case:age={age}, name={name}")assert age >= 18, "年龄不可低于18岁"assert name is not None, "姓名不可为None"

通过Test类执行效果

请添加图片描述

通过命令行执行效果

请添加图片描述

验证ids和params长度不一致

示例代码

import pytest# 这里需要注意:ids的长度需要与params传递的参数长度一致
@pytest.fixture(params=[111, 222, 333], ids=["item1", "item2"])
def data(request):  # 必须是request这个参数名return request.param  # 依次取列表中的每个值返回class TestClassCase05:def test_case(self, data):print(f"\n---test_case:data={data}")assert isinstance(data, int), "数据非int类型"

验证结果

请添加图片描述

修改Fixture函数名称

利用name参数给被@pytest.fixture修饰的函数取别名

import pytest# 这里需要注意:ids的长度需要与params传递的参数长度一致
@pytest.fixture(params=["张三", "李四", "王五"],ids=["name=zhangsan", "name=lisi", "name=wangwu"],name="names")
def data(request):  # 必须是request这个参数名return request.param  # 依次取列表中的每个值返回class TestClassCase05:def test_case(self, data):print(f"\n---test_case:data={data}")assert data is not None, "姓名不可为None"

执行效果

请添加图片描述

这时,我们将依赖的fixture函数名称修改成names别名

结果:程序运行正常,但是没有得到实际的数据,data被识别为可调用函数

请添加图片描述

结论,当给fixture设置别名时,引用时需要使用别名

请添加图片描述

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

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

相关文章

虚拟机下CentOS7开启SSH连接

虚拟机下CentOS7开启SSH连接 自己在VMware中装了CentOS 6.3,然后主机(或者说xshell)与里面的虚拟机连不通,刚学习,一头雾水,查了半天,也不知道怎么弄。 在虚拟机(Vmware Workstatio…

OSCP靶场--PayDay

OSCP靶场–PayDay 考点(公共exp文件上传密码复用sudo -l all提权) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC 192.168.153.39 -p- -Pn --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-13 04:52 EDT Nmap scan report for 192…

C语言 | 字符函数和字符串函数

目录: 1. 字符分类函数 2. 字符转换函数 3. strlen的使用和模拟实现 4. strcpy的使用和模拟实现 5. strcat的使用和模拟实现 6. strcmp的使用和模拟实现 7. strncpy函数的使用 8. strncat函数的使用 9. strncmp函数的使用 10. strstr的使用 11. strtok函…

智慧公厕:城市管理的一大创新

公共厕所作为城市基础设施的重要组成部分,不仅仅是提供方便的厕所,更是城市管理的一项创新。随着科技的发展,智慧公厕应运而生。通过物联网、大数据、云计算、网络通信、自动化控制等技术,智慧公厕实现了对公厕内部人体活动状态、…

【算法刷题day22】Leetcode:235. 二叉搜索树的最近公共祖先、701. 二叉搜索树中的插入操作、450. 删除二叉搜索树中的节点

文章目录 Leetcode 235. 二叉搜索树的最近公共祖先解题思路代码总结 Leetcode 701. 二叉搜索树中的插入操作解题思路代码总结 Leetcode 450. 删除二叉搜索树中的节点解题思路代码总结 草稿图网站 java的Deque Leetcode 235. 二叉搜索树的最近公共祖先 题目:235. 二…

JD抓包 | 安卓app抓包

去年11月份左右搞过一次安卓抓包, 搞了很久试了很多方法, 才弄好. 时隔半年, 安卓抓包依然是令我头疼的问题 这次简单记录一下过程(细节太多我也说不清) JD的有效信息接口通常是以下这样的, 其他的接口并没有返回太多"有用"的信息 https://api.m.jd.com/client.act…

Composite 组合

意图 将对象组合成树形结构以表示“部分-整体”的层级结构。Composite使得用户对单个对象和组合对象的使用具有一致性。 结构 其中: Component为组合中的对象声明接口;在适当情况下实现所有类共有接口的默认行为;声明一个接口用于访问和管…

Java基础(二)-- 面向对象

文章目录 第二章、面向对象一、类和对象1、基本概念1)什么是对象2)什么是面向对象3)什么是类4)什么是对象的属性和方法5)类和对象的关系 2、单一职责原则3、对象实例化1)Java内存管理之堆和栈 4、构造方法5…

【LeetCode: 705. 设计哈希集合 + 数据结构设计】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Qt快速入门(MV架构之TableView + QStandardItemModel + 自定义代理小案例)

Qt快速入门(MV架构之TableView QStandardItemModel 自定义代理小案例) 关于MV架构的简单介绍 在Qt框架中,代理(Delegate)、模型(Model)和视图(View)之间的关系构成了…

【数据工具】ArcGIS批量出图工具箱

工具下载链接:数据下载链接 我们在使用Arcgis制图的过程中,经常会遇到需要大量出图的情况,如何将做好的图批量导出jpg是一件令人头疼的问题。 今天小编就给大家分享俩个ArcGIS批量出图的工具箱,一个可以批量导出图层为jpg&#…

Java-Scanner类进阶+题目

Scanner进阶 接收整数数据时: 接收小数数据时: 例子: 可以先这样弄出scanner的框架: 未完待续... ...

科技论文和会议录制高质量Presentation Video视频方法

一、背景 机器人领域,许多高质量的期刊和会议(如IEEE旗下的TRO,RAL,IROS,ICRA等)在你的论文收录后,需要上传一个Presentation Video材料,且对设备兼容性和视频质量有较高要求&#…

2024年DTC的回顾与思考

刚结束了2024的数据库技术嘉年华 这是我从2017年开始就参加的技术大会。中途因为疫情的耽误。正常来说我是连续的。知道我的朋友都知道我习惯炫耀一下。 按照惯例,此时此刻群友都在写大会回顾。只是有几个不讲武德的人已经发送了。下面有主观和客观的分析。 主观上…

手机银行客户端框架之TMF框架介绍

腾讯移动开发平台(Tencent Mobile Framework)整合了腾讯在移动产品中开发、测试、发布和运营的技术能力,为企业提供一站式、覆盖全生命周期的移动端技术平台。核心服务包括移动客户端开发组件、H5容器、灰度发布、热更新、离线包、网关服务、…

Vol.41 SEO基本术语解释

1.TDK TDK:即标题、描述、关键词;TDK是网站的基本属性,对SEO非常重要,可以帮助搜索引擎了解你的网站; T:title 谷歌建议不超过70个字符 D:description 谷歌建议不超过150个字符 K&#xff1…

element-ui中el-radio-group组件绑定点击事件触发多次的解决办法

1、需求 电商首页需求,需要做个单选框,然后点击选中切换图标方向及更换价格升倒序,如下图: 从官网文档看,单选框支持change event,使用click加载按钮处不会触发选中 但是使用 click.native 事件不做处理…

ACID模型是什么

ACID模型是什么 ACID模型是数据库管理系统中保证事务处理安全性的一组特性。ACID是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)四个英文单词的…

开源博客项目Blog .NET Core源码学习(15:App.Hosting项目结构分析-3)

本文学习并分析App.Hosting项目中前台页面的关于本站页面和点点滴滴页面。 关于本站页面 关于本站页面相对而言布局简单,与后台控制器类的交互也不算复杂。整个页面主要使用了layui中的面包屑导航、选项卡、模版、流加载等样式或模块。   面包屑导航。使用layui…

初探vercel托管项目

文章目录 第一步、注册与登录第二步、本地部署 在个人网站部署的助手vercel,支持 Github部署,只需简单操作,即可发布,方便快捷! 第一步、注册与登录 进入vercel【官网】,在右上角 login on,可登…