自动化测试驱动模式之数据驱动、关键字驱动和混合驱动

本文介绍了自动化测试的三种驱动模式:数据驱动(DDT)、关键字驱动(KDT)和混合驱动(HDT)。数据驱动将测试数据与脚本分离,适用于大量数据验证;关键字驱动将函数名与程序分离,便于非程序员进行自动化测试。混合驱动结合两者优点,实现数据和函数的双重分离。文中通过实例详细解析了每种模式的核心原理、适用场景和具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 数据驱动模式—DDT

1、核心原理

程序不变,数据变
即:多个测试用例的执行过程和操作一样的,只不过测试使用的数据和验证结果有所不同,数据驱动就是把测试数据与测试脚本进行分离,把数据放到配置文件中

2、适用场景

测试过程比较简单,但是需要使用大量的测试数据进行输入验证,适合个人测试

3、ddt安装

ddt是python的第三方库,安装用命令:pip install ddt 即可

4、ddt模块

ddt模块包含类的装饰器ddt和两个方法装饰器data

  • ddt.ddt:装饰类,也就是继承TestCase的类
  • ddt.data:装饰测试方法,参数是一系列的值
  • ddt.file_data:装饰测试方法,参数是文件名。文件可以是json或者yaml类型
    ① 如果文件是以“.yml”或者".yaml"结尾,ddt会作为yaml类型处理,其他文件都会作为json文件处理
    ② 如果文件是列表,列表的值会作为测试用例参数,同时,会作为测试用例方法名后缀显示
    ③ 如果文件是字典,字典的key会作为测试用例方法的后缀显示,字典的value会作为测试用例参数
  • ddt.unpack:传递的是复杂的数据结构时使用,比如使用列表或者元组,添加unpack后,ddt会自动把元组或者列表对应到多个参数上

5、案例演示

方式1:参数直接放在执行脚本文件里

# 文件名:Internal_parameters_ddt.py
import unittest
import ddt
from selenium import webdriver
import time

@ddt.ddt
class Praddt(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
    def tearDown(self):
        self.driver.quit()
        
    @ddt.data(
        ["数据驱动测试","ddt"],
        ["关键字驱动测试","CSDN博客"],
        ["混合驱动测试","博客园"]
    )
    
    @ddt.unpack
    def test_ddt(self,search_word,expect_word):
        self.driver.get('http://www.baidu.com')
        self.driver.find_element_by_id('kw').send_keys(search_word)
        self.driver.find_element_by_id('su').click()
        time.sleep(2)
        assert expect_word in self.driver.page_source

if __name__ == '__main__':
    unittest.main()

方式2:参数放在执行脚本外部数据文件里
外部数据文件data.txt里面的数据如下:

数据驱动测试||ddt
关键字驱动测试||CSDN博客
混合驱动测试||博客园

执行脚本文件代码如下:

# 文件名:External_parameters_ddt.py
from selenium import webdriver
import time
import sys

# 读取data.txt文件
def get_test_datas(file_path):
    with open(file_path,encoding='utf-8') as fp:
        test_datas = fp.readlines()
    return test_datas

# 获取数据文件中的search_word和expect_word
test_datas = get_test_datas('data.txt')

if len(test_datas) == 0:
    print('测试数据文件数据为空,请检查后再测试')
    sys.exit()

# 每获取一组数据后,都执行下面的测试步骤
for i in range(len(test_datas)):
    search_word,expect_word = test_datas[i].strip().split('||') # 去掉列表数据中的“\n”、“||”
    try:
        driver = webdriver.Chrome()
        driver.get('http://www.baidu.com')
        driver.find_element_by_id('kw').send_keys(search_word)
        driver.find_element_by_id('su').click()
        time.sleep(2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值