zoukankan      html  css  js  c++  java
  • pytest实现参数化(@pytest.mark.parametrize)

      @pytest.mark. parametrize装饰器可以实现对测试用例的参数化,方便测试数据的获取。

    @pytest.mark. parametrize的基本使用:

    方便测试函数对测试数据的获取。
    
     方法:
         parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)
    
     常用参数:
         argnames:参数名
         argvalues:参数对应值,类型必须为list
                     当参数为一个时格式:[value]
                     当参数个数大于一个时,格式为:[(param_value1,param_value2.....),(param_value1,param_value2.....)]
    
     使用方法:
         @pytest.mark.parametrize(argnames,argvalues)

    单个参数

    # file_name: test_parametrize.py
    
    
    import pytest
    
    
    class Test_D:
    
        @pytest.mark.parametrize("a", [1, 2, 3])    # 参数a被赋予3个值,test_a将会运行3遍
        def test_a(self, a):    # 参数必须和parametrize里面的参数一致
            print('
    ------------------> test_a has ran, and a = {}'.format(a))
            assert 1 == a
    
    if __name__ == '__main__':
        pytest.main(['-s', 'test_parametrize.py'])

    运行结果:

      从运行结果中可以看到test_a方法被执行了3遍,说明参数a参数化成功。

    多个参数

    # file_name:test_parametrize.py
    
    
    import pytest
    
    
    class Test_D:
    
        @pytest.mark.parametrize("a,b", [(1, 2), (2, 3), (3, 4)])    # 参数a,b均被赋予三个值,函数会运行三遍
        def test_b(self, a, b):    # 参数必须和parametrize里面的参数一致
            print('
    ------------------> test_b has ran, and a = {}, b = {}'.format(a, b))
            assert 1
    
    if __name__ == '__main__':
        pytest.main(['-s', 'test_parametrize.py'])

    运行结果:

      从运行结果中可以看到test_b方法被执行了三遍,说明参数a,b都已经被参数化。

    利用函数的返回值进行参数化

    # file_name: test_parametrize.py
    
    
    import pytest
    
    # 定义返回参数值的函数
    def return_test_data():
        return [(1, 2), (2, 3), (3, 4)]
    
    
    class Test_D:
    
        @pytest.mark.parametrize("a,b", return_test_data())    # 使用函数返回值的方式传入参数值
        def test_c(self, a, b):
            print('
    ------------------> test_c has ran, and a = {}, b = {}'.format(a, b))
            assert 1
    
    if __name__ == '__main__':
        pytest.main(['-s', 'test_parametrize.py'])

    运行结果:

      从运行结果中可以看到test_c方法被执行了三遍,这说明使用函数的返回值同样可以做到参数化。

    参数组合

    获得多个参数化参数的所有组合,可以堆叠参数化装饰器:

    # file_name: test_parametrize.py
    
    
    import pytest
    
    
    class Test_D:
    
        @pytest.mark.parametrize("x", [1, 2])
        @pytest.mark.parametrize("y", [3, 4])
        def test_d(self, x, y):
            print("
    ------------------> test_d has ran, and x={}, y={}".format(x, y))
    
    if __name__ == '__main__':
        pytest.main(['-s', 'test_parametrize.py'])

    运行结果:

      从运行结果中可以看到test_d方法被执行了四遍,这是因为参数x和参数y分别被赋予了2个值,组合起来就是2*2=4次,说明装饰器叠加可以获得所有参数的组合。

  • 相关阅读:
    Coding.net进阶,使用Git管理代码
    经典算法问题
    浅谈三款常用软件
    Coding.net简单使用指南
    湖北宜化总结
    天顺风能经验总结
    Vue中watch的高级用法
    html 锚点三种实现方法
    【机器学习】EM算法详细推导和讲解
    【机器学习】BP神经网络实现手写数字识别
  • 原文地址:https://www.cnblogs.com/lwjnicole/p/14444878.html
Copyright © 2011-2022 走看看