ddt的用法:根据数据来生成测试用例

  今天,接上上一篇的的内容,继续讲解单元测试,我们在用python代码通过函数的方法来写测试用例,确实可以,但是这些方法中,很多代码量是重复的,有没有简捷化的处理呢?有,ddt就是一个很好用的工具,那么什么是ddt呢?

  ddt:英文全称为 data driver tsest 中文意思:数据驱动用例  我们在实际的工作中来运用,就是根据数据来生成测试用例,至于这个ddt怎么用,且听我慢慢道来,一学就会,很容易上手。

  先看我昨天自己写的一个测试用例类,一个类里面写了10个方法,每个方法都代表着一个用例,但是,很多都是重复的,怎么办?

 可以利用ddt来处理,不需要重复写这么多代码,只需要把数据放在外面,在方法里面调用就行

1、首先安装ddt

 2、代码中导入ddt

import unittest
import ddt
from day_14.task_day13.register import register_check

case_data = [
    {"expected": {"code": 1, "msg": "注册成功"},
     "data": {'username': 'python999', 'password1': '123456789', 'password2': '123456789'}},
    {"expected": {"code": 0, "msg": "该账户已存在"},
     "data": {'username': 'python31', 'password1': '123456', 'password2': '123456'}},
    {"expected": {"code": 0, "msg": "两次密码不一致"},
     "data": {'username': 'python111', 'password1': '12377', 'password2': '123456789'}}
]


@ddt.ddt
class TestRegister(unittest.TestCase):
    """注册的测试用例类"""
    @ddt.data(*case_data)
    def test_register(self, item):
        # 第一步:准备用例数据
        expected = item["expected"]
        data = item["data"]
        # 第二步:传入参数
        res = register_check(**data)   # 拆包,字典拆包是两个*号,列表和元组拆包是一个*号
        # 第三步:比对预期结果和实际结果(断言)
        self.assertEqual(expected, res)


if __name__ == '__man__':
    unittest.main()

对以上代码,进行截图解析

 关于那个case_data,它其实就是一个列表,用来装数据的列表,

 运行后的结果截图:

 那么有的同学会问,既然你前面提到了,那么如果要执行100条或者1000条用例,怎么办,也是case_data=[ ],里面写100个或者1000个?

可以用循环:

# @ddt.data(1, 2, 3, 4)  # 传了4个参数,就生成4条用例

# li = list(range(1, 100)) # 生成99条用例 # @ddt.data(*li)

所以,ddt用起来很方便,就那么关键几步,所以,一学就会

原文地址:https://www.cnblogs.com/xj-excellent/p/13468771.html