总结大部分人做接口自动化的流程后,发现基本上都是:python + requests做接口请求;Excel用来存储用例;HTMLTestRunner生成测试报告;Jenkins完成定时任务。
其实在完成这个流程的过程中,代码编写只占用了一小部分的时间,大部分的时间都浪费在搭建环境和用例编写上。这里我记录一些遇到的问题。
一、接口请求
(1)配置请求方法:get 和 post 方法简单封装,header中参数设置
# _*_coding:utf-8 _*
import requests
#get请求
def get(url,querystring):
headers = requestHeader()
response = requests.request("GET", url, headers=headers, params=querystring)
# print response.url
return response
#post请求
def post(url,payload,querystring):
headers = requestHeader()
response = requests.request("POST", url, data=payload, headers=headers, params=querystring)
# print response.url
return response
#设置请求的header
def requestHeader():
headers = {
'Content-Type': "application/json",
'Cache-Control': "no-cache"
}
return headers
(2)针对post请求的body,开始时使用的时text的dict去请求,请求错误总是返回:"请求参数错误",后来使用postman进行调试,直接复制已经转换成json格式的body传参进行请求,终于成功。
可以通过这个方式去转换一些有问题的body。
(3)body转换为json的另一种方式:通过ast模块进行转换(推荐)
import ast
caseParams = ast.literal_eval(caseParams)
(4)通过openpyxl模块获取用例Excel
#用例名
caseName = caseFile.getCellVaule(ws,rowIndex,1)
#url
caseUrl = caseFile.getCellVaule(ws,rowIndex,3)
#请求方式
caseMethod = caseFile.getCellVaule(ws,rowIndex,4)
#参数
caseParams = caseFile.getCellVaule(ws,rowIndex,5)
备注:在获取用例信息的过程中,需要对一些参数进行容错
A:是否有参数,若无参数,需传空;
B:get参数和post body需要分开处理:
get的参数是以 '¶m'形式明文拼接在url中;
#将请求参数转换为json格式
caseParams = ast.literal_eval(caseParams)
keys = dict(caseParams).keys()
values = dict(caseParams).values()
for x in xrange(0,len(keys)):
tempQuery[keys[x]] = values[x]
post的body需要放在dict中进行传参;
caseParams = ast.literal_eval(caseParams)
(5)分割所需的参数,将结果写入到文件内
#请求返回的内容,转换为json格式
text = json.loads(response.text)
caseFile.setCellValue(ws,rowIndex,6,response.text)
#URL请求耗时
spendTime = response.elapsed.total_seconds()
caseFile.setCellValue(ws,rowIndex,7,spendTime)
#请求结果状态
statue = response.status_code
caseFile.setCellValue(ws,rowIndex,8,statue)
self.assertEqual(statue, 200)
(6)将请求结果写入html文件,并展示
(7)配置到Jenkins,定时执行查看接口的可达性