一、需求
本文僅適用於http get and post 方法,其他另尋~
1、自動讀取同目錄下的xls文件中的用例
2、自動請求接口,返回測試結果
二、環境
windows10 + python 27
三、目錄結構
interface_testcase
|----interface_test.py
|----test.xls
|----md5.jar
四、test.xls中,sheel1命名爲interface_testCase,表格如下
test_no | host_name | Path | port | Body | expected_results | request_fun | result | respones_stauts | respones_body | sys_time |
---|---|---|---|---|---|---|---|---|---|---|
test-001 | http://127.0.0.1:8000 | /index/ | {msg:這是第一個預期的request} | |||||||
五、code
#!/usr/bin/env python
# coding=utf-8
import urllib
import xlrd
from xlutils.copy import copy
from jpype import *
import os
import time
class InterFaceTestTool:
def __init__(self, case_no=None, ip=None, path=None, port=None, body=None, expected_results=None, fun=None
, result=None, response_result=None):
self.case_no = case_no # 用例編號
self.ip = ip # ip或域名
self.path = path # 請求路徑
self.port = port # 端口號
self.body = body # 請求參數
self.ex_result = expected_results # 預期響應結果
self.result = result # 測試結果
self.fun = fun # 請求方法 get or post
self.re_result = response_result # 響應數據
self.row_no = None # xls中的行數
def get_excel_msg(self):
'''
打開excel文件,讀取文件中interface_testCase中的數據
:return: 返回數據list
'''
try:
data = xlrd.open_workbook('test.xls') # 這裏讀取測試用例的文件,可以做參數化
table = data.sheet_by_name(u'interface_testCase')
self.row_no = table.nrows
self.ncols = table.ncols
case_list = []
for i in range(1, self.row_no):
test_case = table.row_values(i)
case_list.append(test_case)
return case_list
except Exception, e:
print u'打開的文件錯誤:%s' % e
def write_xls(self):
'''
把結果數據保存到excel中 ,已經調試OK了
:return:
'''
file_name = 'test_baidu.xls' # 讀取測試用例文件
try:
data = xlrd.open_workbook(file_name)
c_data = copy(data)
sheet = c_data.get_sheet(0)
for i in range(1, self.row_no):
sheet.write(i, 7, self.result.decode('gbk'))
sheet.write(i, 8, self.re_result.decode('gbk'))
sys_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
sheet.write(i, 9, sys_time)
os.remove(file_name)
c_data.save('test_baidu.xls') # 保存測試用例文件中的結果
print '文件保存成功---------> OK'
except Exception, e:
print u'保存文件錯誤: %s' % e
def send_data(self):
'''
請求excel中讀取到的數據
:return: 返回相應狀態和測試結果
'''
data = self.get_excel_msg()
for i in range(len(data)):
case_list = data[i]
for j in range(1, self.row_no):
self.case_no = case_list[0]
self.ip = case_list[1]
self.path = case_list[2]
# self.port = repr(int(case_list[3]))
self.body = repr(case_list[4])
self.ex_result = case_list[5]
self.fun = case_list[6]
if self.fun == 'get':
url = self.ip + self.path + '?' + self.path
request_getfun = urllib.urlopen(url)
if request_getfun.code == 200:
html_getfun = request_getfun.readlines()
if self.ex_result == html_getfun:
print u'第%s條測試通過-----------> OK' % self.case_no
self.result = u'通過'
self.write_xls()
print self.fun
else:
print u'第%s條測試未通過------------> NO' % self.case_no
self.result = u'未通過'
self.re_result = html_getfun
print self.fun
else:
print u'請求狀態碼錯誤,%s' % request_getfun.code
else:
url = 'http://' + self.ip + self.path
post_data = urllib.urlencode(self.body)
request_postfun = urllib.urlopen(url, post_data)
if request_postfun.code == 200:
html_postfun = request_postfun.readlines()
if self.ex_result == html_postfun:
print u'第%s條用例通過-----------> OK' % self.case_no
self.result = u'通過'
self.write_xls()
print self.fun
else:
print u'第%s條用例未通過-----------> NO' % self.case_no
self.result = u'未通過'
self.write_xls()
self.re_result = html_postfun
print self.fun
else:
print u'請求狀態碼錯誤,%s', request_postfun.code
break
# def get_code(self, secret_body, *body):
# import copy
# '''
# 調用解密jar包,把接口返回數據解密,並把數據提取出來
# '''
# jarpath = os.path.join(os.path.abspath('.'), '../driver/')
# startJVM("C:/Program Files/Java/jre1.8.0_131/bin/server/jvm.dll", "-ea",
# "-Djava.class.path=%s" % (jarpath + 'com.lottery.decrypt-0.1.jar'))
# jd = JPackage("com.medivh").HelloWorld()
#
# # 深拷貝,取出解密後的數據
# jiemi_body = copy.deepcopy(jd.show())
# shutdownJVM()
#
# # 返回數據提取出驗證碼
# data = jiemi_body.get('data')
# code = data.get('code')
# return code
if __name__ == '__main__':
run = InterFaceTestTool()
run.send_data()
PS:接口加密部分還沒寫好~基本方法已經寫好了,有興趣的朋友可以自己加工一下
debug ---> IOError: [Errno socket error] [Errno 10061] #主機需要主動開啓測試端口或者換個真實的接口測試
"""
┏┓ ┏┓
┏━┛┻━━━━┛┻━┓
┃ ☃ ┃
┃ ┳┛ ┗┳ ┃
┃ ┻ ┃
┗━┓ ┏━┛
┃ ┗━━━┓
┃ 神獸保佑 ┣┓
┃ 永無BUG!┏┛
┗┓┓┏━━━━┳┓┏┛
┃┫┫ ┃┫┫
┗┻┛ ┗┻┛
"""