前期学习回顾:
unittest框架学习(一)
unittest框架学习(二)
从前面的学习中,我们知道unittest框架中,一个test开头的函数就是一个用例,那如果有超级多的用例,是不是就要创造超级多的test开头的函数,这样太不现实了,所以就有ddt驱动+excel结合来简化我们的工作量。
由于暂时没有实例,我就设置一个简单的场景,输出excel中每条用例的参数值
表格‘yuanchandi.xlsx’内容如下
第一步:建一个文件Read_Excel.py,脚本内容如下:
from selenium import webdriver
import time
import xlrd
class ReadExcel():
def __init__(self, excelPath, sheetName="Sheet1"):
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("只有表头,请增加用例内容")
else:
r = []
j=1
for i in range(self.rowNum-1):
s = {}
# 从第二行获取每一行的值
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
第二步,新建文件Run_More.py
import ddt
import unittest
from Read_Excel import ReadExcel
import os
from selenium import webdriver
import time
curpath = os.path.dirname(os.path.realpath(__file__))
excelpath = os.path.join(curpath,"yuanchandi.xlsx")
print(excelpath)
data = ReadExcel(excelpath)
testdata = data.dict_data()
@ddt.ddt
class Tian_goods(unittest.TestCase):
def setUp(self):
print('开始测试')
def tearDown(self):
print('结束测试')
#这个test开头的函数就是我们跑每个用例通用的方法,只是每次参数不同
@ddt.data(*testdata)
def test_yuan(self,data):
print(data['原产地名称'],data['商品编号'])
if __name__ == '__main__':
unittest.main()
看下运行输出结果:显示跑了四条用例,跟我们excel加入的用例数一致
其实这个组合,比较多用在接口自动化测试中,我之前有写过一篇:Unittest+ddt+excel实现接口自动化测试
在实际工作中,我觉得它也比较多的用于造数据,就比如现在我们的网站是空的,在推广前需要造大批数据,在不麻烦开发大佬的情况下,运营的同事可以通过这个组合去写脚本,把数据放在excel文件,即可快速完成。