软件测试/测试开发/全日制|Pytest参数化神器,pytest.mark.parametrize()使用

简介: 软件测试/测试开发/全日制|Pytest参数化神器,pytest.mark.parametrize()使用

image.png

前言

当我们要使用pytest输入多个数据对一个功能进行测试时,如果写多个测试用例的话,那就完全体现不出通过代码来执行测试的优势了,这个时候,就轮到pytest的参数化功能闪亮登场了。所谓参数化,就是就是把测试过程中的数据提取出来,通过参数传递不同的数据来驱动用例运行。其实也就是数据驱动的概念。本文就给大家介绍一下pytest的参数化和数据驱动。

参数化方式

unittest中,我们使用ddt库配合unittest实现数据驱动,在pytest中并不需要额外的库,通过pytest.mark.parametrize()即可实现参数化。parametrize()的第一个参数是用逗号分割的字符串列表,第二个参数是一个值列表。

pytest有三种传参方式:

  • @pytest.mark.parametrize() 通过装饰器方式进行参数化(最常使用)
  • pytest.fixture()方式进行参数化,fixture装饰的函数可以作为参数传入其他函数
  • conftest.py文件中存放参数化函数,可作用于模块内的所有测试用例

单个传参

示例代码如下:

import pytest

def add(a,b):
    return a+b

class TestParams:

    @pytest.mark.parametrize('a',[1,2,3,4,5])
    def test_par1(self,a):
        assert add(a,1)==a+1

执行结果如下:

============================= test session starts =============================
collecting ... collected 5 items

test_c.py::TestParams::test_par1[1] PASSED
test_c.py::TestParams::test_par1[2] PASSED
test_c.py::TestParams::test_par1[3] PASSED
test_c.py::TestParams::test_par1[4] PASSED
test_c.py::TestParams::test_par1[5] PASSED

============================== 5 passed in 0.04s ==============================

注:@pytest.mark.parametrize() 装饰器接收两个参数,第一个参数是以字符串的形式标识用例函数的参数,第二个参数以列表或元组的形式传递测试数据。

image.png

多个传参

示例代码如下:

import pytest

def add(a,b):
    return a+b

class TestParams:

    @pytest.mark.parametrize('a,b,c',[[1,2,3],[3,4,5],[1,3,4],[2,5,7]])
    def test_par1(self,a,b,c):
        assert add(a,b)==c

运行结果如下:

============================= test session starts =============================
collecting ... collected 4 items

test_c.py::TestParams::test_par1[1-2-3] PASSED
test_c.py::TestParams::test_par1[3-4-5] FAILED
testcase2\test_c.py:19 (TestParams.test_par1[3-4-5])
7 != 5

Expected :5
Actual   :7
<Click to see difference>

self = <testcase2.test_c.TestParams object at 0x000001789DB13108>, a = 3, b = 4
c = 5

    @pytest.mark.parametrize('a,b,c',[[1,2,3],[3,4,5],[1,3,4],[2,5,7]])
    def test_par1(self,a,b,c):
>       assert add(a,b)==c
E       assert 7 == 5
E        +  where 7 = add(3, 4)

test_c.py:22: AssertionError





test_c.py::TestParams::test_par1[1-3-4] PASSED
test_c.py::TestParams::test_par1[2-5-7] PASSED

========================= 1 failed, 3 passed in 0.06s =========================

注:有多个参数时,参数之间要用逗号分隔,参数名称和个数要一一对应

总结

参数化测试是pytest中一个强大的功能,可以帮助开发者更高效地编写测试用例,提高代码覆盖率,并简化测试代码。后续我们还将介绍使用yaml等文件来实现更高层次的参数化和数据驱动测试,希望本文能够帮到大家!

相关文章
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
517 11
|
机器学习/深度学习 人工智能 监控
软件测试中的自动化测试策略与最佳实践##
在当今快速发展的软件行业中,自动化测试已成为确保软件质量和加速产品上市的关键工具。本文将探讨自动化测试的重要性,分析不同类型的自动化测试工具和框架,并深入讨论实施自动化测试的最佳实践。通过案例研究和数据分析,我们将揭示如何有效整合自动化测试到软件开发生命周期中,以及它如何帮助团队提高测试效率和覆盖率。 ##
272 1
|
存储 测试技术 API
pytest接口自动化测试框架搭建
通过上述步骤,我们成功搭建了一个基于 `pytest`的接口自动化测试框架。这个框架具备良好的扩展性和可维护性,能够高效地管理和执行API测试。通过封装HTTP请求逻辑、使用 `conftest.py`定义共享资源和前置条件,并利用 `pytest.ini`进行配置管理,可以大幅提高测试的自动化程度和执行效率。希望本文能为您的测试工作提供实用的指导和帮助。
1819 15
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。
|
数据管理 测试技术 持续交付
软件测试中的自动化测试策略与最佳实践
在当今快速迭代的软件开发环境中,自动化测试已成为确保软件质量和加速产品上市的关键手段。本文旨在探讨软件测试中的自动化测试策略,包括选择合适的自动化测试工具、构建有效的自动化测试框架以及实施持续集成和持续部署(CI/CD)。通过分析自动化测试的最佳实践,本文为软件开发团队提供了一系列实用的指南,以优化测试流程、提高测试效率并减少人为错误。
424 4
|
监控 测试技术 定位技术
探索软件测试中的自动化测试框架选择与实施###
本文不概述传统意义上的摘要内容,而是直接以一段对话形式引入,旨在激发读者兴趣。想象一下,你是一名勇敢的探险家,面前摆满了各式各样的自动化测试工具地图,每张地图都指向未知的宝藏——高效、精准的软件测试领域。我们将一起踏上这段旅程,探讨如何根据项目特性选择合适的自动化测试框架,并分享实施过程中的关键步骤与避坑指南。 ###
236 4
|
测试技术 持续交付 数据安全/隐私保护
软件测试的艺术与科学:探索自动化测试框架
在软件开发的世界中,测试是确保产品质量的关键环节。本文将深入探讨自动化测试框架的重要性和实现方法,旨在为读者揭示如何通过自动化测试提升软件测试效率和准确性。我们将从测试的基本概念出发,逐步引导读者了解自动化测试框架的设计和实施过程,以及如何选择合适的工具来支持测试活动。文章不仅提供理论知识,还将分享实用的代码示例,帮助读者将理论应用于实践。无论你是测试新手还是经验丰富的开发者,这篇文章都将为你打开一扇通往更高效、更可靠软件测试的大门。
213 1
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
9月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1321 23
|
11月前
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
1715 24