• 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

  • 相关阅读:
    sql 2008 r2
    js压缩反压缩
    .NET调用Java写的WebServices(可能会碰到的问题)
    ecshop
    Chrome插件
    Unity3d ShaderLab之WorldNormalVector
    Unity 3d中Shader是什么,可以吃吗?
    java,类的继承
    java,关于POJO,查阅资料
    java,编写一个汽车类
  • 原文地址:https://www.cnblogs.com/crystal1126/p/12403001.html
Copyright © 2020-2023  润新知