Pytest-参数化和unittest-ddt的对比(两种数据驱动的对比)

参数化表达式:                                                                                          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参数化实现数据驱动。

 

了解下:参数名中可包括多个参数,可进一步把每组接收到的数据再次解包 一一赋值。(高级用法 但用得少 一般还是列表中数据格式为字典就可替代这种用法)

 

 

 

骚操作 迪卡尔积-了解下即可 很少用到

 

posted @ 2020-08-12 18:19  菜鸟到大佬  阅读(1107)  评论(0编辑  收藏  举报