环境介绍
操作系统:win7
语言:python2.7
编写目的
公司有一个新系统要上线,前期开发提供了接口文档和一个接口验证的工具,但这个工具只能验证一个接口,请求的参数也需要请求一次写一次,返回的结果也没有进行保存,正好, 当时在学习 python,就想到自己写一个脚本进行测试
使用到的包
import xlrd —— 用来获取 EXCEL 数据,生成请求的 json 串
import requests —— 接口请求用的,很好用
import os,time —— 用来把接口返回的数据存储到本地 txt 文件中
编写思路
接口请求的参数我想的是直接从 excel 文件里读取,由于公司接口请求的值都是 json 串,于是我就在 excel 里直接定义参数名、参数值。当然,我还想一个文件里对参数进行多次的定义,为了区分值的结束,就加了一个 end 进行判断。另外,测试时要对多个接口进行请求,我就决定,每个 EXCEL 只针对一个接口,要批量执行时,直接获取用例文件夹下的 EXCEL 就可以了,返回的结果也是 json 串,由于太长了,直接我就存到 txt 文件里,
具体代码
#coding=utf-8
import xlrd
import requests
import os,time
def apidata(xls):
data = xlrd.open_workbook(xls)
table = data.sheets()[0]
nrows = table.nrows #获取行数
url= table.cell(1,2).value #获取URL
req= table.cell(3,2).value #获取接口方式
data=[]
data1={}
for i in range(nrows ): #循环获取行值
try:
apiname=table.cell(i+1,0).value #获取参数名
apiname1=apiname.encode("utf-8")
if apiname1 == "end" or apiname1 == "" :
print "读取到end,进行参数调整"
data.append(data1)
data1={}
continue
apidata=table.cell(i+1,1).value #获取参数的值
apidata1=apidata.encode("utf-8")
data1[apiname1]=apidata1
except Exception:
pass
print "获取接口参数成功"
return data,url,req #返回参数以及URL
def getfile(name): #获取目录下的所有excel文件名
test=os.listdir(name) #设置文件目录
test.sort() #对目录下文件进行排序
filename=[] #定义存excel文件的列表名
for i in test: #对目录下的文件进行循环
x= i.split(".").pop() #获取文件的扩展名
if x =="xlsx" or x =="xls": #判断扩展名
filename.append(i) #把当前文件添加到列表中
return filename
def log(r1,t1): #保存值到本地
x=time.strftime("%Y-%m-%d", time.localtime())
x1=t1+x+".txt"
fo = open(x1,"a")
fo.write(r1);
def requtest(api,url,ruq):
if ruq =='post':
r = requests.post(url, api)
elif ruq == "get":
r = requests.get(url, api)
else:
print "没有设置协议类型,请设置"
return r
def test():
dir1 = 'excel存放的目录'
xls=getfile(dir1)
for i in xls:
i= i.decode("gbk")
print i,"准备执行"
#try:
api,url,ruq = apidata(dir1+i,deskey)
url1=http+url #生成完成接口地址
print "请求地址为:"+str(url1)
num=0
for j in (api ):
num = num + 1
y= mtest.getpar(url, j, key) #生成Parameters
x=requtest(y,url1,ruq)
z= i.split(".")[0]
runtest(num,x,z,y)
#jc(x,y,i,url)
print i,"接口用例执行完成,准备执行下一个用例"
print "目录下所有用例执行完成,执行结果信息请查看日志文件"
for i in range(2):
num = 'thread'+str(i)
num = test()
excel 文件格式如下