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

總結大部分人作接口自動化的流程後,發現基本上都是:python + requests作接口請求;Excel用來存儲用例;HTMLTestRunner生成測試報告;Jenkins完成定時任務。html

其實在完成這個流程的過程當中,代碼編寫只佔用了一小部分的時間,大部分的時間都浪費在搭建環境和用例編寫上。這裏我記錄一些遇到的問題。python

1、接口請求
(1)配置請求方法:get 和 post 方法簡單封裝,header中參數設置json

# _*_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傳參進行請求,終於成功。
WechatIMG12.jpegapp

能夠經過這個方式去轉換一些有問題的body。post

(3)body轉換爲json的另外一種方式:經過ast模塊進行轉換(推薦)測試

import ast
caseParams         =     ast.literal_eval(caseParams)

(4)經過openpyxl模塊獲取用例Excel
Screen Shot 2018-05-21 at 3.09.32 PM.pngurl

#用例名
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中;spa

#將請求參數轉換爲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)分割所需的參數,將結果寫入到文件內code

#請求返回的內容,轉換爲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文件,並展現
WechatIMG13.jpeg

(7)配置到Jenkins,定時執行查看接口的可達性

Screen Shot 2018-05-21 at 3.22.19 PM.png

Screen Shot 2018-05-21 at 3.22.54 PM.png

相關文章
相關標籤/搜索