数据驱动ddt的简单使用

什么是数据驱动

当我们的测试脚本都是重复的,只有输入的数据变化时,每次更换一个数据执行,都要写一个测试脚本,这样会使我们的代码显得特别乱,特别冗余。
如果我们使用数据驱动,那么只用写一个脚本,在脚本执行的时候,他会自己不断更新数据。简单理解为:数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。
数据驱动ddt可以实现测试数据与测试脚本的分离,通过ddt来将测试数据加载到脚本中。采用数据驱动设计模式使一组数据对应一个测试用例,用例自动加载生成。

unittest测试框架下面没有数据驱动,所以在使用unittest框架的时候,还要使用数据驱动,就必须先下载安装ddt。
在cmd中先检查之前有没有下载过数据驱动:
pip show ddt
当显示show 不是内部命令的时候,可以使用pip.exe show ddt(可能需要升级一下pip的版本)
当显示没有安装过,直接使用下面的命令进行安装
pip install ddt

测试用例,必须以test_开头,在执行测试脚本的时候,会自动执行,不以test_开头的脚本必须要调用才会执行。

使用ddt时,必须引入ddt的包
from ddt import ddt,file_data,unpack,data
增加ddt数据的3种方式:

  1. @data(“王一博”,“Lisa”,“阿里巴巴”)
  2. @file_data(‘test_baidu_data.json’) test_baidu_data.json数据传入进去,可以一次性添加许多个不同的数据
  3. @data([“林俊杰”,“林俊杰_百度搜索”],[“王俊凯”,“王俊凯_百度搜索”])
    @unpack —传递的是复杂的数据结构时使用。比如使用元组或者列表,添加unpack之后,ddt会自动把元组或者列表对应到多个参数上。

为了创建数据驱动测试,需要在测试类上使用 @ddt 装饰符,在测试方法上使用 @data 装饰符。@data 装饰符可以把参数当做测试数据,参数可以是单个值,列表,元组,字典,对于列表和元组,需要使用 @unpack 装饰符把元组和列表解析成多个参数,让其测试数据与测试预期结果之间一一对应。

from selenium import webdriver
import unittest
import time
import os,sys
from selenium.common.exceptions import NoAlertPresentException
from ddt import ddt,file_data,unpack,data
@ddt
class testCase1(unittest.TestCase):
    def setUp(self) :
        #初始化
        self.driver=webdriver.Chrome()
        self.url="https://www.baidu.com/"
        self.driver.get(self.url)
        self.driver.maximize_window()
        time.sleep(3)
    def tearDown(self):
        #关闭浏览器
        self.driver.quit()
   #方法以test_开头都会默认去执行
    #数据驱动ddt测试用例  1  数据和方法放在一块,混乱
    # @data("王一博","Lisa","阿里巴巴")
    
    #文件路径放在和测试脚本路径同级的文件夹下面
    # @file_data('test_baidu_data.json')
    #判断把内容搜索出来之后,和预期是否匹配
    @data(["林俊杰","林俊杰_百度搜索"],["王俊凯","王俊凯_百度搜索"])
    @unpack
    #unpack的作用,每次传入两个以上的参数时将元素一一对应
    def test_baidu1(self,value1,value2):
        driver=self.driver
        driver.find_element_by_id("kw").send_keys(value1)
        driver.find_element_by_id("su").click()
        time.sleep(6)
        self.assertEqual(driver.title,value2,msg="搜索失败!!!")
        time.sleep(6)
    if __name__ == '__main__':
        #参数verbosity=0表示打印出每一个测试用例的执行情况
        unittest.main(verbosity=2)

### 如何在 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
发出的红包

打赏作者

AI小艾

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

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

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

打赏作者

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

抵扣说明:

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

余额充值