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



                                                                                                      ---------------------------------------------------学海无涯
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 很高兴回答你的问题。以下是使用 unittest 框架实现数据驱动的代码示例: ``` import unittest class TestMath(unittest.TestCase): def test_addition(self): data = [(1, 2, 3), (4, 5, 9), (10, -5, 5)] for a, b, expected in data: result = a + b self.assertEqual(result, expected) if __name__ == '__main__': unittest.main() ``` 在上面的代码中,我们定义了一个名为 TestMath 的测试类,并在其中定义了一个名为 test_addition 的测试方法。该方法使用数据驱动的方式,即使用一个包含多组数据的列表 data,每组数据包含两个加数和一个期望结果。然后,我们使用 for 循环遍历这个列表,对每组数据进行加法运算,并使用 assertEqual 方法断言运算结果是否等于期望结果。 最后,我们在代码的末尾使用 unittest.main() 方法来运行测试。这个方法会自动发现并运行 TestMath 类中的所有测试方法,并输出测试结果。 希望这个代码示例能够帮助你理解如何使用 unittest 框架实现数据驱动的测试。 ### 回答2: 使用unittest框架实现数据驱动,可以通过将测试数据和测试逻辑分离,以便在不修改测试代码的情况下使用不同的数据进行多次测试。 代码示例: ```python import unittest class TestDataDriven(unittest.TestCase): def setUp(self): # 设置测试前的准备工作 pass def test_addition(self): # 测试加法功能 # 定义测试数据 test_data = [ (1, 2, 3), # 第一个测试数据:1 + 2 = 3 (-1, 3, 2), # 第二个测试数据:-1 + 3 = 2 (0, 0, 0), # 第三个测试数据:0 + 0 = 0 ] # 使用测试数据进行测试 for data in test_data: x, y, expected_result = data result = add(x, y) self.assertEqual(result, expected_result) # 断言结果是否与期望值相等 def test_subtraction(self): # 测试减法功能 # 定义测试数据 test_data = [ (3, 2, 1), # 第一个测试数据:3 - 2 = 1 (5, 3, 2), # 第二个测试数据:5 - 3 = 2 (0, 0, 0), # 第三个测试数据:0 - 0 = 0 ] # 使用测试数据进行测试 for data in test_data: x, y, expected_result = data result = subtract(x, y) self.assertEqual(result, expected_result) # 断言结果是否与期望值相等 def tearDown(self): # 设置测试后的清理工作 pass if __name__ == '__main__': unittest.main() ``` 以上代码中使用了`unittest.TestCase`作为测试类的基类,并在`setUp`和`tearDown`分别完成测试前的准备工作和测试后的清理工作。`test_addition`和`test_subtraction`方法分别对加法和减法功能进行测试。 通过定义不同的测试数据,我们可以使用循环方式将每个测试数据传入对应的测试方法中,并使用`self.assertEqual`断言判断计算结果是否与期望值相等。如果结果与期望值不相等,unittest会将测试标记为失败,并输出详细的错误信息。 这样,我们就实现了数据驱动的测试,通过不同的测试数据进行多次测试,提高了测试的覆盖率。 ### 回答3: 使用unittest框架实现数据驱动的代码可以如下所示: ```python import unittest class TestDataDriven(unittest.TestCase): def setUp(self): # 在测试用例执行前的准备工作 pass def tearDown(self): # 在测试用例执行后的清理工作 pass def test_data_driven(self): # 测试用例数据驱动部分 test_data = [ {'input': 5, 'expected': 25}, {'input': 10, 'expected': 100}, {'input': -3, 'expected': 9} ] for data in test_data: # 获取输入值和期望结果 input_value = data['input'] expected_value = data['expected'] # 执行被测代码得到实际结果 actual_value = square(input_value) # 进行断言判断期望结果与实际结果是否相等 self.assertEqual(actual_value, expected_value) def square(self, num): # 被测代码:计算数字的平方 return num ** 2 if __name__ == '__main__': unittest.main() ``` 以上代码中,我们定义了一个继承自unittest.TestCase的TestDataDriven类,其中包含了setUp和tearDown方法分别用于测试用例执行前的准备工作和执行后的清理工作。在test_data_driven方法中,我们定义了一个测试用例数据驱动的部分,包含了若干个测试数据,每个测试数据包含输入值和期望结果。然后通过循环遍历测试数据,依次执行被测代码,使用self.assertEqual进行断言判断期望结果与实际结果是否相等。最后使用unittest.main()方法执行测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值