ase(path):
"""釋放excel減少內存"""
global workbook
workbook.release_resources()
del workbook
代碼封裝后當成模塊引用,這還是最開始呢。
二、引用log模塊獲取日志
準備工作:
需要一個日志的捕獲,包括框架和源碼拋出的expection。
代碼如下:
#!/usr/bin/python
# -*- 買粉絲ding: UTF-8 -*-
# 基礎包:日志服務
import logging
import time
def getLogger():
global tezLogPath
try:
tezLogPath
except NameError:
tezLogPath = "/data/log/apiTest/"
FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
# file = tezLogPath + time.strftime("%Y-%m-%d", time.localtime()) + ".log"
# logging.basicConfig(filename=file, level=logging.INFO, format=FORMAT)
# 開發階段為了方便調試,可不輸出到文件
logging.basicConfig(level=logging.INFO, format=FORMAT)
return logging
三、引用requests模塊接口測試
準備工作:
需要的請求類型和執行測試的方法。
代碼如下:
#!/usr/bin/python#
#-*- 買粉絲ding: UTF-8 -*-
# 基礎包:接口測試的封裝
import requests
import tezLog as log
logging = log.getLogger()
def api_test(method, url, data ,headers):
"""
定義一個請求接口的方法和需要的參數
:Args:
method - 企業名稱 str
url - 用戶昵稱 str
data - 參數 str
headers - 請求頭信息 dict
非RESTful API請求另外的請求類型實際用不到。也不安全。
"""
try:
if method == "post":
results = requests.post(url, data, headers=headers)
if method == "get":
results = requests.get(url, data, headers=headers)
# if method == "put":
# results = requests.put(url, data, headers=headers)
# if method == "delete":
# results = requests.delete(url, headers=headers)
# if method == "patch":
# results == requests.patch(url, data, headers=headers)
# if method == "options":
# results == requests.options(url, headers=headers)
response = results.json()
買粉絲de = response.get("買粉絲de")
return 買粉絲de
except Exception, e:
logging.error("service is error", e)
def run_test(sheet):
"""
定義一個執行和斷言的方法
:Args:
sheet - 服務名稱 str(excel頁腳名稱識別的)
"""
rows = excel.getRows(sheet)
fail = 0
for i in range(2, rows):
#這里為什么從第二行開始跑,因為會先執行SQL進行數據準備如之前Excel展示的空白位置
testData = excel.getContent(sheet, i, gl.CASE_DATA)
testUrl = excel.getContent(sheet, i, gl.CASE_URL)
testMethod = excel.getContent(sheet, i, gl.CASE_METHOD)
testHeaders = eval(excel.getContent(sheet, i, gl.CASE_HEADERS))
testCode = excel.getContent(sheet, i, gl.CASE_CODE)
actualCode = request.apiTest(testMethod, testUrl, testData, testHeaders)
expectCode = str(int(testCode))
failResults = ' url: ' + testUrl + ' params: ' + testData + ' actualCode: ' + actualCode + ' expectCode: ' + expectCode
if actualCode == expectCode:
logging.info("pass")
elif actualCode != expectCode:
logging.info("fail %s", failResults)
fail += 1
if fail > 0 :
return False
return True
四、關于參數中gl模塊
準備工作:
所有的參數和常量我們會整理到這個文件中,因為設計業務和服務密碼、數據庫密碼這里展示一部分。
代碼如下:
#!/usr/bin/python
# -*- 買粉絲ding: UTF-8 -*-
# 腳本功能:全部變量
import time
import uuid
CASE_NUMBER = 0 # 用例編號
CASE_NAME = 1 # 用例名稱
CASE_DATA = 2 # 用例參數
CASE_URL = 3 # 用例接口地址
CASE_METHOD = 4 # 用例請求類型
CASE_CODE = 5 # 用例買粉絲de
CASE_HEADERS = 6 # 用例headers
SQL_ROW = 0 # 預執行SQL的行號
SQL_COL = 1 # 預執行SQL的列號
五、寫一個run文件:只是用來執行的,業務和代碼剝離。
代碼如下:
#!/usr/bin/python
# -*- 買粉絲ding: UTF-8 -*-
# 驗證包:接口測試腳本
import sys
import 買粉絲re.tezLog as log
import function.買粉絲mon as 買粉絲mon
logging = log.getLogger()
"""1.外部輸入參數"""
path = sys.path[0] # 當前路徑
mole = sys.argv[1] # 服務模塊名
url = sys.argv[2] # 服務地址
host = sys.argv[3] # 數據庫地址
user = sys.argv[4] # 數據庫用戶名
password = sys.argv[5] # 數據庫密碼
db = sys.argv[6] # 數據庫名稱
"""2.根據mole獲取Sheet"""
logging.info("-------------- Execute TestCases ---------------")
sheet = 買粉絲mon.get_excel_sheet(path + "/" + 買粉絲mon.filename, mole)
"""3.數據準備"""
logging.info("-------------- Prepare data through MysqlDB --------------")
sql = 買粉絲mon.get_prepare_sql(sheet)
買粉絲mon.prepare_data(host=host, user=user, password=password, db=db, sql=sql)
"""4.執行測試用例"""
res = 買粉絲mon.run(sheet, url)
logging.info("---