Pytest教程__参数化(10)

pytest参数化有两种方式:

  • mark的parametrize标记:@pytest.mark.parametrize(变量名,变量值),其中变量值类型为列表、元组或其它可迭代对象。
  • fixture的params参数:@pytest.fixture(params=变量值),其中变量值类型为列表、元组或其它可迭代对象。

接下来以上面两种方式演示参数化的多种情况。

一、单变量参数化

演示代码如下:

import pytest


# params的值为参数化的值,被装饰的函数为变量名,函数的request形参是固定写法不可修改,return的返回值也是固定写法
@pytest.fixture(params=(1, 2))
def login_data(request):
    return request.param


class TestLogin:

    # parametrize参数化时,需传入两个参数,第一个参数为变量名,第二个参数为参数化的值
    @pytest.mark.parametrize("data", ["a", "b"])
    def test_login_001(self, data):
        print("执行用例001")
        print(f"调用参数-{data}")

    # 调用被@pytest.fixture装饰的函数
    def test_login_002(self, login_data):
        print("执行用例002")
        print(f"调用参数-{login_data}")

执行结果如下:

二、多变量参数化

演示代码如下:

import pytest


# params的值为参数化的值,被装饰的函数为变量名,函数的request形参是固定写法不可修改,return的返回值也是固定写法
@pytest.fixture(params=((1, 2), (3, 4)))
def login_data(request):
    return request.param


class TestLogin:

    # parametrize参数化时,需传入两个参数,第一个参数为变量名,第二个参数为参数化的值
    @pytest.mark.parametrize("data1, data2", [("a1", "a2"), ("b1", "b2")])
    def test_login_001(self, data1, data2):
        print("\n执行用例001")
        print(f"调用参数-{data1}-{data2}")

    # 调用被@pytest.fixture装饰的函数
    def test_login_002(self, login_data):
        print("\n执行用例002")
        print(f"调用参数-{login_data[0]}-{login_data[1]}")

    # parametrize,也可以像fixture用一个变量名使用索引的方式取值。
    @pytest.mark.parametrize("data", [("a1", "a2"), ("b1", "b2")])
    def test_login_003(self, data):
        print("\n执行用例001")
        print(f"调用参数-{data[0]}-{data[1]}")

执行结果如下:

三、字典变量参数化

演示代码如下:

import pytest


# params的值为参数化的值,被装饰的函数为变量名,函数的request形参是固定写法不可修改,return的返回值也是固定写法
@pytest.fixture(params=({"username": "aaa", "password": 111}, {"username": "bbb", "password": 222}))
def login_data(request):
    return request.param


class TestLogin:

    # parametrize参数化时,需传入两个参数,第一个参数为变量名,第二个参数为参数化的值
    @pytest.mark.parametrize("data", [{"username": "ccc", "password": 333}, {"username": "ddd", "password": 444}])
    def test_login_001(self, data):
        print("\n执行用例001")
        print(f"调用参数-{data['username']}-{data['password']}")

    # 调用被@pytest.fixture装饰的函数
    def test_login_002(self, login_data):
        print("\n执行用例002")
        print(f"调用参数-{login_data['username']}-{login_data['password']}")

执行结果如下:

四、多次参数化

多次参数化会产生像笛卡尔积一样的结果。

演示代码如下:

import pytest


# params的值为参数化的值,被装饰的函数为变量名,函数的request形参是固定写法不可修改,return的返回值也是固定写法
@pytest.fixture(params=({"username": "aaa", "password": 111}, {"username": "bbb", "password": 222}))
def login_data(request):
    return request.param


@pytest.fixture(params=["xxs://xxx.com", "dds://ddd.com"])
def env_data(request):
    return request.param


class TestLogin:

    # parametrize参数化时,需传入两个参数,第一个参数为变量名,第二个参数为参数化的值
    @pytest.mark.parametrize("data1", [{"username": "ccc", "password": 333}, {"username": "ddd", "password": 444}])
    @pytest.mark.parametrize("data2", ["var1", "var2"])
    def test_login_001(self, data1, data2):
        print("\n执行用例001")
        print(f"调用参数-{data1['username']}-{data1['password']}")
        print(f"调用参数-{data2}")

    # 调用被@pytest.fixture装饰的函数
    def test_login_002(self, login_data, env_data):
        print("\n执行用例002")
        print(f"调用参数-{login_data['username']}-{login_data['password']}")
        print(f"调用参数{env_data}")

执行结果如下:

-事必有法,然后有成- 最后祝大家早日达到测试的天花板!



以下是我收集到的比较好的学习教程资源,虽然不是什么很值钱的东西,如果你刚好需要,可以留言【777】直接拿走就好了

都看到这啦,若是文章对大家有帮助的话,大家可以点赞、关注支持一下哈~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值