pytest(三)——参数化@pytest.mark.parametrize

news2024/10/5 11:37:38

目录

前言

参数化场景

实际Web UI自动化中的开发场景,比如是一个登录框

 parametrize单参数

“笛卡尔积”,多个参数化装饰器

重点知识

参考文献


前言

  •  @pytest.mark.parametrize 允许在测试函数或类中定义多组参数和fixtures
  •  pytest_generate_tests 允许定义自定义参数化方案或扩展(拓展)

参数化场景

        只有测试数据和期望结果不一样,但操作步骤是一样的测试用例可以用上参数化;可以看看下面的栗子

未参数化的代码

def test_1():
    assert 3 + 5 == 9


def test_2():
    assert 2 + 4 == 6


def test_3():
    assert 6 * 9 == 42

可以看到,三个用例都是加法然后断言某个值,重复写三个类似的用例有点冗余 

利用参数化优化之后的代码

@pytest.mark.parametrize("test_input,expected", [("3+5", 8), ("2+4", 6), ("6*9", 42)])
def test_eval(test_input, expected):
    print(f"测试数据{test_input},期望结果{expected}")
    assert eval(test_input) == expected

实际Web UI自动化中的开发场景,比如是一个登录框

  1. 你肯定需要测试账号空、密码空、账号密码都为空、账号不存在、密码错误、账号密码正确等情况
  2. 这些用例的区别就在于输入的测试数据和对应的交互结果
  3. 所以我们可以只写一条登录测试用例,然后把多组测试数据和期望结果参数化,节省很多代码量

 parametrize单参数

        参数化parametrize可以组装测试数据,在测试前定义好测试数据,并在测试用例中使用,提高测试效率。parametrize单参数单次循环的基本语法:

import pytest
@pytest.mark.parametrize("name", ["张三", "李四", "王五"])
def test_parametrize(name):
    print(f"我是:{name}")

 

parametrize读取json、excel、yaml

excelpath=r"D:\workplace20240513\pythonbase\python测试学习\01pytest学习\demo6-运行所有的案例信息\parametrizetest\test_data.xlsx"
def load_excel_data(file_path):
    df = pd.read_excel(file_path)
    return list(df.itertuples(index=False, name=None))

# 读取 YAML 文件
yamlpath=r"D:\workplace20240513\pythonbase\python测试学习\01pytest学习\demo6-运行所有的案例信息\parametrizetest\test_data.yaml"
def load_yaml_data(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        data = yaml.safe_load(file)
    return data['names']

# 读取 JSON 文件
jsonpath=r"D:\workplace20240513\pythonbase\python测试学习\01pytest学习\demo6-运行所有的案例信息\parametrizetest\test_data.json"
def load_json_data(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        data = json.load(file)
    return data['names'] 

'''
        在这里我试图从yaml文件中读取数据,然后实现参数的传递
    '''
    @pytest.mark.parametrize("name",load_yaml_data(yamlpath))
    def test_parametrize_yaml(self, name):
        print(f"我是:{name}")

    '''
           在这里我试图从json文件中读取数据,然后实现参数的传递
    '''
    @pytest.mark.parametrize("name", load_json_data(jsonpath))
    def test_parametrize_json(self, name):
        print(f"我是:{name}")

    # 从 Excel 文件中读取参数并传入多个参数
    @pytest.mark.parametrize("username,password,expected_status", load_excel_data(excelpath))
    def test_parametrize_excel(self,username, password, expected_status):
        print(f"用户名: {username}, 密码: {password}, 预期状态码: {expected_status}")

 yaml、json、excel格式


“笛卡尔积”,多个参数化装饰器

import pytest
# 笛卡尔积,组合数据
data_1 = [1, 2, 3]
data_2 = ['a', 'b']
@pytest.mark.parametrize('a', data_1)
@pytest.mark.parametrize('b', data_2)
def test_parametrize_1(a, b):
    print(f'笛卡尔积 测试数据为 : {a},{b}')

 

重点知识
  • 一个函数或一个类可以装饰多个 @pytest.mark.parametrize 
  • 这种方式,最终生成的用例数是n*m,比如上面的代码就是:参数a的数据有3个,参数b的数据有2个,所以最终的用例数有3*2=6条
  • 当参数化装饰器有很多个的时候,用例数都等于n*n*n*n*...

参考文献

Pytest进阶之fixture的使用(超详细)_pytest fixture用法-CSDN博客

pytest之fixture用法01:fixture详解-百度开发者中心

Pytest系列(9) - 参数化@pytest.mark.parametrize - 小菠萝测试笔记 - 博客园

pytest进阶参数化用法01:parametrize详解_pytest parametrize-CSDN博客

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

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

相关文章

利士策分享,探寻中华民族的精神纽带

利士策分享,探寻中华民族的精神纽带 在历史的长河中,中华民族以其独特的文化魅力和坚韧不拔的民族精神,屹立于世界民族之林。 这份力量,源自何处?或许,正是那份纯真的情,如同纽带一般&#xff…

带环链表找入环结点及结论证明

文章目录 前言1.带环链表1.1 带环链表介绍1.2 判断链表是否带环代码实现1.4 入环结点相关问题1.4.1 结论证明1.4.2 找入环结点代码实现1.4.2.1 代码实现11.4.2.2 代码实现2 总结 前言 1.带环链表 1.1 带环链表介绍 如下图中题目所述,带环结点尾结点的next指针域存…

Llama 3.2 视觉能力评估

Meta 发布了 Llama 3 模型的新版本;这次,有四种模型用于不同的目的:两个多模态模型,Llama 3.2 11B 和 90B,以及两个用于边缘设备的小型语言模型,1B 和 3B。 这些是 Meta AI 的首批多模态模型,基…

反射第二弹:用注册器动态注册(用自定义的注解标注的)策略,实现策略模式的设计

引言 曾经有人问我,假如有一个业务或者数据处理逻辑,会根据甲方客户繁杂的业务需求,而动态变化,该怎么处理,具体怎么实现? 将所有策略strategy都写出来,然后放入一个hashMap,根据不同…

VTK+其他布尔运算库

文章目录 一、vtkBool1.1 安装1.2 使用1.3 效果 二、CGAL 本文的主要内容:VTK内置的布尔运算类具有稳定性差、计算时间长等缺点,为了避免使用VTK内置的布尔运算,本文简单介绍了两个比较实用的库用于替代,主要涉及vtkBool和CGAL库的…

私域高效管理指南:提升用户粘性的高效法则

随着越来越多的品牌将目光投向私域流量,如何高效地管理这些用户并提升他们的粘性,成为了营销领域的重要课题。 下面,就分享一些私域高效管理的实用法则,帮助你在私域管理中游刃有余。 1、用户分层 对于新用户而言,他…

redhat7.7 linux 网络配置文件

一、为什么虚拟网卡配置文件是ens33 变更目录至网络脚本(network-scripts)文件夹,发现网络配置文件名称为“ifcfg-ens33” cd /etc/sysconfig/network-scripts ls扩展:“ifcfg-ens33”文件下面还有一个“ifcfg”前缀的文件&…

LabVIEW程序怎么解决 Bug?

在LabVIEW开发过程中,发现和解决程序中的Bug是确保系统稳定运行的关键环节。由于LabVIEW采用图形化编程方式,Bug的排查和处理与传统编程语言略有不同。以下是解决LabVIEW程序中Bug的常见方法和技巧,涵盖从问题发现到解决的多个步骤和角度&…

LabVIEW裂纹深度在线监测系统

随着铁路运输技术的快速发展,火车安全问题成为重中之重,尤其是轮面裂纹的检测和管理。裂纹的出现可能导致严重的列车事故,因此,建立可靠的在线监测系统,实时掌握裂纹情况,对保障铁路运输安全至关重要。 La…

快速构建 yolo 训练集 测试集

在机器学习工作流程中,数据处理是一个关键步骤。通常我们会使用不同的工具来标注数据,而每种工具都有其特定的格式。在这篇文章中,我们将展示如何从数据集中快速抽取样本,构建训练集和测试集。 YOLO简介 YOLO(You On…

响应重定向

响应重定向 重定向也可以跳转servlet,也可以跳转页面 (功能与请求转发类似) 使用的方法: resp.sendRedirect("路径"); 测试: 改造登录Servlet,重定向到ListServlet ps: 可以跳转到ListServlet,但是因为请求域数据不能共享,可能会报错 特点 重定向是响应重定向,是浏…

大语言模型的微调方法_大语言模型六种微调方法,零基础入门到精通,收藏这一篇就够了

01 引言 自2018年BERT发布以来,“预训练微调”成为语言模型的通用范式。以ChatGPT为代表的大语言模型针对不同任务构造Prompt来训练,本质上仍然是预训练与微调的使用范式。千亿规模的参数微调需要大量算力,即使提供了预训练的基座模型&…

jQuery——文档的增删改

1、添加 / 替换元素 append(content):向当前匹配的所有元素内部的最后插入指定内容prepend(content):向当前匹配的所有元素内部的最前面插入指定内容before(content):…

一、机器学习算法与实践_06迭代法和KMeans、线性回归、逻辑回归算法笔记

0 迭代法 迭代法不仅是机器学习、深度学习的核心,也是整个人工智能领域的重要概念,其对于算法的设计和实现至关重要 0.1 适合场景 对于不能一次搞定的问题,将其分成多步来解决,逐步逼近解决方案 0.2 典型应用 KMeans 聚类算法…

开放式耳机哪个品牌好?适合运动的开放式蓝牙耳机分享

如今,开放式耳机的购买量呈现出持续上升的趋势,变得越来越多。而随着人们对音频设备需求的不断提升以及对舒适佩戴体验和自然聆听感受的日益追求,开放式耳机也以其独特的优势逐渐走进大众的视野,成为众多消费者的新宠。 在各大电…

中文llama3仿openai api实战

课程介绍 本次课属于【大模型本地部署应用】,基于Chinese-LLaMA-Alpaca-3(GitHub - ymcui/Chinese-LLaMA-Alpaca-3: 中文羊驼大模型三期项目 (Chinese Llama-3 LLMs) developed from Meta Llama 3)项目,介绍如何封装一个私有的兼容…

谷歌收录批量查询,谷歌收录批量查询的简单方法

谷歌收录批量查询是网站管理员和SEO优化人员常见的需求,以下提供几种简单且高效的批量查询方法: 一、使用Google Search Console(谷歌搜索控制台) 注册并验证网站: 首先,确保你已经在Google Search Conso…

常用正则匹配中国手机号码

正则表达式匹配中国的手机号码。 我可以提供一些匹配中国手机号码的常用正则表达式: 仅匹配11位数字的手机号码:^1[3456789]\d{9}$匹配以1开头的11位数字手机号码:^1\d{10}$更宽松的匹配规则,允许0开头的手机号码:^(?:0|86|+?86)?1[3-9]\d{9}$ 这些正则表达式可…

Java基础知识总结(超详细整理)

Java基础知识总结(超详细整理) Java语言的特点 1.面向对象 面向对象(OOP)就是Java语言的基础,也是Java语言的重要特性。面向对象的概念:生活中的一切事物都可以被称之为对象,生活中随处可见的事物就是一个对象&#…

CMSIS-RTOS V2封装层专题视频,一期视频将常用配置和用法梳理清楚,适用于RTX5和FreeRTOS(2024-09-28)

【前言】 本期视频就一个任务,通过ARM官方的CMSIS RTOS文档,将常用配置和用法给大家梳理清楚。 对于初次使用CMSIS-RTOS的用户来说,通过梳理官方文档,可以系统的了解各种用法,方便大家再进一步的自学或者应用&#x…