pytest.mark.parametrize()基本用法

@pytest.mark.parametrize()基本用法

数据驱动 :其实就是把我们测试用例的数据放到excel,yaml,csv,mysql,然后通过去改变数据达到改变测试用例的执行结果 。
@pytest.mark.parametrize(args_name,args_value)
args_name:参数名,字符串,多个参数中间用逗号隔开
args_value:参数值(列表,元组,字典列表,字典元组),有多个值用例就会执行多少次,是list,多组数据用元祖类型;传三个或更多参数也是这样传。list的每个元素都是一个元组,元组里的每个元素和按参数顺序一一对应

例如:
1、传一个参数 @pytest.mark.parametrize('参数名',list) 进行参数化
2、传两个参数@pytest.mark.parametrize('参数名1,参数名2',[(参数1_data[0], 参数2_data[0]),(参数1_data[1], 参数2_data[1])]) 进行参数化

第一种方式:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/4/6 11:37
# @File    : test_class.py
import pytest


class TestApi:

    def test_01_jame(self):
        print('\n测试JAME')

    @pytest.mark.parametrize('args', ['张三', '李四', '王五'])
    def test_02_lucy(self, args):
        print('\n测试Lucy')
        print('---------'+str(args))


if __name__ == '__main__':
    pytest.main(['-vs', '--html=../report/report.html'])

运行结果 :

testcase/test_mark.py::TestApi::test_01_jame
测试JAME
PASSED
testcase/test_mark.py::TestApi::test_02_lucy[\u5f20\u4e09]
测试Lucy
---------张三
PASSED
testcase/test_mark.py::TestApi::test_02_lucy[\u674e\u56db]
测试Lucy
---------李四
PASSED
testcase/test_mark.py::TestApi::test_02_lucy[\u738b\u4e94]
测试Lucy
---------王五
PASSED

第二种方式:跟unittest的ddt里边的@unpack解包一样

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/4/6 11:37
# @File    : test_class.py
import pytest


class TestApi:

    def test_01_jame(self):
        print('\n测试JAME')

    @pytest.mark.parametrize('name,age', [['小明', '18'], ['王林', '16']])
    def test_02_lucy(self, name, age):
        print('\n测试Lucy')
        print(name, age)


if __name__ == '__main__':
    pytest.main(['-vs', '--html=../report/report.html'])
testcase/test_mark.py::TestApi::test_01_jame
测试JAME
PASSED
testcase/test_mark.py::TestApi::test_02_lucy[\u5c0f\u660e-18]
测试Lucy
小明 18
PASSED
testcase/test_mark.py::TestApi::test_02_lucy[\u738b\u6797-16]
测试Lucy
王林 16
PASSED

使用另一种方式:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/4/6 11:37
# @File    : test_class.py
import pytest


class TestApi:

    def test_01_jame(self):
        print('\n测试JAME')

    @pytest.mark.parametrize('args', [['小明', '18'], ['王林', '16']])
    def test_02_lucy(self, args):
        print('\n测试Lucy')
        print(args)


if __name__ == '__main__':
    pytest.main(['-vs', '--html=../report/report.html'])

运行结果:

testcase/test_mark.py::TestApi::test_01_jame
测试JAME
PASSED
testcase/test_mark.py::TestApi::test_02_lucy[args0]
测试Lucy
['小明', '18']
PASSED
testcase/test_mark.py::TestApi::test_02_lucy[args1]
测试Lucy
['王林', '16']
PASSED

 

  • 19
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: `@pytest.mark.parametrize()` 是 Pytest 中的一个装饰器,用于为测试函数提供参数化数据。 基本用法如下: ```python import pytest @pytest.mark.parametrize("input1, input2, expected_output", [ (1, 2, 3), (2, 3, 5), (3, 4, 7), (4, 5, 9) ]) def test_addition(input1, input2, expected_output): assert input1 + input2 == expected_output ``` 在上面的例子中,我们定义了一个名为 `test_addition` 的测试函数,并用 `@pytest.mark.parametrize()` 装饰器为该函数提供了参数化的数据。参数化数据由一组元组构成,每个元组对应一个测试用例,其中包含了输入参数和期望输出参数。 在运行测试时,pytest 会根据提供的参数组合,逐一执行测试函数,并将每个测试用例的结果与期望值进行比较,从而验证代码的正确性。 需要注意的是,在参数化时,要确保传入的参数数量与测试函数的参数数量一致。如果参数数量不匹配,pytest 会抛出异常。 ### 回答2: @pytest.mark.parametrize() 是 pytest 中的一个装饰器,用于参数化测试函数。参数化测试是一种测试方法,在进行多次测试时,通过传入不同的参数来运行相同的测试函数。 使用 @pytest.mark.parametrize() 装饰器时,需要将参数化的测试数据以参数的形式传入装饰器中。这些参数可以是一个值,也可以是一个列表,甚至是一个元组。每一组参数都会作为一个测试用例来执行测试函数。 下面是 @pytest.mark.parametrize() 的基本用法示例: ```python import pytest @pytest.mark.parametrize('name, age', [('Alice', 25), ('Bob', 30), ('Carl', 35)]) def test_person(name, age): assert isinstance(name, str) assert isinstance(age, int) ``` 上面的示例中,`name` 和 `age` 参数分别代表人物的姓名和年龄。`@pytest.mark.parametrize('name, age', [('Alice', 25), ('Bob', 30), ('Carl', 35)])` 这行代码指定了三个测试用例,分别是 ('Alice', 25)、('Bob', 30) 和 ('Carl', 35)。 在执行测试时,pytest 将会创建三个测试用例并分别将对应的参数传入测试函数 test_person() 中。每个测试用例都会执行两个断言语句来验证参数的类型。 运行上述测试函数时,pytest 会打印出每个测试用例的执行结果,如果断言失败,还会给出具体的错误信息。 ### 回答3: @pytest.mark.parametrize() 是 pytest 框架中的一个装饰器,主要用于在测试函数中传递参数和参数化测试。 具体的用法如下: 1. 导入 pytestpytest.mark 模块: ``` import pytest import pytest.mark ``` 2. 使用 @pytest.mark.parametrize() 装饰器来定义参数化的测试函数。 ``` @pytest.mark.parametrize("参数名", 参数列表) def test_function(参数名): # 测试逻辑 ``` 其中,"参数名" 是参数的名称,参数列表可以是一个列表或元组。 3. 参数列表是一个包含多个参数值的列表或元组,每个参数值都是一个独立的测试用例。 ``` @pytest.mark.parametrize("param", [1, 2, 3]) def test_function(param): assert param > 0 ``` 在上述的示例中,test_function() 函数将被执行三次,分别使用参数 1、2 和 3 进行测试。 4. 参数列表也可以使用多个参数。 ``` @pytest.mark.parametrize("param1, param2", [(1, 2), (3, 4), (5, 6)]) def test_function(param1, param2): assert param1 + param2 == 3 ``` 在上述示例中,test_function() 函数将会被执行三次,分别使用 (1, 2)、(3, 4) 和 (5, 6) 作为参数进行测试。 5. pytest.mark.parametrize() 还支持使用字典来传递参数。 ``` @pytest.mark.parametrize("param", [{"a": 1, "b": 2}, {"a": 3, "b": 4}, {"a": 5, "b": 6}]) def test_function(param): assert param["a"] + param["b"] == 3 ``` 在上述示例中,test_function() 函数将会被执行三次,分别使用 {"a": 1, "b": 2}、{"a": 3, "b": 4} 和 {"a": 5, "b": 6} 作为参数进行测试。 通过使用 pytest.mark.parametrize() 装饰器,我们可以更方便地进行参数化测试,减少了编写大量重复测试用例的工作量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值