實現目標:
以excel接口用例爲依據,實現接口的自動化測試,並生成結果
使用場景:
1.根據接口測試用例模板,編寫相應用例
2.調用腳本,自動化執行用例,並自動生成用例結果
腳本分析:
1.使用的庫方法:表格處理:xlrd,xlwt,xlutils 接口處理:cookielib, urllib, urllib2
2.各文件功能:
讀取EXCEL用例中和接口相關的數據,篩選出了接口地址、請求頭、請求參數、預測結果
將獲取的參數拼接成請求,即執行用例獲取接口返回數據
腳本間關係
用例模板: ( 提取碼:8fnk )
- 用例在TestCase表單中填寫
- 請使用xls格式保存。
腳本代碼:
Control.py
# coding=utf-8
"""
@ProjectName:test
@FileName :Control.py
@Time :2020/2/25 18:28
@Author :Qred
"""
from ReadTestCase import ReadTestCase
import DoCase
import WriteResults
def Start(filename = "C://Users//Qred//Desktop//接口測試模板.xls", Report = "C://Users//Qred//Desktop//接口測試模板1.xls"):
# 執行用例獲取結果
print ('the API test start! ')
# 獲取參數
workbook, Cases = ReadTestCase(filename)
opener = DoCase.Cookies()
expectedResults, actualResults = [], []
# 執行用例
for case in Cases:
# 請求地址
url = case[0]
# 請求頭
header = case[1]
# 請求參數
values = case[2]
# 預期結果
expectedResult = case[3]
expectedResults.append(expectedResult)
actualResult = DoCase.DoCase(opener, url, values, header)
actualResults.append(actualResult)
# 保存測試結果
num = Cases.__len__()
caseResults = []
workbookWr, workSheetWr = WriteResults.SheetWr(workbook)
# 用例結果
for i in range(num):
expectedResult = expectedResults[i]#.decode('utf-8')
actualResult = actualResults[i].decode('utf-8')
# 測試結果
if actualResult.find(expectedResult) >= 0 or actualResult.rfind(expectedResult) >= 0 :
caseResult = "PASS"
else:
caseResult = "FAIL"
# 結果存儲
row = 1 + i
clox = 8
WriteResults.WriteResults(workSheetWr, row, clox, actualResult)
clox = 9
WriteResults.WriteResults(workSheetWr, row, clox, caseResult.decode('utf-8'))
print ('the API test finished! ')
WriteResults.SheetSv(workbookWr, Report)
if __name__ == "__main__":
Start()
ReadTestCase.py
# coding=utf-8
"""
@ProjectName:test
@FileName :ReadTestCase.py
@Time :2020/2/25 15:32
@Author :Qred
"""
import xlrd
def ReadTestCase(filename):
#讀取用例
workbook = xlrd.open_workbook(filename.decode('utf-8'), formatting_info=True)
# formatting_info=True保留原表格格式
# workSheets = workbook.sheet_names()
workSheet = workbook.sheet_by_name("TestCase")
# 按行讀取數據
nrows = workSheet.nrows
cases = []
for i in range(1,nrows):
# 存儲測試參數
rows = workSheet.row_values(i)
cases.append(rows[4:8])
return workbook, cases
DoCase.py
# coding=utf-8
"""
@ProjectName:test
@FileName :DoCase.py
@Time :2020/2/25 15:32
@Author :Qred
"""
import cookielib
import urllib, urllib2
def Cookies():
# 獲取cookie
cj = cookielib.CookieJar()
processor = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(processor)
urllib2.install_opener(opener)
return opener
def DoCase(opener, url, values, header):
# 執行測試用例
# http請求拼接
if len(url) != 0:
if len(values) == 0:
data = None
else:
values = eval(values)
data = urllib.urlencode(values)
if len(header) == 0:
header = {}
else:
header = eval(header)
req = urllib2.Request(url, data=data, headers=header)
res = opener.open(req)
if res.code == 200:
res = res.read()
else:
res = 'error Code : {} Msg : {}'.format(res.code, res.msg)
else:
res = 'error : param URL '
return res
WriteResults.py
# coding=utf-8
"""
@ProjectName:test
@FileName :WriteResults.py
@Time :2020/2/25 15:32
@Author :Qred
"""
from xlutils.copy import copy
def SheetWr(workbook):
# 獲取表格對象
workbookWr = copy(workbook)
workSheetIndex = workbookWr.sheet_index("TestCase")
workSheetWr = workbookWr.get_sheet(workSheetIndex)
return workbookWr,workSheetWr
def WriteResults(workSheetWr, rows, clox, value):
# 寫入用例結果
workSheetWr.write(rows, clox, value)
def SheetSv(workbookWr, filename):
# 保存表格
workbookWr.save(filename)