mock接口數據

      網友投稿 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接口數據

      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請求,就會報錯:

      405 Method Not Allowed

      Method Not Allowed

      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/", methods=["GET"]) def case03(username): print(type(username)) return {"code": 200, "msg": "success"} if __name__ == '__main__': app.run(port=7777)

      這里打印了類型,可以在控制臺看到是什么類型的,類型也是可以轉變的,path改成int或者float輸出的就是對應的類型。我們用ApiPost請求看看吧:

      然后我們看看不寫<>中的path吧。

      from flask import Flask, request, jsonify, redirect, render_template, url_for app = Flask(__name__) @app.route("/anan/case03/", methods=["GET"]) def case03(username): print(type(username)) return {"code": 200, "msg": "success"} if __name__ == '__main__': app.run(port=7777)

      看,找不到頁面了吧,這里可能你們顯示的不是這個,因為我寫了一個報錯界面,后續也會講到。

      重定向

      以上述為例,我們在最后加上/就會造成重定向,重定向的狀態碼有哪些了解嗎?像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語法,比如:

      Title 哎呀,你得頁面丟失了。

      或者你也可以插入一圖進去。用于提示頁面不存在。

      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中:

      測試

      HELLO WORLD

      {{name}}

      QING-AN

      這里可以看到有一個{{name}},這個是用于接收值的,各位可以了解了解HTML傳值的寫法,也是可以在HTML中執行訪問的方法,需要寫一個form用于接收請求類型的方法。這里的話我們直接用Flask寫,做一個了解。

      from flask import Flask, request, jsonify, redirect, render_template, url_for app = Flask(__name__) @app.route("/name/") def case08(username): return render_template("111.html", name=username) if __name__ == '__main__': app.run(port=7777)

      這里我點的是預覽,不然看到的就是返回的HTML代碼,各位也可以在瀏覽器中訪問,因為是GET請求,如果是POST請求就只能通過postman,jmeter,ApiPost工具進行訪問。

      Flask

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:為什么我插入的視頻到了投影上卻播放不了?(為什么投影儀不能顯示視頻)
      下一篇:excel表格第一行固定的方法(excel表里第一行如何固定)
      相關文章
      亚洲av日韩av无码av| 亚洲国产精品综合久久久 | 亚洲人xxx日本人18| 日韩精品一区二区亚洲AV观看| 日本亚洲成高清一区二区三区 | 精品亚洲一区二区三区在线播放| 国产亚洲漂亮白嫩美女在线| 久久亚洲AV成人无码国产最大| 亚洲熟妇AV乱码在线观看| 亚洲乱码一二三四区乱码| 亚洲一区二区三区高清视频| 亚洲综合丁香婷婷六月香| 亚洲va成无码人在线观看| 亚洲午夜在线一区| 中文字幕亚洲综合小综合在线| 亚洲综合伊人制服丝袜美腿| 亚洲久悠悠色悠在线播放| 亚洲天堂2016| 亚洲精品色播一区二区| 亚洲av中文无码字幕色不卡| 精品国产_亚洲人成在线| 亚洲AⅤ永久无码精品AA| 亚洲色偷偷狠狠综合网| 亚洲综合另类小说色区| 国产亚洲真人做受在线观看| 久久亚洲精品中文字幕无码| 亚洲欧洲日产国产综合网| 亚洲第一成年人网站| 亚洲成aⅴ人片在线影院八| 亚洲成人黄色在线观看| 亚洲国产乱码最新视频| 亚洲6080yy久久无码产自国产| 伊在人亚洲香蕉精品区麻豆| 久久久久久亚洲精品不卡| 亚洲国产精品乱码一区二区 | 国产青草亚洲香蕉精品久久| 亚洲伊人久久综合中文成人网 | 亚洲综合精品成人| 成a人片亚洲日本久久| 国产午夜亚洲精品国产成人小说| 亚洲综合伊人久久大杳蕉|