python+requests+Excel+Jenkins接口自动化

总结大部分人做接口自动化的流程后,发现基本上都是: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传参进行请求,终于成功。
python+requests+Excel+Jenkins接口自动化

可以通过这个方式去转换一些有问题的body。

(3)body转换为json的另一种方式:通过ast模块进行转换(推荐)

import ast
caseParams         =     ast.literal_eval(caseParams)

(4)通过openpyxl模块获取用例Excel
python+requests+Excel+Jenkins接口自动化

#用例名
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的参数是以 '&param'形式明文拼接在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文件,并展示
python+requests+Excel+Jenkins接口自动化

(7)配置到Jenkins,定时执行查看接口的可达性

python+requests+Excel+Jenkins接口自动化

python+requests+Excel+Jenkins接口自动化

相关推荐