1期吓、什么是Mock
模擬接口
接口Mock測試:在接口測試中,對于某些不容易構(gòu)造或者不容易獲取的接口倾芝,可以用一個模擬接口來代替
2讨勤、Mock的三種典型應(yīng)用場景
依賴的接口未實現(xiàn)
依賴的接口響應(yīng)速度慢
針對接口模擬各種異常
3、Mock的作用
可以用來解除測試對象對外部服務(wù)的依賴晨另,使得測試用例可以獨立運行
模擬異常邏輯潭千,異常邏輯往往很難觸發(fā),通過Mock可以人 為的控制觸發(fā)異常邏輯
團隊可以并行工作
4借尿、Mock實現(xiàn)的3種方式
接口mock實現(xiàn)的核心思想是搭建一個Mock Server刨晴,通過該服務(wù)提供mock接口
使用第三方mock平臺---》Moco
自己開發(fā)mock服務(wù)??
使用mock框架搭建mock服務(wù)
如:Python + Flask開發(fā)mock服務(wù)
01
Python + Flask開發(fā)mock服務(wù)
Flask是一個用Python編寫的輕量級Web應(yīng)用程序框架,使用該框架可以非常方便的開發(fā)Web項目路翻。
一割捅、環(huán)境搭建
安裝Flask?
使用pip工具安裝:?pip install Flask
驗證?
在命令行里輸入?flask --version?查看Flask是否安裝成功
二、Mock的案例
需求1:
模擬一個登錄接口
1帚桩、在API文檔中說明如果登錄成功亿驾,返回:
狀態(tài)碼:200,{"status":200, "msg": "登錄成功!", "code": 10000, "token": "xxxx123123123"}
2账嚎、登錄失敗返回:
狀態(tài)碼:200莫瞬,{"status": 100, "msg": "用戶名或密碼錯誤!", "code": 99999 }
問題:開發(fā)還未實現(xiàn)登錄接口,那么依賴登錄怎么解決郭蕉?
示例實現(xiàn)步驟:
1. 編寫Flask程序
2. 啟動運行疼邀,像正常運行普通python程序 一樣即可
3. 訪問,打開瀏覽器召锈,在地址欄里輸入 http://127.0.0.1:5000/login
from flask import Flask, jsonify
# 創(chuàng)建一個應(yīng)用對象
app =Flask(__name__)
# print(__name__)? ?# __main__
# 定義視圖函數(shù)旁振,設(shè)置路由規(guī)則? ?||? 定義接口? 模擬返回結(jié)果
@app.route("/login",methods=["get", "post"])
deflogin():
# return {"status":200, "msg": "登錄成功!", "token": "xxxx123123123"}
data = {"status":200, "msg": "登錄成功!", "code":10000, "token": "xxxx123123123"}
return jsonify(data)
# 定義接口? 模擬異常響應(yīng)狀態(tài)碼
@app.route("/login/eln", methods=["get"])
def elogin():
? ? # 返回帶有響應(yīng)狀態(tài)碼的代碼
return "error page",404, {"Content-Type": "application/json"}
# 運行
app.run()
需求2:
用戶名為admin??
密碼為123456??
返回登錄成功!
否則返回用戶名或密碼錯誤涨岁,請求參數(shù)格式為:form
"""
? ? 用戶名為admin? 密碼為123456? 返回登錄成功拐袜!否則返回用戶名或密碼錯誤,請求參數(shù)格式為:form
"""
from flask import Flask, request
# 創(chuàng)建一個應(yīng)用對象
app =Flask(__name__)
# 定義接口? 模擬返回結(jié)果
@app.route("/login", methods=["post"])
def login():
? ? # 提取數(shù)據(jù)
uname =request.form.get("username")
pwd =request.form.get("password")
? ? # 判斷
? if uname == 'admin'and pwd == '123456':
return {"status":200, "msg": "登錄成功fdgdsgsd!", "token": "xxxx123123123"}
else:
return {"status":100, "msg": "用戶名或密碼錯誤!"}
# 運行
app.run()