在实际项目中,很多时候需要重复性测试而非一次性测试,大量的重复测试才能体现出自动化测试效率和价值。
以一个小案例演示一下‘如何运用DDT框架结合excel文件类型的测试数据来实现自动化测试’,测试场景是模拟添加用户登录。
项目文件结构如图所示:
测试数据文件testdata.xlsx的内容如图所示:
excel函数文件dataexcel.py内容如下,作用是提取测试数据并返回一个列表,而每个列表元素是一个字典对象。
# coding = utf-8
import xlrd
def readExcel(excelName, sheetName):
wb = xlrd.open_workbook(excelName)
sheet = wb.sheet_by_name(sheetName)
# 读取第一行的数据
row1 = sheet.row_values(0)
data = []
for row in range(1, sheet.nrows):
data_dic = {}
value_list = sheet.row_values(row)
for col in range(sheet.ncols):
data_dic[row1[col]] = value_list[col]
data .append(data_dic)
return data
if __name__ == '__main__':
data = readExcel('testdata.xlsx', 'userInfo')
print(data)
测试代码文件test.py的内容如下所示,通过这个脚本来实现循环测试,比较用户名字段与密码字段对应的字符串是否相同。如果不同,即测试失败,直到所有测试数据循环结束。
# coding = utf-8
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
import ddt
from dataexcel import readExcel
excelData = readExcel('testdata.xlsx', 'userInfo')
print(excelData)
@ddt.ddt
class test_se(unittest.TestCase):
def setUp(self) -> None:
print('开始测试啦')
self.driver = webdriver.Chrome()
self.driver.get('https://passport.ctrip.com/user/login?')
@ddt.data(*excelData)
def test_01(self, data):
self.driver.find_element(By.ID, 'nloginname').send_keys(data['username'])
self.driver.find_element(By.ID, 'npwd').send_keys(data['password'])
print(data)
self.assertEqual(data['username'], data['password'])
def tearDown(self) -> None:
self.driver.quit()
print('测试结束啦')
if __name__ == '__main__':
unittest.main()
测试结果:三次测试方法的执行都是失败的,因为期望值与实际值是不相等的。