当用python结合unittest框架进行自动化测试时,有时会遇到一种情况,如登录有多组测试数据,如果我们写多条用例,代码基本上都是重复的,仅仅是数据的区别,那有没有一种类似用例模板的方法,一条用例设计,循环去取这些测试数据,下面介绍下ddt以及xlrd这两个模块的使用,pip install ddt安装
用xlrd去取我们的测试数据,一般我们用excel去维护这些数据,数据除了账号密码,也可以包括加上预期结果等,读取excel封装成一个方法或者类:
# coding:utf-8
import xlrd
class ExcelUtil():
def __init__(self, excelPath, sheetName):
self.data = xlrd.open_workbook(excelPath)
self.table = self.data.sheet_by_name(sheetName)
# 获取第一行作为key值
self.keys = self.table.row_values(0)
# 获取总行数
self.rowNum = self.table.nrows
# 获取总列数
self.colNum = self.table.ncols
def dict_data(self):
if self.rowNum <= 1:
print("总行数小于1")
else:
r = []
j=1
for i in range(self.rowNum-1):
s = {}
# 从第二行取对应values值
values = self.table.row_values(j)
for x in range(self.colNum):
s[self.keys[x]] = values[x]
r.append(s)
j+=1
return r
通过ddt模块去调用从excel里面读取的数据,去循环执行用例:
# coding:utf-8
import ddt
import unittest
from PycharmProjects.UItest.case.read_execl import ExcelUtil
filepath = "C:\\projects\\abc.xlsx"
sheetName = "Sheet1"
data = ExcelUtil(filepath, sheetName)
# print(data.dict_data())
@ddt.ddt
class Test(unittest.TestCase):
def setUp(self) -> None:
print("start")
def tearDown(self) -> None:
print("end")
@ddt.data(*data.dict_data())
def test_login(self, data):
print(data)
if __name__ == '__main__':
unittest.main()