pytest之参数化

 方法:
        parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)
 常用参数:
        argnames:参数名
        argvalues:参数对应值,类型必须为list
                    当参数为一个时格式:[value]
                    当参数个数大于一个时,格式为:[(param1_value,param2_value.....),(param1_value,param2_value.....)]
使用方法:
        @pytest.mark.parametrize(argnames,argvalues)
        ⚠️ 参数值为N个,测试方法就会运行N次

  单个参数示例:
        import pytest
        class Test_ABC:
            def setup_class(self):
                print("------->setup_class")
            def teardown_class(self):
                print("------->teardown_class")

            @pytest.mark.parametrize("a",[3,6]) # a参数被赋予两个值,函数会运行两遍
            def test_a(self,a): # 参数必须和parametrize里面的参数一致
                print("test data:a=%d"%a)
                assert a%3 == 0
    执行结果:
        test_abc.py 
        ------->setup_class
        test data:a=3 # 运行第一次取值a=3
        .
        test data:a=6 # 运行第二次取值a=6
        . 
        ------->teardown_class

    多个参数示例:
        import pytest
        class Test_ABC:
            def setup_class(self):
                print("------->setup_class")
            def teardown_class(self):
                print("------->teardown_class")

            @pytest.mark.parametrize("a,b",[(1,2),(0,3)]) # 参数a,b均被赋予两个值,函数会运行两遍
            def test_a(self,a,b): # 参数必须和parametrize里面的参数一致
                print("test data:a=%d,b=%d"%(a,b))
                assert a+b == 3
    执行结果:
        test_abc.py 
        ------->setup_class
        test data:a=1,b=2 # 运行第一次取值 a=1,b=2
        .
        test data:a=0,b=3 # 运行第二次取值 a=0,b=3
        .
        ------->teardown_class

  函数返回值类型示例:
示例一(返回单个值)
      import pytest
      @pytest.fixture()
      def need_data():
          return 2 # 返回数字2

      class Test_ABC:

          def test_a(self,need_data):
              print("------->test_a")
              assert need_data != 3 # 拿到返回值做一次断言

      if __name__ == '__main__':
          pytest.main("-s  test_abc.py")
  执行结果:
      test_abc.py 
      ------->test_a
 示例二(使用request封装参数)
      import pytest
      @pytest.fixture(params=[1, 2, 3])
      def need_data(request): # 传入参数request 系统封装参数
          return request.param # 取列表中单个值,默认的取值方式

      class Test_ABC:

          def test_a(self,need_data):
              print("------->test_a")
              assert need_data != 3 # 断言need_data不等于3

      if __name__ == '__main__':
          pytest.main("-s  test_abc.py")
  执行结果:
      # 可以发现结果运行了三次
      test_abc.py 
      1
      ------->test_a
      .
      2
      ------->test_a
      .
      3
      ------->test_a
      F
示例三:(返回list)
import pytest def return_test_data(): return [(1,2),(0,3)]
class Test_ABC: def setup_class(self): print("------->setup_class") def teardown_class(self): print("------->teardown_class") @pytest.mark.parametrize("a,b",return_test_data()) # 使用函数返回值的形式传入参数值 def test_a(self,a,b): print("test data:a=%d,b=%d"%(a,b)) assert a+b == 3 执行结果: test_abc.py ------->setup_class test data:a=1,b=2 # 运行第一次取值 a=1,b=2 . test data:a=0,b=3 # 运行第二次取值 a=0,b=3 . ------->teardown_class

原文地址:https://www.cnblogs.com/crystal1126/p/12403001.html