之前已经使用python+unittest+jekenis实现一个项目持续集成每天定时run,测试用例全是写在代码里,后面想使用Excel的方式实现用例。在我找了两天时间的博客加上自己不断的尝试,后来在参考了JoyceChen_的文章结合自己的实际项目简单的实现了从Excel中断区测试用例,把执行结果反写进测试用例中并生成一个当前时间的测试报告,废话少说上代码
1.目录结构:
代码结构很简单,先实现最简单的 吧,然后再改造
2.interfacetest.py
#__coding:utf-8 _
import requests
import xlrd
import json
import xlwt
from xlrd import open_workbook
#打开一个目录下的Excel
def xlsx_open(filepath):
book=xlrd.open_workbook(filepath)
print(book)
return book
#读取测试用例每一列值并赋值给一个参数,这些参数然后在存放到object字典中
def xlsx_getRow(sheet,row):
object={}
object[‘method’]=sheet.cell_value(row,2)
object[‘host’]=sheet.cell_value(row,3)
object[‘path’]=sheet.cell_value(row,4)
object[“url”]=object[‘host’]+object[‘path’]
object[‘params’]=sheet.cell_value(row,5)
object[‘header’]=sheet.cell_value(row,6)
object[‘code’]=sheet.cell_value(row,7)
object[‘expected_code’]=sheet.cell_value(row,8)
if object[‘header’]"":
object[“header”]=None
print(object)
return object
#接口执行get和post请求
def xlsx_request(object):
try:
if object[‘method’]“post”:#post请求类型
#json.loads是把变量json格式化
response=requests.post(url=object[‘url’],data=json.loads(object[‘params’]),headers=object[‘header’],cookies=object[‘cookies’])
result=response.json()
elif object[‘method’]==“get”:#get请求类型
response = requests.get(object[“url”], object[“params”], headers=object[“header”],cookies=object[“cookies”])
result=response.json()
else:
print(“Unknow method”+object[‘method’])
except requests.exceptions.ConnectTimeout as e:
result={object[‘code’]:“timeout”}
print(result)
return result
#设置检查点没有通过时标记红色,通过标记绿色
def xlsx_set(sheet,row,col,value,red=False):
style=“font:colour_index red;”
style1=“font:colour_index green;”
if red==False:
sheet.write(row,col,value,xlwt.easyxf(style1))
else:
sheet.write(row,col,value,xlwt.easyxf(style))
#保存文件方法
def xlsx_save(book,filepath):
book.save(filepath)
#遍历测试用例和检查点
def dosheet(brd,bwt,sheetIndex,cookies=None):
#获取测试用例文件第几个sheet
brd_steet=brd.sheets()[sheetIndex]
print(“brd_steet=”,brd_steet)
#获测试结果Excel 的第几个sheet
bwt_sheet=bwt.get_sheet(sheetIndex)
print(“bwt_sheet=”,bwt_sheet)
#获取测试用例共有多少条
count=brd_steet.nrows
for i in range(1,count):
object=xlsx_getRow(brd_steet,i)
object[‘cookies’]=cookies
result=xlsx_request(object)
#检查检查点是否通过,通过给pass 不通过给fail
if result.get(object[‘code’])==object[‘expected_code’]:
xlsx_set(bwt_sheet,i,9,“pass”,False)
xlsx_set(bwt_sheet,i,10,result[object[‘code’]],False)
else:
xlsx_set(bwt_sheet,i,9,“fail”,True)
xlsx_set(bwt_sheet,i,10,result[object[‘code’]],False)
代码我加了很详细的备注,我是按照我理解的加的配置,中间还加了一些测试print的语句帮助理解程序是怎么走的。
3.runtest.py
这里是run的代码。
这个是我case的文件。
上面这些是在python3.4版本运行的。我也是刚刚跑通才写的这篇文章希望能帮助也在学习的同学,后面我会把我上面说的已经再run的项目也写一篇文章,后面也会不断更新细化今天这个例子希望早日使用到项目run起来。