pytest和unittest中参数化如何做

参数化应用场景,一个场景的用例会用到多条数据来进行验证,比如登录功能会用到正确的用户名、密码登录,错误的用户名、正确的密码,正确的用户名、错误的密码等等来进行测试,这时就可以用到框架中的参数化,来便捷的完成测试。

参数化 就是数据驱动思想,即可以在一个测试用例中进行多组的数据测试,而且每一组数据都是分开的、独立的

1.uniitest中参数化的用法

1.1安装ddt模块,是python的一个库

pip insatll ddt

  

 1.1引入ddt模块,是unittest的一个插件

import ddt

  

1.2在类前面加上一个装饰器@ddt.ddt,表示要使用ddt模块了,在要使用的方法上加上@ddt.data()

@ddt.ddt   没有括号
class TestDemo:

    @ddt.data(*测试数据)   #有括号,要加*,因为是不定长参数
#将测试数据中的一组测试数据,赋值到data_info这个参数,相当于一个for循环,每次取一组数据给测试方法 def test_demo(self,data_info): pass

  

 

 

2.pytest中参数化的用法

在测试用例的前面加上:
@pytest.mark.parametrize("参数名",列表数据)
参数名:用来接收每一项数据,并作为测试用例的参数。
列表数据:一组测试数据。

@pytest.mark.parametrize("参数1,参数2",[(数据1,数据2),(数据1,数据2)])
示例:
@pytest.mark.parametrize("a,b,c",[(1,3,4),(10,35,45),(22.22,22.22,44.44)])
def test_add(a,b,c):
res = a + b
assert res == c

    @pytest.mark.parametrize("fail",lds.fail)
    #(参数名称,数据)
    def test_error_msg_01(self,fail,init_driver):#(fail是参数名称,lds.fail是数据)

        lp=LoginPage(init_driver)
        lp.login_success(fail["username"],fail["passwd"])
        assert fail["check"]==lp.login_fail_01()

  

@pytest.mark.parametrize("case_info", test_data)#参数化,("参数名",测试数据)
    def test_login(self,case_info):
        url = self.yaml_data["api"]["zs_login_url"] + case_info["URL"]
        method = case_info["Method"]
        params = case_info["Params"]

 

posted @ 2020-04-18 16:32  learn_py_test  阅读(406)  评论(0编辑  收藏  举报