数据驱动测试与DDT

数据驱动测试是自动化测试中的重要模式,DDT(Data-Driven Tests)是unittest的一个扩展,用于数据驱动测试。本文介绍了DDT的安装、使用方法,包括如何定义测试数据、数据参数化以及通过读取json、yaml文件和Excel进行数据驱动测试的实例。
摘要由CSDN通过智能技术生成

目录

DDT概述

如何使用

如何定义测试数据

使用示例

数据参数化

使用数据文件进行数据驱动

读取json文件

读取yaml格式文件

使用Excel进行数据驱动测试

使用扩展包xlrd操作excel

使用扩展包openpyxl操作excel


数据驱动测试是自动化测试中的主流设计模式之一。

相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离,这样的测试脚本设计模式称为数据驱动。

DDT概述

DDT(Data-Driven Tests)是针对unittest单元测试框架设计的扩展库。

允许使用不同的测试数据来运行一个测试用例,并将其展示为多个测试用例。

安装

pip install ddt

如何使用

1. 测试类需要通过@ddt装饰器进行装饰,声明要使用ddt

2. 方法装饰器:

@data用于直接添加测试数据;(@data接收一个可迭代的类型,以此来判断需要执行的次数)

@file_data参数为文件名,为测试方法提供存放在文件里的测试数据。

@unpack是在测试方法被调用过程中,对测试数据进行解包,将每组测试数据中的数据分别传给测试方法中对应的形参。

3. 直接定义测试数据时,有不同形式的参数化。

4. DDT同样支持数据文件的参数化,它封装了数据文件的读取。

如何定义测试数据

多组测试数据之间以逗号隔开。如果每组数据存在多个测试数据,需要将每组数据存于列表/元组中,每组数据中的数据与测试方法中的形参个数及顺序一一对应。

如下方代码中所示,第一种直接定义了两条测试数据

@data(
        'selenium',
        'python'
    )

第二种为列表形式。

@data(
        ['case1','selenium'],
        ['case2','python']
    )

第三种为元组形式。

@data(
        ('case1', 'selenium'),
        ('case2', 'python')
    )

第四种为字典形式。字典的key要与测试方法的参数名称保持一致。

@data(
        {'search_key': 'selenium'},
        {'search_key': 'python'}
    )

注意:当测试数据参数化使用复杂的数据结构时,如列表、元组、字典,需要在测试方法前加装饰器@unpack。

使用示例

数据参数化

创建test_ddt.py文件

from selenium import webdriver
from time import sleep
import  unittest
from ddt import ddt,data,unpack,file_data
@ddt
class TestBaidu(unittest.TestCase):
    #前置条件:所有用例执行前打开百度
    @classmethod
    def setUpClass(cls) -> None:
        cls.driver = webdriver.Chrome()
        cls.driver.get('https://www.baidu.com')

    #后置条件:关闭浏览器
    @classmethod
    def tearDownClass(cls) -> None:
        cls.driver.quit()
    def search(self,text):
        self.driver.find_element_by_id("kw").clear()
        self.driver.find_element_by_id("kw").send_keys(text)
        self.driver.find_element_by_id("su").click()
        sleep(5)
        return self.driver.find_element_by_id('1').text #返回第一条搜索结果的内容
    # 参数化:只有测试数据
    @data(
        'selenium',
        'python'
    )
    def test_search1(self, search_key):
        search_result = self.search(search_key)
        self.assertIn(search_key, search_result)

    #参数化:列表形式(用例名+数据)
    @data(
        ['case1','selenium'],
        ['case2','python']
    )
    #unpack传递的是复杂的数据结构时使用
    @unpack
    def test_search2(sel
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值