JVM進階(七)——從GC日志分析堆內存
1213
2025-04-01
這里是清安,上一章我們講了requests請求以及unittest封裝,文中提及了mock,以及還有一份寫的mock--py文件。本章就來講講,如何mock接口數據。
首先我們先了解一下mock的作用以及flask框架。
什么是mock?
mock 的意思是模擬,也就是模擬接口返回的信息,用已有的信息替換它需要返回的信息,從實現對上級模塊的測試。mock也分為兩種:前端對接口的mock,后端單元測試中涉及的mock。
如果一個接口A返回的數據需要依賴于另一個接口B,當開發中B接口還未開發完全時候這里會需要用到Mock。
mock的作用?
1. 解決依賴問題:當我們測試一個接口或者功能模塊的時候,如果這個接口或者功能模塊依賴其他接 口或其他模塊, 那么如果所依賴的接口或功能模塊未開發完畢,那么我們就可以使用mock模擬被 依賴接口,完成目標接口的測試
2. 單元測試:如果某個功能未開發完成,我們又要進行測試用例的代碼編寫,我們也可以先模擬這個功能進行測試
3. 模擬復雜業務的接口:實際工作中如果我們在測試一個接口功能時,如果這個接口依賴一個非常復 雜的接口業務, 那么我們完全可以使用mock來模擬這個復雜的業務接口,其實這個和解決接口依賴是一樣的原理
4. 前后端聯調:如果你是一個前端頁面開發,現在需要開發一個功能:根據后臺返回的狀態展示不同 的頁面,那么 你就需要調用后臺的接口,但是后臺接口還未開發完成,是不是你就停止這部分工作呢?答案是否定的,你完全可 以借助mock來模擬后臺這個接口返回你想要的數據
mock的使用
上面的術語套用完畢,我們直接看代碼一步步解析吧,這樣才能看得懂一些。
#安裝:pip install flask from flask import Flask #固定格式 app = Flask(__name__) #路由 @app.route("/anan/come") def hello(): return "Hello Flask!" if __name__ == "__main__": #啟動服務 app.run()
解析:app.run()里面可以指定端口號,后續會講,路由中可以指定請求接口類型是get還是post以及其他。
我們用國貨之光ApiPost請求看看:
GET請求
我們指定請求方式以及端口號:
@app.route("/anan/book", methods=['GET']) def queryInfo1(): my_flag = request.args.get("flag") data = {"code": "0", "msg": "接口請求成功"} data1 = {"code": "-1", "msg": "接口請求失敗"} if int(my_flag) == 0: return data elif int(my_flag) == 1: return data1 if __name__ == '__main__': app.run(port=7777)
如果這里指定了Get你用了post請求,就會報錯:
The method is not allowed for the requested URL.
所以,也間接性的說明,接口文檔還是非常重要的。指定了接口與接口的數據傳遞。拿不到指定的數據信息,接口不完整,這時候mock數據也是很重要的。
POST請求
看看下面的POST請求:
from flask import Flask, request, redirect, render_template, url_for app = Flask(__name__) @app.route("/anan/book1", methods=["POST"]) def case02(): data = request.form.get("flags") print(data) # jmeter發起請求 return {"code": 200, "msg": "success"} @app.route("/anan/book2", methods=["GET"]) def case01(): flag = request.args.get("flag") print(flag) # http://127.0.0.1:8080/app/case01?flag=qingan return "GET請求完成" if __name__ == '__main__': app.run(port=7777)
這里我們可以傳參進來但是,卻不能像get請求一樣,可以在控制臺看到返回值。
這也是兩者的區別,也是體現了get與post的區別,get與post的區別各位就自行百度吧,還是很多這類回答的。
轉換
<>表示轉換,可加path可不加,如果加了path,那么qing/an這個路由就會原樣輸出,那么如果不加轉換則會輸出報錯,我們來看看。
from flask import Flask, request, jsonify, redirect, render_template, url_for app = Flask(__name__) @app.route("/anan/case03/
這里打印了類型,可以在控制臺看到是什么類型的,類型也是可以轉變的,path改成int或者float輸出的就是對應的類型。我們用ApiPost請求看看吧:
然后我們看看不寫<>中的path吧。
from flask import Flask, request, jsonify, redirect, render_template, url_for app = Flask(__name__) @app.route("/anan/case03/
看,找不到頁面了吧,這里可能你們顯示的不是這個,因為我寫了一個報錯界面,后續也會講到。
重定向
以上述為例,我們在最后加上/就會造成重定向,重定向的狀態碼有哪些了解嗎?像300,301等等都是,看下面的這個例子:
from flask import Flask, request, jsonify, redirect, render_template, url_for app = Flask(__name__) @app.route("/anan/case04", methods=["POST"]) def case04(): return {"code": 200, "msg": "success"} if __name__ == '__main__': app.run(port=7777)
這里是可以正常訪問的,那么我們在后面加上一個/呢:
from flask import Flask, request, jsonify, redirect, render_template, url_for app = Flask(__name__) @app.route("/anan/case04/", methods=["POST"]) def case04(): return {"code": 200, "msg": "success"} if __name__ == '__main__': app.run(port=7777)
我們遇到這種情況其實在請求后面加上/也是可以正常訪問的,那么重定向還有什么用處呢?
from flask import Flask, request, jsonify, redirect, render_template, url_for app = Flask(__name__) @app.route("/") def case06(): return redirect(url_for("case07")) @app.route("/hello") def case07(): print("qingan") return {"code": 200, "msg": "success"} if __name__ == '__main__': app.run(port=7777)
這里我請求case06實際是可以得到case07的返回值的,請求方式默認GET。
那么有人就會想上述的POST請求能不能也可以重定向到case07來呢,響應得到case07的結果,試試就知道了
from flask import Flask, request, jsonify, redirect, render_template, url_for app = Flask(__name__) @app.route("/anan/case04/", methods=["POST"]) def case04(): with app.test_request_context('/app/case04', method='POST'): # return {"code": 200, "msg": "success"} return redirect(url_for("case07")) @app.route("/") def case06(): return redirect(url_for("case07")) @app.route("/hello") def case07(): print("qingan") return {"code": 200, "msg": "success"} if __name__ == '__main__': app.run(port=7777)
302:指示已經將資源暫時地移動到了另一個位置,但將來的引用仍應使用原來的 URI 訪問該資源。 保留此定義是為了向后兼容。
但是如果將POST換成GET,就可以訪問成功的喲,這跟這兩者的機制有關。
HTML
前面展示了一個報錯是提示:哎呀,你得頁面丟失了。這是一個HTML界面,這里就來說說用法。
在你的文件中需要存在一個這也的文件夾用于存放html5文件,然后我們可以在文件中寫一些HTML5語法,比如:
或者你也可以插入一圖進去。用于提示頁面不存在。
from flask import Flask, request, jsonify, redirect, render_template, url_for app = Flask(__name__) @app.errorhandler(404) def case09(erro): return render_template("er_ro.html"),404 if __name__ == '__main__': app.run(port=7777)
啟動服務后隨便訪問一個不存在的界面就能看到這個提示了:
當然我們還能通過路由進行傳值到HTML中:
這里可以看到有一個{{name}},這個是用于接收值的,各位可以了解了解HTML傳值的寫法,也是可以在HTML中執行訪問的方法,需要寫一個form用于接收請求類型的方法。這里的話我們直接用Flask寫,做一個了解。
from flask import Flask, request, jsonify, redirect, render_template, url_for app = Flask(__name__) @app.route("/name/
這里我點的是預覽,不然看到的就是返回的HTML代碼,各位也可以在瀏覽器中訪問,因為是GET請求,如果是POST請求就只能通過postman,jmeter,ApiPost工具進行訪問。
Flask
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。