服務端測試之關聯的解決思路
在整體的測試效率而言,API測試技術是提升測試效率最有效的手段之一,因為它的執行效率是非常高的,
另外一點就是前後端的分離開發的模式,也需要我們更多的精力和時間投入到API的測試技術以及API的測試技
術在企業的落地和應用。當然,這僅僅是功能層面的,還需要考慮非功能的點,比如佇列,排程機制,服務
的效能測試,穩定性的因素,這些是非常多的。在本篇文章中,只單純的考慮API測試技術中關於關聯的解決
思路和案例應用。API測試的核心,其實並不在於單個API的測試,單個API無法保障業務的覆蓋度,所以我們更
多需要結合業務場景來測試這些點,但是一旦結合具體的業務場景,也就涉及到關聯的思路,所謂關聯,其實
我們可以理解為上個API的輸出是下個API的輸入部分。下面結合主流的測試工具以及程式碼來演示這部分的具體
解決方案和案例實戰。
下面的原始碼主要顯示的是一個訂單的微服務,我們需要在登入的情況下才能夠檢視訂單的明細資料,也
就是說在登入成功後,呼叫訂單明細的接口才可以返回訂單明細的資料,如果未登入的情況下,那麼就返回401
的的錯誤資訊。具體流程可以詳細的描述為:登入成功,返回登入成功後的token的資訊,在訪問下個介面的時候
需要帶上登入成功返回的token值的資訊,才可以正常的訪問訂單明細,而且有一點需要特別注意的是每次登入成
功後返回的token都是隨機的字串,並且需要保持訪問介面的token與登入成功返回的token值一致,其實解決
問題的思路是非常簡單的,就是使用關聯的思路來進行解決。案例原始碼具體如下:
from flask import Flask,make_response,jsonify,abort,request from flask_restful import Api,Resource from flask import Flask from flask_jwt import JWT, jwt_required, current_identity from werkzeug.security import safe_str_cmp app=Flask(__name__) app.debug = True app.config['SECRET_KEY'] = 'super-secret' api=Api(app=app) orders=[ {'id':1,'author':'wuya','bookName':'Python介面自動化測試實戰','done':True,'payType':'支付寶','price':69.9}, ] class User(object): def __init__(self, id, username, password): self.id = id self.username = username self.password = password def __str__(self): return "User(id='%s')" % self.id users = [ User(1, 'wuya', 'asd888') ] username_table = {u.username: u for u in users} userid_table = {u.id: u for u in users} def authenticate(username, password): user = username_table.get(username, None) if user and safe_str_cmp(user.password.encode('utf-8'), password.encode('utf-8')): return user def identity(payload): user_id = payload['identity'] return userid_table.get(user_id, None) jwt = JWT(app, authenticate, identity) class Order(Resource): decorators=[jwt_required()] def get(self): return jsonify({'status':0,'msg':'ok','datas':orders}) api.add_resource(Order,'/v1/order') if __name__ == '__main__': app.run(debug=True,host='0.0.0.0')
PostMan的關聯解決思路
在清楚了業務場景以及思路後,下來具體使用PostMan測試工具來演示下它的應用,PostMan是非常主流的
API測試工具,在日常的研發過程中測試開發和開發同學都會使用到這個工具來驗證介面的準確性。下面詳細的
演示下針對關聯的解決思路。
獲取token
首先我們需要在PostMan測試工具中獲取token值的資訊,訪問的介面地址資訊為/auth,具體如下:
在如上中可以看到,請求成功後,會返回access_token值的資訊,下來需要思考的點就是在PostMan測試工具中在
tests中獲取響應資料中的access_token的值,並且在tests中定義一個變數來儲存獲取的access_token的值,在tests
的中可以使用JS的程式碼來獲取響應的資料,也就是通過JSON.parse()把JSON字串轉位JSON物件,然後定義一個
變數來儲存獲取到的JSON物件,然後在這個變數中再使用PostMan中的environment來定義一個變數來儲存獲取到的
access_token的值,具體過程如下:
//把JSON字串轉為JSON的物件
var jsonData=JSON.parse(responseBody)
console.log(jsonData)
具體在PostMan的資訊如下展示:
在如上的截圖中我們可以看到已經獲取到了響應的資料,下來就是在響應資料中分離出access_token的值,並且定義
一個變數來儲存獲取到的access_token,更新後的JS程式碼為:
//把JSON字串轉為JSON的物件
var jsonData=JSON.parse(responseBody)
console.log(jsonData)
//定義token變數來儲存分離出的access_token
pm.environment.set("token", jsonData.access_token);
//獲取定義的變數值校驗是否獲取
console.log(pm.environment.get("token"))
整體在截圖資訊如下所示:
呼叫變數
啊啊啊
歡迎關注微信公眾號“Python自動化測試”