参数化表达式: ddt表达式
@pytest.mark.parametrize(“参数名”, 列表数据) @ddt.ddt
def(参数名): class xxx(unittest.TestCase): #一定要继承unitest.TestCase
执行体 @ddt.data(*LD.wrong_datas) #列表要解包
列表[“”] …… def test_login_failed_by_wrongData(self, case): #参数接收列表中的一条数据 参数名随意
执行体
列表[“”] ……
pytest中的参数化的解释:
参数名:用来接收列表中的每一组数据,并作为测试用例的参数,所以用例方法中用来接收每一组数据的参数名要和此处相同。
Eg:
@pytest.mark.parametrize('case', LD.wrong_datas)
def test_login_failed_by_wrongData(self, case):
self.lp.login(case["user"], case["passwd"])
self.assertEqual(case["check"], self.lp.get_error_msg())
备注:LD文件中wrong_datas = [
{"user": "", "passwd": "python", "check": "请输入手机号"},
{"user": "18684720553", "passwd": "", "check": "请输入密码"},
{"user": "186847205", "passwd": "python", "check": "请输入正确的手机号"}
]
常用场景:一般都是把数据放到字典中,多组数据一起放到列表中,再通过Pytest参数化实现数据驱动。
了解下:参数名中可包括多个参数,可进一步把每组接收到的数据再次解包 一一赋值。(高级用法 但用得少 一般还是列表中数据格式为字典就可替代这种用法)