python—unittest—数据驱动详细讲解(ddt)

在这里插入图片描述


这里写目录标题

一、数据驱动ddt

数据驱动ddt可以实现测试数据与测试脚本的分离,通过ddt来将测试数据加载到脚本中。采用数据驱动设计模式使一组数据对应一个测试用例,用例自动加载生成

二、ddt基础

pip install ddt

测试数据为嵌套字典的列表
测试类前加修饰@ddt
测试用例前加修饰@data()
运行后用例会自动加载成多个单独的用例

代码案例

import unittest
from ddt import ddt, data

#测试用例
cases = [
        {'title': '登录成功', 'expected': {'code': 200, 'msg': '登录成功'}, 'data': ('kobe', '666')},
        {'title': '登录失败', 'expected': {'code': 201, 'msg': '用户名或者密码不正确'}, 'data': ('kobe', '888')},
        {'title': '用户名不能为空', 'expected': {'code': 201, 'msg': '用户名不能为空'}, 'data': ('', '666')},
        {'title': '密码不能为空', 'expected': {'code': 201, 'msg': '密码不能为空'}, 'data': ('kobe', '')},
        {'title': '用户名和密码不能为空', 'expected': {'code': 201, 'msg': '用户名和密码不能为空'}, 'data': ('', '')},
    ]

@ddt
class LoginTestCase(unittest.TestCase):

	@classmethod
    def setUpClass(cls) -> None:
        print('开始')

    def setUp(self) -> None:
        print('开始执行用例')

    @data(*cases)
    def test_login(self, case):
        print(case)
        self.assertEqual(case['expected'], self.login(case['data'][0], case['data'][1]))

    def login(self, username, password):
        if username == 'kobe' and password == '666':
            return {'code': 200, 'msg': '登录成功'}

        if username == 'kobe' and username != '' and password != '666' and password != '':
            return {'code': 201, 'msg': '用户名或者密码不正确'}

        if username == 'kobe' and password == '':
            return {'code': 201, 'msg': '密码不能为空'}

        if username == '' and password == '666':
            return {'code': 201, 'msg': '用户名不能为空'}

        if username == '' and password == '':
            return {'code': 201, 'msg': '用户名和密码不能为空'}

    def tearDown(self) -> None:
        print('用例执行完毕')
        
    @classmethod
    def tearDownClass(cls) -> None:
        print('结束')


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

case依次为,每一条case表示一条用例

{'title': '登录成功', 'expected': {'code': 200, 'msg': '登录成功'}, 'data': ('kobe', '666')},
{'title': '登录失败', 'expected': {'code': 201, 'msg': '用户名或者密码不正确'}, 'data': ('kobe', '888')},
{'title': '用户名不能为空', 'expected': {'code': 201, 'msg': '用户名不能为空'}, 'data': ('', '666')},
{'title': '密码不能为空', 'expected': {'code': 201, 'msg': '密码不能为空'}, 'data': ('kobe', '')},
{'title': '用户名和密码不能为空', 'expected': {'code': 201, 'msg': '用户名和密码不能为空'}, 'data': ('', '')},

测试结果
在这里插入图片描述

继承了unittest.TestCase的类下每个test开头的方法(就是用例)时,每次执行用例都会执行setUp和tearDown
setUpClass和tearDownClass只会执行一次

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值