python介面自動化44- requests 庫使用 hook 機制
阿新 • • 發佈:2022-11-30
前言
requests 是 Hooks 即鉤子方法,用於在某個框架固定的某個流程執行是捎帶執行(鉤上)某個自定義的方法。
requests 庫只支援一個 response 的鉤子,即在響應返回時可以捎帶執行我們自定義的某些方法。
可以用於列印一些資訊,做一些響應檢查或想響應物件中新增額外的資訊
使用示例
requests 庫只支援一個 response 的鉤子,即在響應返回時可以捎帶執行我們自定義的某些方法.
# 作者-上海悠悠 微信/QQ交流:283340479 # blog地址 https://www.cnblogs.com/yoyoketang/ import requests url = 'https://httpbin.org/get' def response_status(resopnse, *args, **kwargs): print('url', resopnse.url) resopnse.status = 'PASS' if resopnse.status_code < 400 else 'FAIL' res = requests.get(url, hooks={'response': response_status}) print(res.status)
執行結果
url https://httpbin.org/get
PASS
重寫響應內容
我們在做介面自動化測試的時候,有時候會遇到響應的內容是加密的內容,需要對返回的內容先解密再輸出加密後的內容,這樣方便斷言
以下是requests 庫的 Response 部分原始碼
class Response: """The :class:`Response <Response>` object, which contains a server's response to an HTTP request. """ __attrs__ = [ "_content", "status_code", "headers", "url", "history", "encoding", "reason", "cookies", "elapsed", "request", ]
可以自己定義一個NewResponse類,重寫幾個屬性和方法
# 作者-上海悠悠 微信/QQ交流:283340479 # blog地址 https://www.cnblogs.com/yoyoketang/ import requests def decrypt_response(response, *args, **kwargs): # print(response.text) 原始資料 class NewResponse: text = '{"code": 0, "data": {"token": "yo yo"}}' # response.text解密 history = response.history raw = response.raw is_redirect = response.is_redirect content = b'{"code": 0, "data": {"token": "yo yo"}}' # response.text解密 elapsed = response.elapsed @staticmethod def json(): # 拿到原始的response.json() 後解碼 return {"code": 0, "data": {"token": "yo yo"}} return NewResponse url = "https://www.cnblogs.com/yoyoketang/" r = requests.get(url, hooks={"response": decrypt_response}) print(r.text) print(r.content) print(r.json())