首页 > 其他分享 >软件测试/测试开发/全日制|Pytest参数化神器,pytest.mark.parametrize()使用

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

时间:2024-01-05 19:00:51浏览次数:22  
标签:parametrize py pytest 参数 par1 test TestParams 软件测试

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

前言

当我们要使用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() 装饰器接收两个参数,第一个参数是以字符串的形式标识用例函数的参数,第二个参数以列表或元组的形式传递测试数据。

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

多个传参

示例代码如下:

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等文件来实现更高层次的参数化和数据驱动测试,希望本文能够帮到大家!


标签:parametrize,py,pytest,参数,par1,test,TestParams,软件测试
From: https://blog.51cto.com/u_15640304/9116945

相关文章

  • Pytest07-pytest.ini配置文件
    1.pytest配置文件固定名称:pytest.ini作用域:当前目录及子目录具体配置功能见下:[pytest]#01把命令行参数自动添加到这里addopts=-s-v--html=./report/report2023.html#02指定执行的用例的目录testpaths=./script#03修改默认的测试文件名规则python_files=au......
  • Python+Requests+PyTest+Excel+Allure 接口自动化测试实战
    本文主要介绍了Python+Requess+PyTest+Excel+Allure接口自动化测试实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit......
  • Pytest06-pytest的setup和teardown函数
    高清B站视频链接pytest的setup和teardown函数用例前置和后置#类外面setup_module/teardown_module:在当前文件中,所有的用例执行之前以及之后执行setup_function/teardown_function:在每个测试函数之前以及之后执行setup/teardown:在每个测试函数之前以及之后执行#类里面......
  • 软件测试/测试开发全日制培训|Pytest跳过用例和失败重试
    前言在我们日常进行自动化测试时,经常会遇到功能阻塞,未实现或者环境有问题等等原因,一些用例执行不了,如果我们注释掉或删除掉这些测试用例,后面可能还要进行恢复操作,这个时候pytest的跳过测试功能就能帮助我们,先跳过,等到问题解决时,恢复执行即可;同时我们还有可能会遇到需要对失败用例重......
  • 软件测试/测试开发|什么是Python,我们为什么选择Python?
    简介要说最近几年,哪个编程语言是最受欢迎的?学习人数最多的?那非Python莫属,加上人工智能时代的到来,Python热度就更加持续,那么Python为什么能够超越Java和C语言,成为现在最受欢迎的语言呢?本文就带大家一探究竟。Python简介Python发展背景Python是一种高级编程语言,由荷兰人吉多·范罗苏......
  • 软件测试/测试开发|什么是pytest,我们为什么选择pytest?
    前言作为一个程序猿,免不了要为自己写的代码做单元测试,因为我是一个Pythoner,所以最开始用的是unittest测试框架,但是我的使用体验很不好,后面我了解到了pytest,简直能把uinttest秒成渣,在这里和大家一起分享下pytest使用经验,本文先来给大家介绍一下pytest以及它如何安装,运行一下最简单的......
  • 全日制软件测试开发 | 测试管理圆桌讨论会精彩时刻回顾(上)
    很高兴大家来参加测试管理圆桌讨论会,本次我们邀请了4位嘉宾,他们的工作履历几乎涵盖了目前互联网行业的头部公司。嘉宾介绍Angelia:资深的项目经理,多次搭建研发团队,目前在外企做PMO成员。强哥:曾在阿里担任测试负责人,负责过很多大型项目测试工作,在技术和管理方面都有很深的造诣。涛哥......
  • 软件测试/测试开发|一文告诉你Python列表相关操作
    列表是Python中最常用的数据类型之一。它是一种有序、可变,异构的数据集合,可以存储多个不同类型的元素。列表的特点列表是Python中的一种数据结构,具有以下特点:有序性:列表中的元素按照添加的顺序进行存储,每个元素都有一个对应的索引,可以通过索引访问和操作列表中的元素。可变性:列......
  • pytest自动化测试中的fixture的声明和调用
    1.fixture的声明我们使用@pytest.fixture()来声明fixture函数。fixture()即可无参数进行声明,也可以带参数声明。示例1:@pytest.fixture()无参数进行声明[email protected]#fixture()未带任何参数,声明一个fixture函数deffixture_demo():print("这个是一......
  • Python中pytest命令行实现环境切换
    前言在自动化测试过程中经常需要在不同的环境下进行测试验证,所以写自动化测试代码时需要考虑不同环境切换的情况。pytest钩子函数pytest_addoption可以很好帮我们解决这个痛点。pytest_addoption(parser, pluginmanager)注册argparse样式选项和ini样式配置值,在测试运行开始时调用......