本文目錄一覽:
- 1、python 的介面自動化測試使用的核心庫是哪一個?
- 2、怎麼搭建 python 的介面自動化測試框架?
- 3、利用Python如何實現數據驅動的介面自動化測
- 4、如何創建 python+requests介面自動化測試框架
- 5、怎麼基於python實現介面自動化
python 的介面自動化測試使用的核心庫是哪一個?
requests 庫,requests是使用 Python 編寫的,基於 urllib 實現,可以調用該庫的部分 API 直接向伺服器發送請求,並接收響應(角色定位: 相當於瀏覽器),一般可以在介面自動化測試時調用。當初在黑馬程序員學的初級知識。
怎麼搭建 python 的介面自動化測試框架?
1.框架搭建
1.1 將struts2中的jar文件導入到項目中
commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar,freemarker-2.3.15.jar,ognl-2.7.3.jar
struts2-core-2.1.8.1.jar,xwork-core-2.1.6.jar
1.2 將struts.xml文件拷貝到項目的src目錄下
1.3 修改web.xml文件
添加:
filter
filter-namestruts2/filter-name
filter-classorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter/filter-class
/filter
filter-mapping
filter-namestruts2/filter-name
url-pattern/*/url-pattern
/filter-mapping
2.action中方法的調用方式
2.1 自動方法調用(只能調用execute)
2.2 指定方法調用(通過設置action標籤中的method屬性)
2.3 動態方法調用(在調用時,在action後加!方法名稱,如:login!deletUser)
注意:constant name=”struts.enable.DynamicMethodInvocation” value=”true” /
2.4 通配符調用
3. action接收客戶端參數的方式
3.1 直接在action中定義參數變數,並生成set和get方法
3.2 定義接收參數的類
注意:都要為action的成員變數提供get和set方法
3.3 讓action實現ModelDriven介面,並實現裡面的getModel方法
4.獲取request,session,application的方式
4.1 用ActionContext獲取,實際上獲取到的都是Map對象
4.2 用ServletActionContext獲取,獲取到的是基於Servlet API的對象
利用Python如何實現數據驅動的介面自動化測
這裡考慮把API、參數、以及預期結果預行在格式化的CSV里保存,利用csv組件從CSV里讀取URL、參數以及預期結果,Requests組件發起請求,將響應結果與預期結果進行比對,最後把比對結果寫到結果CSV。
如何創建 python+requests介面自動化測試框架
工作原理: 測試用例在excel上編輯,使用第三方庫xlrd,讀取表格sheet和內容,sheetName對應模塊名,Jenkins集成服務發現服務moduleName查找對應表單,運用第三方庫requests請求介面,根據結果和期望值進行斷言,根據輸出報告判斷介面測試是否通過。
1. 數據準備
數據插入(容易實現的測試場景下所需外部數據)
準備sql (介面需要重複使用,參數一定得是變數)
2.集成部署(運維相關了解即可)
平滑升級驗證腳本加入自動化
3.自動化框架實現
調用mysql
excel遍歷測試用例
requests實現介面調用
根據介面返回的code值和Excel對比
報告反饋
暴露服務
寫一個簡單登錄的介面自動化測試
代碼的分層如下圖:
coding.png
一、寫一個封裝的獲取excel表格的模塊
excel.png
代碼實現如下:
# !/usr/bin/python
# -*- coding: UTF-8 -*-
# 基礎包:excel的封裝
import xlrd
workbook = None
def open_excel(path):
“””打開excel”””
global workbook
if (workbook == None):
workbook = xlrd.open_workbook(path, on_demand=True)
def get_sheet(sheetName):
“””獲取行號”””
global workbook
return workbook.sheet_by_name(sheetName)
def get_rows(sheet):
“””獲取行號”””
return sheet.nrows
def get_content(sheet, row, col):
“””獲取表格中內容”””
return sheet.cell(row, col).value
def release(path):
“””釋放excel減少內存”””
global workbook
workbook.release_resources()
del workbook
代碼封裝後當成模塊引用,這還是最開始呢。
二、引用log模塊獲取日誌
準備工作:
需要一個日誌的捕獲,包括框架和源碼拋出的expection。
代碼如下:
#!/usr/bin/python
# -*- coding: 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#
#-*- coding: 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()
code = response.get(“code”)
return code
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
# -*- coding: UTF-8 -*-
# 腳本功能:全部變數
import time
import uuid
CASE_NUMBER = 0 # 用例編號
CASE_NAME = 1 # 用例名稱
CASE_DATA = 2 # 用例參數
CASE_URL = 3 # 用例介面地址
CASE_METHOD = 4 # 用例請求類型
CASE_CODE = 5 # 用例code
CASE_HEADERS = 6 # 用例headers
SQL_ROW = 0 # 預執行SQL的行號
SQL_COL = 1 # 預執行SQL的列號
五、寫一個run文件:只是用來執行的,業務和代碼剝離。
代碼如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 驗證包:介面測試腳本
import sys
import core.tezLog as log
import function.common as common
logging = log.getLogger()
“””1.外部輸入參數”””
path = sys.path[0] # 當前路徑
module = sys.argv[1] # 服務模塊名
url = sys.argv[2] # 服務地址
host = sys.argv[3] # 資料庫地址
user = sys.argv[4] # 資料庫用戶名
password = sys.argv[5] # 資料庫密碼
db = sys.argv[6] # 資料庫名稱
“””2.根據module獲取Sheet”””
logging.info(“————– Execute TestCases —————“)
sheet = common.get_excel_sheet(path + “/” + common.filename, module)
“””3.數據準備”””
logging.info(“————– Prepare data through MysqlDB ————–“)
sql = common.get_prepare_sql(sheet)
common.prepare_data(host=host, user=user, password=password, db=db, sql=sql)
“””4.執行測試用例”””
res = common.run(sheet, url)
logging.info(“————– Get the result ———— %s”, res)
“””這裡的res是我們平滑升級的時候需要返回結果為TRUE才會繼續下面走。”””
六、查看測試報告(部署到jenkins會通過控制台查看)
怎麼基於python實現介面自動化
若是WEB-UI,或許可以考慮使用 splinter 或直接使用 selenium 而假如是WIN-UI,那麼就通過獲取目標句柄後設置相應數據;或者直接模擬系統的鍵盤輸入。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/257472.html