软件测试|详解 Pytest 参数化:简化测试用例的编写

简介

Pytest 是一个广泛使用的 Python 测试框架,它提供了丰富的功能来编写和执行测试用例。其中一个强大的特性是参数化,它允许我们通过一种简洁的方式运行多个输入参数的相似测试用例,从而减少冗余的代码。本文将详细介绍 Pytest 的参数化功能以及如何使用它来简化测试用例的编写。

参数化测试的优势

参数化测试允许我们为一个测试函数提供多组输入数据,以验证函数在不同输入条件下的行为。这有助于更全面地覆盖测试用例,减少重复代码,以及在代码变更时更容易维护测试。

参数化测试的基本用法

以下是使用 Pytest 参数化的基本步骤:

  1. 导入pytest
import pytest
  1. 创建测试函数,并在函数上使用 @pytest.mark.parametrize 装饰器,指定参数名称和参数值列表:
@pytest.mark.parametrize("input_value, expected_output", [(1, 2),(2, 4),(3, 6)
])
def test_multiply_by_two(input_value, expected_output):result = input_value * 2assert result == expected_output

在这个例子中,我们创建了一个名为 test_multiply_by_two 的测试函数。通过 @pytest.mark.parametrize 装饰器,我们传递了两个参数列表:input_valueexpected_output。每个元组中的值会分别传递给测试函数,使我们能够在多组输入条件下运行测试。

  1. 执行测试

我们可以在命令行中执行这个用例,也可以在界面中,点击绿色小三角形运行用例,如下图:

参数化测试案例

假设我们要测试一个函数,该函数接收两个数字并返回它们的和。我们可以通过参数化测试来验证函数的正确性:

def add(a, b):return a + b@pytest.mark.parametrize("a, b, expected_result", [(1, 2, 3),(0, 0, 0),(-1, 1, 0),
])
def test_add_function(a, b, expected_result):result = add(a, b)assert result == expected_result

在这个例子中,我们测试了不同的输入情况,以确保 add 函数在各种情况下都能正确运行。

使用参数化测试进行边界测试

参数化测试特别适用于边界测试,因为可以轻松地为边界值和边界值附近的值设置多组输入。例如,假设我们有一个函数来计算年龄组别:

def age_group(age):if age < 18:return "Underage"elif age >= 18 and age < 65:return "Adult"else:return "Senior"

我们可以通过参数化测试来测试各种年龄值的输出:

@pytest.mark.parametrize("age, expected_group", [(10, "Underage"),(20, "Adult"),(70, "Senior"),(18, "Adult"),(65, "Senior"),
])
def test_age_group_function(age, expected_group):result = age_group(age)assert result == expected_group

总结

Pytest 的参数化功能是一个强大的工具,可以显著简化测试用例的编写,同时还能更全面地覆盖不同的测试情况。本文介绍了 Pytest 参数化的基本用法,以及如何在测试函数中使用参数化装饰器来指定多组输入参数。无论是边界测试还是一般性测试,参数化测试都能帮助我们更好地编写测试用例,从而提高代码质量和可维护性。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

臻牧签约实在RPA,数据流通效率飙升!

臻牧是一家集研发、生产、销售、服务于一体的综合型公司&#xff0c;十年行业领跑&#xff0c;由“国民好演员”海清担任品牌代言人。陕西自有13000平米省级示范乳品工厂&#xff0c;牵手西交大成立小分子羊奶粉研究中心&#xff0c;每年千万投入持续攻坚科研&#xff0c;全线支…

Unicode编码:打破语言壁垒,实现无缝交流

Unicode编码是一种用于表示文本字符的编码系统&#xff0c;它旨在解决不同字符集之间相互兼容的问题&#xff0c;使各种语言和文化得以在数字世界中无缝交流。本文将从多个方面介绍Unicode编码的概念、原理及其在现实中的应用&#xff0c;为您揭示这个神秘编码背后的故事。 Un…

多个显示设备接入卡开机Logo问题分析报告

1 关键字 显示设备&#xff1b;HDMI&#xff1b;开机Logo&#xff1b; 2 问题描述 问题环境&#xff1a; 系统版本&#xff1a;OpenHarmony-3.2-Release 问题现象&#xff1a; 插入外接显示器&#xff0c;启动系统偶现卡开机Logo。 3 问题原因 3.1 正常机制 系统启动成…

汽车IVI中控开发入门及进阶(十二):手机投屏

前言: 汽车座舱有车载中控大屏、仪表/HUD多屏的显示能力,有麦克风/喇叭等车载环境更好的音频输入输出能力,有方控按键、旋钮等方便的反向控制输入能力,还有高精度的车辆数据等。但汽车座舱中控主机硬件计算能力升级迭代周期相对较长,汽车的应用和服务不够丰富。现在很多汽…

跟我学java|Stream流式编程——Stream 的终端操作

orEach 和 peek forEach和peek都是Stream API中用于遍历流中元素的操作方法&#xff0c;它们在处理流的过程中提供了不同的功能和使用场景。 forEach&#xff1a;forEach是一个终端操作方法&#xff0c;它接受一个Consumer函数作为参数&#xff0c;对流中的每个元素执行该函数…

电脑找不到d3dcompiler43.dll怎么修复,教你5个可靠的方法

d3dcompiler43.dll是Windows操作系统中的一个重要动态链接库文件&#xff0c;主要负责Direct3D编译器的相关功能。如果“d3dcompiler43.dll丢失”通常会导致游戏无法正常运行或者程序崩溃。为了解决这个问题&#xff0c;我整理了以下五个解决方法&#xff0c;希望能帮助到遇到相…

软件系统测试怎么进行?对软件产品起到什么作用?

软件系统测试是指通过测试软件的安装、配置、集成和功能等多个方面&#xff0c;以验证系统是否符合预期需求并达到预期目标的过程。在测试过程中&#xff0c;我们会通过数据输入、操作触发、接口调用、异常处理等手段对软件系统进行全面检测。 一、软件系统测试的进行步骤   …

Prometheus监控遇上报错invalid is not a valid start token

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 问题描述&#xff1a; 使用prometheus采集java应用的metric指标数据&#xff0c;在prometheus界面pod状态为down&#xff0c;报…

python爬取诗词名句网-三国演义,涉及知识点:xpath,requests,自动识别编码,range

页面源代码: <!DOCTYPE html> <html lang="zh"> <head><script src="https://img.shicimingju.com/newpage/js/all.js"></script><meta charset="UTF-8"><title>《三国演义》全集在线阅读_史书典籍_…

monocle2 fibroblast silicosis inmt

gc() #####安装archr包##别处复制 .libPaths(c("/home/data/t040413/R/x86_64-pc-linux-gnu-library/4.2","/home/data/t040413/R/yll/usr/local/lib/R/site-library", "/usr/local/lib/R/library","/home/data/refdir/Rlib/")).libPa…

Java接口的解析

在 Java 中&#xff0c;接口&#xff08;Interface&#xff09;是一种抽象类型&#xff0c;用于定义一组相关方法的契约。接口只包含方法的签名&#xff0c;而没有方法的实现。实现接口的类必须提供接口中定义的方法的具体实现。 以下是对 Java 接口的解析&#xff1a; 这只是…

构建安全可靠的系统:第二十一章到附录 A

第二十一章&#xff1a;建立安全和可靠性文化 原文&#xff1a;21. Building a Culture of Security and Reliability 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 作者&#xff1a;Heather Adkins 与 Peter Valchev&#xff0c;Felix Grbert&#xff0c;Ana Oprea…