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"]