小白学自动化测试​:数据驱动DDT​!

news2024/10/6 16:28:00

大家好,今天我们开始学习自动化相关的内容,一讲到软件行业的自动化测试一般对于刚入门的同学来讲学习接口测试是一个不错的选择。入门相对容易并且在工作中去实践产生的收益也比较大,所以我们后面会来学习接口自动化测试相关内容。

今天给大家讲的是数据驱动开发,什么是数据驱动开发?让我们一起来学习一下DDT的一些概念和实践吧

在自动化测试领域,数据驱动测试(Data-Driven Testing,简称DDT)已经成为一种不可或缺的方法。通过DDT,我们可以将测试数据与测试逻辑分离,使测试更加灵活、高效和可维护。本文将结合具体例子,阐述自动化测试中DDT的应用,并详细解析其中的一些关键点。

一、DDT概述

DDT的核心思想是将测试用例的输入数据和预期输出存储在外部文件中,通过读取这些数据来驱动测试的执行。这样,我们可以针对同一组功能编写多个测试用例,每个用例使用不同的数据,从而实现更全面的测试覆盖。

二、DDT在自动化测试中的应用

在自动化测试中,DDT可以应用于单元测试、集成测试和系统测试等多个阶段。下面以单元测试为例,介绍DDT的应用过程。

1.准备测试数据

首先,我们需要准备一组测试数据,包括输入数据和预期输出。这些数据可以存储在CSV、Excel、TXT或数据库等文件中。

例如,假设我们正在测试一个计算平均值的函数,我们可以准备以下测试数据:

输入数据 预期输出

[1, 2, 3] 2.0

[4, 5, 6] 5.0

[7, 7, 7] 7.0

2.编写测试用例

接下来,我们使用DDT装饰器来编写测试用例。通过装饰器,我们可以将测试数据与测试方法关联起来,实现数据驱动。

在Python中,我们可以使用ddt库来实现DDT。下面是一个简单的例子:

import unittest
from ddt import ddt, data, unpack

@ddtclass TestAverage(unittest.TestCase):        @data(([1, 2, 3], 2.0),    @data(([4, 5, 6], 5.0),    @data(([7, 7, 7], 7.0))    @unpack    def test_average(self, input_data, expected_output):        result = average(input_data)        self.assertEqual(result, expected_output)

在这个例子中,我们使用@data装饰器来指定测试数据,每个@data装饰器对应一组输入数据和预期输出。@unpack装饰器用于将元组解包为单独的参数,以便在测试方法中使用。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

3.运行测试用例

最后,我们运行测试用例并查看测试结果。由于我们使用了DDT,测试框架会根据提供的测试数据多次运行test_average方法,每次使用不同的输入数据。

通过DDT,我们可以轻松地对同一组功能进行多组数据的测试,确保功能的正确性和健壮性。

示例二:

这个是一个126登录邮箱的接口自动化用例

1.写用例

测试用例编号测试项目测试输入预期结果实际结果是否通过
1正常登录正确的用户名和密码登录成功,进入邮箱主界面登录成功,进入邮箱主界面
2错误密码登录正确的用户名和错误的密码登录失败,提示密码错误登录失败,提示密码错误
3用户名不存在登录不存在的用户名和任意密码登录失败,提示用户名不存在登录失败,提示用户名不存在
4空白用户名登录空白用户名和任意密码登录失败,提示用户名不能为空登录失败,提示用户名不能为空
5空白密码登录正确的用户名和空白密码登录失败,提示密码不能为空登录失败,提示密码不能为空
6特殊字符登录用户名或密码包含特殊字符登录成功或失败,根据特殊字符的处理规则而定登录成功或失败,根据特殊字符的处理规则而定根据实际情况判断
7验证码登录(可选)正确的用户名、密码和验证码登录成功,进入邮箱主界面登录成功,进入邮箱主界面
8错误验证码登录正确的用户名、密码和错误的验证码登录失败,提示验证码错误登录失败,提示验证码错误
9验证码过期登录正确的用户名、密码和过期的验证码登录失败,提示验证码已过期登录失败,提示验证码已过期
10多次错误尝试登录多次输入错误的用户名或密码账号被暂时锁定或提示多次尝试登录失败账号被暂时锁定或提示多次尝试登录失败

2.用自动化实现用例,并用dtt方式实现多个用例执行​​​​​​​

import requestsfrom ddt import ddt, data, unpack
# 假设有一个用于发送HTTP请求的类class EmailLoginTest:    BASE_URL = "https://mail.126.com/login/"  # 126邮箱登录接口地址    HEADERS = {        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'    }
    def __init__(self, username, password):        self.username = username        self.password = password
    def login(self):        payload = {            'username': self.username,            'password': self.password            # 根据实际情况,这里可能还需要添加其他参数,如验证码等        }        response = requests.post(self.BASE_URL, headers=self.HEADERS, data=payload)        return response.json()
# 使用ddt进行数据驱动测试@ddtclass Test126EmailLogin:    # 创建测试数据,每个元组代表一组用户名和密码    login_data = [        ("correct_username", "correct_password", "code", True),  # 正常登录        ("correct_username", "wrong_password", "code", False),   # 错误密码登录        ("wrong_username", "any_password", "code", False),       # 用户名不存在登录        ("", "any_password", "code", False),                     # 空白用户名登录        ("correct_username", "", "code", False),                 # 空白密码登录         ("correct_username", "correct_password", "", False),     # 验证码为空        ("correct_username", "correct_password", "error_code", False),  # 错误的验证码        ("correct_username", "correct_password", "overdue_code", False), # 过期的验证码            ("correct_username", "some_wrong_password", "code", False), # 多次输入密码错误           # 你可以继续添加其他测试数据        # 你可以继续添加其他测试数据    ]
    @data(*unpack(login_data))    def test_login(self, username, password, code,expected_success):        """测试登录功能"""        email_login_test = EmailLoginTest(username, password, code)        response_data = email_login_test.login()
        # 根据实际情况,判断登录是否成功的条件可能有所不同        # 这里假设登录成功时,response_data中会有一个字段表示登录状态        if expected_success:            assert 'status' in response_data and response_data['status'] == 'success', "登录应该成功"        else:            assert 'status' in response_data and response_data['status'] != 'success', "登录应该失败"
# 运行测试if __name__ == '__main__':    import unittest    unittest.main()

请注意,上述测试用例中的“是否通过”列是基于预期结果和实际结果是否一致来判断的。在实际情况中,您需要根据实际的测试结果来填写这一列。此外,特殊字符登录的测试结果会根据126邮箱对特殊字符的处理规则而定,因此需要根据实际情况来判断是否通过。

三、DDT的优势与注意事项

DDT在自动化测试中带来了诸多优势,如减少代码量、提高测试覆盖率、降低维护成本等。然而,在使用DDT时,我们也需要注意一些事项,如确保测试数据的准确性和完整性、避免测试数据之间的相互影响等。

四、总结

DDT作为自动化测试中的一种重要方法,通过数据与测试逻辑的分离,实现了更灵活、高效的测试。通过结合具体例子,我们可以看到DDT在自动化测试中的应用及其优势。在未来的自动化测试中,我们可以进一步探索和实践DDT,提高测试的质量和效率。

结合上面的例子,处理使用代码中的对象来处理数据,你还想到哪些方式可以结合dtt呢?比如是不是可以把这些数据写入到yaml文件,json文件,数据库,excel中,而这样后续是可通过维护这些文件数据增加测试用例对应用例需要的数据就可以了,减少了反复改动和维护自动化脚本成本。

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1621474.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

芒果YOLOv8改进组合161:动态标签分配ATSS+新颖轻量化非对称多级压缩LADH检测头组合改进,LADH作为原创可以发表SCI顶刊论文,小目标高效涨点

💡本篇内容:【芒果YOLOv8改进ATSS标签分配策略|第四集】芒果YOLOv8改进组合161:动态标签分配ATSS+新颖轻量化非对称多级压缩LADH检测头组合改进,小目标高效涨点 💡🚀🚀🚀本博客 标签分配策略ATSS改进+ 新颖轻量化非对称多级压缩LADH检测头组合改进,适用于 YOLOv…

C语言洛谷题目分享(10)最厉害的学生和明明的随机数

目录 1.前言 2.俩则题目 1.最厉害的学生(p5740) 1.题目描述 2.输入格式 3.输出格式 4.输入输出样例 5.题解 2. 明明的随机数 1.题目描述 2.输入格式 3.输出格式 4.输入输出样例 5.题解 3.小结 1.前言 哈喽大家好啊,今天继续为大…

C/C++程序设计实验报告5 | 结构体和指针实验

本文整理自博主本科大一《C/C程序设计》专业课的课内实验报告,适合C语言初学者们学习、练习。 编译器:gcc 10.3.0 ---- 注: 1.虽然课程名为C程序设计,但实际上当时校内该课的内容大部分其实都是C语言,C的元素最多可能只…

2. 多机多卡运行nccl-tests对比分析

系列文章 第2章 多机多卡nccl-tests 对比分析 目录 系列文章前言一、本地环境1. 网卡接口2. RDMA3. TOPO信息pcie信息nvidia-smi topo -m 二、nccl-test对比分析1. 相关环境变量2. 不同情况的对比3. 总结与分析 前言 NCCL(NVIDIA Collective Communications Libra…

ruoyi-nbcio-plus基于vue3的flowable收回任务后重新进行提交表单的处理

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

CUDA入门系列课程,从最基础着手

CUDA入门系列课程,从最基础着手,突出的就是一个字“细”!! github项目包含代码、博客、课件pdf下载地址:https://github.com/sangyc10/CUDA-code! 在这里插入图片描述 CUDA编程基础入门系列 https://github.com/sang…

Java冲突

本身 父类 接口(多) 如果出现同样名字的方法,就会出现冲突 * 情况描述1: * 当一个类,继承了父类,实现了某接口,父类中的成员方法和接口中的方法重名 * 解决方法: * 子类就近选择父类成员方法 亲爹优先原则 * *使用格式: * 父类:super.方法名 * 父接口:父接口名.super.方…

指针学习总结

当指针本身定义的类型不同十,指向的一次性取值长度也不同 数组元素的指针 数组存放字符串 数组存放字符串时存放在栈区,sizeof(str1) 128字节 字符指针指向字符串 str2此时存放的是h的地址,因此sizeof(str2) 4字节或者8字节 并且文字常量…

快速回复app是什么样

在电商领域,掌握一些必备的软件工具是提高工作效率、优化运营流程以及提升用户体验的关键。本文将为您介绍做电商必备的几个软件,帮助您更好地开展电商业务。 ​ 快速回复APP:重新定义沟通效率 在快节奏的现代社会中,人们对于沟通…

Python实现“黑猫投诉平台,舆论监控系统”

黑猫投诉平台,舆论监控系统 BuzzMonitor https://github.com/nangongchengfeng/BuzzMonitor.git 简介 "黑猫投诉"舆论监控系统是一款专为快速识别和响应网络投诉而设计的应用,旨在帮助企业或机构第一时间掌握公众意见和反馈。通过实时监控网…

C++:运算符重载和“const”成员

hello,各位小伙伴,本篇文章跟大家一起学习《C:运算符重载》,感谢大家对我上一篇的支持,如有什么问题,还请多多指教 ! 文章目录 赋值运算符重载1. 运算符重载2.赋值运算符重载第一个点第二个点&…

C++感受5-HelloWorld 函数版

借助 Hello (std::string_view XXX) 函数,快速向你心目中的女神问好。 视频 ffls08-HelloWorld-函数版 函数简述 函数用于封装程序中需要反复执行的事情。事情每一次执行时,所需要的初始数据的变化,由函数参数体现。 定义函数时所写的参数&…

小孩子不懂事,写着玩的

目录 Web攻防 特有漏洞 ASP安全 ASPX(.NET)安全 PHP安全 JavaWeb安全 JS,Node.js安全 Java安全 Python安全 通用漏洞 SQL注入 MySQL-root高权限读写注入 PostgreSQL-高权限读写注入 MSSQL-sa高权限读写执行注入 SQL注入体系 o…

虹科Pico汽车示波器 | 免拆诊断案例 | 2006 款林肯领航员车发动机怠速抖动

故障现象 一辆2006款林肯领航员车,搭载5.4 L发动机,累计行驶里程约为26万km。该车因发动机怠速抖动故障进厂维修,维修人员更换了火花塞、点火线圈及凸轮轴位置传感器,清洗了积炭和喷油器,故障依旧,于是向笔…

Linux系统硬盘读写慢,如何排查

若服务器硬盘读写慢,导致处理性能降低,用户响应慢(例如:ssh登录操作文件,处理很慢说明磁盘很慢) 1.查看硬盘是否繁忙 top 若值比较大,说明当前硬盘比较繁忙,有大量读写操作&#x…

PO框架【自动化测试】

对象:Tpshop商城 需求:更换头像 操作步骤: 个人信息–头像–上传图片–图片确认–确认保存 核心代码: # 进入frame框架[不熟] driver.switch_to.frame(driver.find_element_by_xpath(//*[id"layui-layer-iframe1"]))…

链式存储的特点与设计由来

简介 案例引入 相关术语 两种结构的区别与实现 注: 特点

迪拜Token2049展会圆满落幕,MVP成唯一MEMECOIN项目,闪耀全场!

近日,据多家媒体报道,于全球财富聚集地迪拜举行的全球性大型区块链会议TOKEN2049圆满落幕。来自全球的5000多家公司和100多个国家10000名参与者共同参会,讨论未来30年至50年关于区块链行业的宏大未来。 新晋MEMECOIN项目MAGA VP(…

希捷HDD最新财报:销售同比下降11%,环比增长6%,4Q24前景看好

Seagate Technology Holdings plc公布了截至2024年3月29日的第三财季财务业绩。 “随着云需求改善、我们强大的运营纪律和价格执行,希捷3月季度的营收增长了6%,非GAAP每股收益较上一季度翻了一番多。这种组合为我们市场复苏时回归目标利润率奠定了基础。…

【C++】string常用函数总结及其模拟实现

目录 一、String的构造 二、String的大小和容量 三、String的字符串比较 四、string的访问 五、String的字符插入 六、string拼接字符串 七、string的删除 八、string的查找 九、string的分割 模拟实现 一、String的构造 string():生成空字符串&#xff1…