Pytest7 - 参数化用例

使用场景

  当待测试的输入输出是一组数据时,可以将测试数据组织起来调用相同的测试方法。
即:将不同的参数,写入集合中,程序自动调用集合中的数据,直到集合为空。

parametrize()使用方法

单次使用

同一个测试用例只添加一个@pytest.mark.parametrize()。

@pytest.mark.parametrize("test_input,expected",[("3+5",8),("2+5",7)])
    def test_eval(self,test_input,expected):
        # eval 将字符串当成表达式执行
        assert eval(test_input) == expected

  使用@pytest.mark.parametrize装饰器实现参数化。
  parametrize(‘data’, param):"test_input,expected"是自定义的参数名,多个参数名之前以逗号隔开;
  [(“3+5”,8),(“2+5”,7)]是传入的参数列表。
  将自定义的参数名传入测试用例,即可调用参数。
运行结果:

在这里插入图片描述

多次使用

同一个测试用例只添加多个@pytest.mark.parametrize(),多个parametrize之间的元素互相组合(类似笛卡尔乘积),生成大量的测试用例。

    @pytest.mark.parametrize("x", [1,3])
    @pytest.mark.parametrize("y", [2, 4, 6])
    def test_eval(self, x, y):
        print(f"测试数据组合x:{x},y:{y}")

运行结果:

在这里插入图片描述

@pytest.fixture与@pytest.mark.parametrize结合

使用场景

测试数据需要在fixture方法中使用,同时也需要在测试用例中使用

使用方法

添加参数indirect=True
@pytest.mark.parametrize(‘login_r’,test_user_data,indirect=True)

 test_user_data = ['xiaoming','wangmeimei']
    @pytest.fixture(scope='module')
    def login_r(request):
    # 使用request.par接收参数
        user = request.test_user_data
        print(f"\n用户为:{user}")
        return user
     # 当indirect=True时,将test_user_data作为参数传入函数login_r中
    @pytest.mark.parametrize('login_r',test_user_data,indirect=True)
    def test_login(self,login_r):
        a = login_r
        print(f"login返回值是:{a}")

执行结果:

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐