实现目标:
以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)