python ddt+unittest+Excel数据驱动实例

1、testcase.xlsx 要读取的Excel中的内容
在这里插入图片描述
2、http_request.py 一个get/pos请求方法的类

import requests
import json

class Httprequests:
    #请求get/post方法的接口
    def http_requests(self,url,data,method):
        headers = {'Content-type': 'application/json'}
        if method.lower() == 'get':
            res = requests.get(url,data,headers)
        elif method.lower() == 'post':
            res = requests.post(url,data=json.dumps(data),headers=headers)
        else:
            print("只支持get,post请求方式")
        return res

3、exceldel.py 处理Excel数据的接口

from openpyxl import load_workbook

#处理Excel
class doExcel:
    def __init__(self,file_name,sheet_name):
        self.filename=file_name
        self.sheetname=sheet_name

    def get_data(self):
        wb = load_workbook(self.filename)
        sheet = wb[self.sheetname]
        test_data= []
        for row in range(2, sheet.max_row + 1):
            sub_data = {}
            for column in range(1, sheet.max_column + 1):
                sub_data[sheet.cell(1, column).value] = sheet.cell(row, column).value
            test_data.append(sub_data)
        return test_data

4、ddt_case1.py ddt+unittest进行数据处理,运行后用例会自动加载成4个单独的用例

import unittest
from excel_unittest_ddt.exceldel import doExcel
from excel_unittest_ddt.http_request import Httprequests
from ddt import ddt,data

test_data= doExcel("testcase.xlsx", "case1").get_data()
print(test_data)
@ddt #用来装饰测试类
class ddttest(unittest.TestCase):
    @data(*test_data)# 装饰测试方法,拿到几个数据就执行几条用例  #加上星号就是脱掉外套[1,3]变成1,3,不加星号就执行一次
    def test_case(self,testdata):
        print(testdata['data'])
        res=Httprequests().http_requests(url=testdata['url'],data=eval(testdata['data']),method=testdata['method'])
        # print(self.url)
        succ = res.json().get('success')
        msg = res.json().get('message')
        try:
            print(succ)
            self.assertEqual(True, succ, msg)
        except  AssertionError as e:
            print("出错了!断言错误{0}".format(e))
            raise e

5、testsuit_01.py 加载、执行用例、生成测试报告

import unittest
import HTMLTestRunnerNew
from excel_unittest_ddt.ddt_case1 import ddttest

class danyuanceshi:
        suit = unittest.TestSuite()
        load=unittest.TestLoader()
        suit.addTest(load.loadTestsFromTestCase(ddttest))

        with open("test_report1.html",'wb') as file:
            runner=HTMLTestRunnerNew.HTMLTestRunner(stream=file,verbosity=2,title="测试结果",description='测试报告',tester='小白')
            runner.run(suit)

在这里插入图片描述

### 如何在 Python unittest 中使用 DDT 实现数据驱动测试 #### 使用 `ddt` 库进行数据驱动测试 为了实现在 `unittest` 中的数据驱动测试,可以通过引入第三方库 `ddt` 来简化操作。该库允许通过装饰器的方式向测试函数传递多个参数集,从而使得每组不同的输入都能触发一次独立的测试执行过程[^1]。 #### 安装依赖包 首先需要确保环境中已经安装了必要的Python包: ```bash pip install ddt ``` 对于生成美观的HTML格式测试报告,则还需要额外安装 `BeautifulReport`: ```bash pip install BeautifulReport ``` #### 编写带有 `ddt` 的单元测试类 下面是一个简单的例子展示如何利用 `ddt` 和 `unittest` 结合来编写数据驱动型的自动化测试脚本[^2]: ```python import unittest from ddt import ddt, data, file_data, unpack @ddt class MyTest(unittest.TestCase): @data((1, 2), (2, 4)) @unpack def test_addition(self, input_value, expected_result): actual_result = add(input_value) assertEqual(actual_result, expected_result) def add(x): return x * 2 if __name__ == '__main__': unittest.main() ``` 在这个案例里,定义了一个名为 `MyTest` 的测试类,并应用了 `@ddt` 装饰器将其标记为支持数据驱动模式;接着,在具体的测试方法前加上 `@data()` 或者其他形式如 `@file_data()` 提供实际要使用的测试数据集合;最后调用标准库中的 `assertEqual()` 方法来进行断言验证逻辑正确性。 #### 加载并运行测试用例以及生成报告 创建一个新的文件用于构建整个项目的入口点,比如命名为 `test_suit.py`, 并按照如下方式组织代码结构以便于批量加载所有符合条件的 TestCase 子类实例化对象至 TestSuite 对象内,进而统一管理和调度它们的工作流程[^3]: ```python import time import unittest from BeautifulReport import BeautifulReport from .ddt_case import DDtTest # 假设这是之前编写的包含具体业务逻辑的模块路径 suite = unittest.TestSuite() load = unittest.TestLoader() # 动态获取当前目录下的所有继承自 unittest.TestCase 类的对象名称列表 cases = load.loadTestsFromTestCase(DDtTest) for case in cases: suite.addTest(case) current_time = time.strftime('%Y-%m-%d_%H_%M_%S') reporter = BeautifulReport(suite) reporter.report(description='测试描述', filename=f'测试报告_{current_time}') ``` 上述代码片段展示了怎样借助 `BeautifulReport` 工具来自动生成一份详尽且直观易读的结果文档,其中包含了本次执行期间产生的各类统计信息图表等内容。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值