1、什么是数据驱动?
其核心思想是将**测试数据和测试逻辑分开。**在数据驱动模型中,测试数据被全面抽象并封装到外层文件或数据库中,而测试逻辑则由测试代码负责实现。
通过这种方式,我们可以实现测试数据与测试逻辑的分离,从而更方便地对测试数据进行管理和维护。同时,数据驱动还可以帮助我们快速构建多样化的测试用例,提高测试的覆盖率和效率。
在数据驱动模型中,通常会将测试数据存储在外部数据源中,例如 Excel 文件、CSV 文件、XML 文件或数据库等。测试代码通过访问这些数据源来获取测试数据,并运行测试逻辑,最后将测试结果输出到日志文件或报告中。
2、为什么会产生ddt?
传统的单元测试往往需要编写多个测试用例方法,在每个方法中手动指定测试数据和期望结果。这种方式需要大量的人力和时间成本,并且容易出现遗漏和错误。例如测试登录功能,一个测试数据就要编写一个测试用例。
基于上述,产生了数据与测试代码分离的思想。https://blog.csdn.net/weixin_44885027/article/details/108859469
3、实例
import unittest
import ddt
import openpyxl
# 读取excel数据的函数
def read_excel(file_name):
# 打开excel文件,获取workbook对象
wb = openpyxl.load_workbook(file_name)
# 获取工作表对象
ws = wb.active
# 获取总行数和总列数
rows = ws.max_row
cols = ws.max_column
# 定义一个空列表data
data = []
# 遍历每一行和每一列,将单元格的值添加到data列表中
for i in range(1, rows + 1):
row_data = []
for j in range(1, cols + 1):
cell_value = ws.cell(row=i, column=j).value
row_data.append(cell_value)
data.append(row_data)
# 返回data列表
print(data)
return data
# 获取excel数据
data = read_excel("D:/login_data.xlsx")
@ddt.ddt
class TestLogin(unittest.TestCase):
def setUp(self):
# 模拟打开浏览器和网页的操作
print("Open browser and website")
def tearDown(self):
# 模拟关闭浏览器的操作
print("Close browser")
@ddt.data(*data)
def test_login(self, data):
# 获取用户名、密码和期望结果
username = data[0]
password = data[1]
expected = data[2]
# 模拟输入用户名和密码的操作
print(f"Input username: {username}")
print(f"Input password: {password}")
# 模拟点击登录按钮的操作
print("Click login button")
# 模拟获取实际结果的操作
# if (username == "admin" and password == 123456):
# actual = "success"
# else:
# actual = "fail"
actual = "success" if username == "admin" and password == 123456 else "fail"
print(f"Get actual result: {actual}")
# 断言实际结果和期望结果是否一致
self.assertEqual(actual, expected)
if __name__ == '__main__':
unittest.main()