unittest使用ddt数据驱动的小demo

一、ddt简介
1.ddt是 data driven testing的缩写,中文含义是数据驱动测试。
2.ddt通常与unittest组合使用,常用的包有ddt,data,unpack,file_data(我这边使用前两种)

二、ddt安装
1.在pycharm控制台使用pip install ddt
2.进入pycharm的settings----project:--------Interpreter模块,找到pip,进入pip模块,搜索ddt,完成安装

三、ddt的使用
1.导包:from ddt import ddt,data
2.@ddt放在测试类的顶部(见附件)
3.@data放在测试方法的顶部,后面紧跟测试数据===》 @data(* testdata) 这里的 “ * ” 是拆包的意思,把测试数据拆成单独的一条。可以是单独的数字、字符串、也可以是列表、元组、字典

# -- coding: utf-8 --
# @Time : 2022/4/9 15:51
# @Author : tianqiang
# @File : testcase.py
# @Software: PyCharm
# @description:

import unittest
from TestCase.Myddt import ddt, data
from Common.Send_Request import HandlerRequest
from Common.OperateExcel import read_case
from Common.Conversion_Type import conversion_Type
from Common.RunLog import my_log


@ddt
class RunCase(unittest.TestCase):
    case_lists = read_case.read_excel()

    @classmethod
    def setUpClass(cls):
        cls.hr = HandlerRequest()

    @classmethod
    def tearDownClass(cls):
        pass

    @data(*case_lists)
    def test_case(self, case):
        new_data = conversion_Type.cast_type(case['data'])
        d = conversion_Type.cast_type(new_data)
        print(new_data)
        result_data = self.hr.send_request(method=case['method'], request_path=case['path'], case_data=d)
        actual_result = result_data.json()
        expected_result = eval(case['ExpectRequest'])
        try:
            self.assertEqual(expected_result["code"], actual_result["code"])
        except AssertionError:
            my_log.exception("断言失败!")
            my_log.info(f"获取执行的用例名{case['casename']},请求方法{case['method']},\n请求数据{new_data},\n响应结果{actual_result}")
            raise    # raise是为了将断言失败的用例 ,返回给框架。框架不能直接识别用例是否失败
        except:
            my_log.exception("断言失败以外的异常!")
            my_log.info(f"获取执行的用例名{case['casename']},请求方法{case['method']},\n请求数据{new_data},\n响应结果{actual_result}")
            raise



                                                                                                      ---------------------------------------------------学海无涯
### 如何在 Python unittest 中实现数据驱动测试 DDT #### 数据驱动测试简介 数据驱动测试(Data-Driven Testing, DDT)是一种软件测试技术,允许通过不同的输入数据多次执行相同的测试逻辑。这有助于减少重复代码并提高测试效率。 在 Python 的 `unittest` 框架中,可以通过引入第三方库 `ddt` 来实现数据驱动测试[^1]。以下是具体实现方式: --- #### 实现步骤说明 1. **安装依赖** 需要先安装 `ddt` 库,可通过 pip 安装: ```bash pip install ddt ``` 2. **定义测试类** 使用 `@ddt.ddt` 装饰器标记整个测试类,表示该类支持数据驱动测试[^3]。 3. **编写测试用例** 在测试方法前使用 `@ddt.data` 或其他相关装饰器提供测试数据集。每组数据会作为独立的测试场景运行。 4. **验证结果** 利用 `self.assertEqual()` 等断言方法验证实际输出是否符合预期。 --- #### 示例代码 以下是一个完整的示例,展示如何利用 `ddt` 和 `unittest` 进行数据驱动测试: ```python import unittest from ddt import ddt, data, unpack # 假设有一个简单的加法函数 add() def add(a, b): return a + b # 使用 @ddt 标记测试类 @ddt class TestAddFunction(unittest.TestCase): # 使用 @data 提供多组测试数据 @data((1, 2, 3), (4, 5, 9), (-1, -1, -2)) @unpack # 解包元组中的参数到测试方法中 def test_add(self, a, b, expected_result): result = add(a, b) self.assertEqual(result, expected_result) if __name__ == "__main__": unittest.main() ``` 上述代码实现了如下功能: - 测试类被 `@ddt` 装饰,表明其支持数据驱动。 - 测试方法 `test_add` 接收三组数据 `(a, b, c)` 并逐一验证加法运算的结果是否正确[^2]。 --- #### 文件数据驱动扩展 如果测试数据较多或复杂,可将其存储于外部文件(如 JSON、YAML),并通过 `@file_data` 加载。例如: ##### YAML 数据驱动示例 假设存在一个名为 `numbers.yml` 的文件,内容如下: ```yaml - 666 - 777 - 888 ``` 对应的测试代码为: ```python import unittest from ddt import ddt, file_data @ddt class TestNumbersFromYaml(unittest.TestCase): @file_data('numbers.yml') def test_numbers(self, number): print(f'当前数字是 {number}') self.assertTrue(isinstance(number, int)) if __name__ == "__main__": unittest.main() ``` 此代码从 YAML 文件加载多个整数,并逐个验证它们的类型是否为 `int`[^4]。 --- #### 总结 通过结合 `unittest` 和 `ddt`,可以轻松实现高效的数据驱动测试。无论是简单数值还是复杂的结构化数据,都可以灵活处理。此外,借助外部配置文件管理测试数据能够进一步提升代码的可维护性和清晰度。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值