大家好,今天我们开始学习自动化相关的内容,一讲到软件行业的自动化测试一般对于刚入门的同学来讲学习接口测试是一个不错的选择。入门相对容易并且在工作中去实践产生的收益也比较大,所以我们后面会来学习接口自动化测试相关内容。
今天给大家讲的是数据驱动开发,什么是数据驱动开发?让我们一起来学习一下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
@ddt
class 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 requests
from 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进行数据驱动测试
@ddt
class 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自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!