Python接口自動化之request請求封裝

我們在做自動化測試的時候,大家都是希望自己寫的代碼越簡潔越好,代碼重復量越少越好。那么,我們可以考慮將request的請求類型(如:Get、Post、Delect請求)都封裝起來。這樣,我們在編寫用例的時候就可以直接進行請求了。

1. 源碼分析

我們先來看一下Get、Post、Delect等請求的源碼,看一下它們都有什么特點。

(1)Get請求源碼

 def get(self, url, **kwargs):r"""Sends a GET request. Returns :class:`Response` object.:param url: URL for the new :class:`Request` object.:param \*\*kwargs: Optional arguments that ``request`` takes.:rtype: requests.Response"""kwargs.setdefault('allow_redirects', True)return self.request('GET', url, **kwargs) 

(2)Post請求源碼

def post(self, url, data=None, json=None, **kwargs):r"""Sends a POST request. Returns :class:`Response` object.:param url: URL for the new :class:`Request` object.:param data: (optional) Dictionary, list of tuples, bytes, or file-likeobject to send in the body of the :class:`Request`.:param json: (optional) json to send in the body of the :class:`Request`.:param \*\*kwargs: Optional arguments that ``request`` takes.:rtype: requests.Response"""return self.request('POST', url, data=data, json=json, **kwargs)  

(3)Delect請求源碼

 def delete(self, url, **kwargs):r"""Sends a DELETE request. Returns :class:`Response` object.:param url: URL for the new :class:`Request` object.:param \*\*kwargs: Optional arguments that ``request`` takes.:rtype: requests.Response"""return self.request('DELETE', url, **kwargs)

(4)分析結果

我們發現,不管是Get請求、還是Post請求或者是Delect請求,它們到最后返回的都是request函數。那么,我們再去看一看request函數的源碼。

 def request(self, method, url,params=None, data=None, headers=None, cookies=None, files=None,auth=None, timeout=None, allow_redirects=True, proxies=None,hooks=None, stream=None, verify=None, cert=None, json=None):"""Constructs a :class:`Request <Request>`, prepares it and sends it.Returns :class:`Response <Response>` object.:param method: method for the new :class:`Request` object.:param url: URL for the new :class:`Request` object.:param params: (optional) Dictionary or bytes to be sent in the querystring for the :class:`Request`.:param data: (optional) Dictionary, list of tuples, bytes, or file-likeobject to send in the body of the :class:`Request`.:param json: (optional) json to send in the body of the:class:`Request`.:param headers: (optional) Dictionary of HTTP Headers to send with the:class:`Request`.:param cookies: (optional) Dict or CookieJar object to send with the:class:`Request`.:param files: (optional) Dictionary of ``'filename': file-like-objects``for multipart encoding upload.:param auth: (optional) Auth tuple or callable to enableBasic/Digest/Custom HTTP Auth.:param timeout: (optional) How long to wait for the server to senddata before giving up, as a float, or a :ref:`(connect timeout,read timeout) <timeouts>` tuple.:type timeout: float or tuple:param allow_redirects: (optional) Set to True by default.:type allow_redirects: bool:param proxies: (optional) Dictionary mapping protocol or protocol andhostname to the URL of the proxy.:param stream: (optional) whether to immediately download the responsecontent. Defaults to ``False``.:param verify: (optional) Either a boolean, in which case it controls whether we verifythe server's TLS certificate, or a string, in which case it must be a pathto a CA bundle to use. Defaults to ``True``.:param cert: (optional) if String, path to ssl client cert file (.pem).If Tuple, ('cert', 'key') pair.:rtype: requests.Response"""# Create the Request.req = Request(method=method.upper(),url=url,headers=headers,files=files,data=data or {},json=json,params=params or {},auth=auth,cookies=cookies,hooks=hooks,)prep = self.prepare_request(req)proxies = proxies or {}settings = self.merge_environment_settings(prep.url, proxies, stream, verify, cert)# Send the request.send_kwargs = {'timeout': timeout,'allow_redirects': allow_redirects,}send_kwargs.update(settings)resp = self.send(prep, **send_kwargs)return resp    

從request源碼可以看出,它先創建一個Request,然后將傳過來的所有參數放在里面,再接著調用self.send(),并將Request傳過去。這里我們將不在分析后面的send等方法的源碼了,有興趣的同學可以自行了解。

分析完源碼之后發現,我們可以不需要單獨在一個類中去定義Get、Post等其他方法,然后在單獨調用request。其實,我們直接調用request即可。

2. requests請求封裝

代碼示例:

 import requestsclass RequestMain:def __init__(self):"""session管理器requests.session(): 維持會話,跨請求的時候保存參數"""# 實例化sessionself.session = requests.session()def request_main(self, method, url, params=None, data=None, json=None, headers=None, **kwargs):""":param method: 請求方式:param url: 請求地址:param params: 字典或bytes,作為參數增加到url中         :param data: data類型傳參,字典、字節序列或文件對象,作為Request的內容:param json: json傳參,作為Request的內容:param headers: 請求頭,字典:param kwargs: 若還有其他的參數,使用可變參數字典形式進行傳遞:return:"""# 對異常進行捕獲try:"""封裝request請求,將請求方法、請求地址,請求參數、請求頭等信息入參。注 :verify: True/False,默認為True,認證SSL證書開關;cert: 本地SSL證書。如果不需要ssl認證,可將這兩個入參去掉"""re_data = self.session.request(method, url, params=params, data=data, json=json, headers=headers, cert=(client_crt, client_key), verify=False, **kwargs)# 異常處理 報錯顯示具體信息except Exception as e:# 打印異常print("請求失敗:{0}".format(e))# 返回響應結果return re_dataif __name__ == '__main__':# 請求地址url = '請求地址'# 請求參數payload = {"請求參數"}# 請求頭header = {"headers"}# 實例化 RequestMain()re = RequestMain()# 調用request_main,并將參數傳過去request_data = re.request_main("請求方式", url, json=payload, headers=header)# 打印響應結果print(request_data.text)  

注 :如果你調的接口不需要SSL認證,可將cert與verify兩個參數去掉。

最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:【文末領取】


???? 【下面是我整理的2023年最全的軟件測試工程師學習知識架構體系圖+全套資料】


一、Python編程入門到精通

二、接口自動化項目實戰

三、Web自動化項目實戰


四、App自動化項目實戰

五、一線大廠簡歷


六、測試開發DevOps體系

七、常用自動化測試工具


八、JMeter性能測試

九、總結(尾部小驚喜)

生命不息,奮斗不止。每一份努力都不會被辜負,只要堅持不懈,終究會有回報。珍惜時間,追求夢想。不忘初心,砥礪前行。你的未來,由你掌握!

生命短暫,時間寶貴,我們無法預知未來會發生什么,但我們可以掌握當下。珍惜每一天,努力奮斗,讓自己變得更加強大和優秀。堅定信念,執著追求,成功終將屬于你!

只有不斷地挑戰自己,才能不斷地超越自己。堅持追求夢想,勇敢前行,你就會發現奮斗的過程是如此美好而值得。相信自己,你一定可以做到!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40525.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40525.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40525.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python文件操作教程,Python文件操作筆記

文件的打開與關閉 想一想&#xff1a; 如果想用word編寫一份簡歷&#xff0c;應該有哪些流程呢&#xff1f; 打開word軟件&#xff0c;新建一個word文件寫入個人簡歷信息保存文件關閉word軟件 同樣&#xff0c;在操作文件的整體過程與使用word編寫一份簡歷的過程是很相似的…

爬蟲逆向實戰(十三)--某課網登錄

一、數據接口分析 主頁地址&#xff1a;某課網 1、抓包 通過抓包可以發現登錄接口是user/login 2、判斷是否有加密參數 請求參數是否加密&#xff1f; 通過查看“載荷”模塊可以發現有一個password加密參數&#xff0c;還有一個browser_key這個可以寫死不需要關心 請求頭…

【11】Redis學習筆記 (微軟windows版本)【Redis】

注意:官redis方不支持windows版本 只支持linux 此筆記是依托微軟開發windows版本學習 一、前言 Redis簡介&#xff1a; Redis&#xff08;Remote Dictionary Server&#xff09;是一個開源的內存數據結構存儲系統&#xff0c;它也被稱為數據結構服務器。Redis以鍵值對&am…

取證的學習

Volatility命令語法 1.判斷鏡像信息&#xff0c;獲取操作系統類型 Volatility -f xxx.vmem imageinfo 在查到操作系統后如果不確定可以使用以下命令查看 volatility - f xxx.vmem --profile [操作系統] volshell 2.知道操作系統類型后&#xff0c;用–profile指定 volat…

IO和文件系統性能分析工具

以下內容來自于RHEL 官方文檔。以下工具可以用來分析磁盤 IO 和文件系統性能瓶頸。 分析方法見 《性能分析方法-《性能之巔》筆記》&#xff0c;USE 法必須要使用相關性能分析工具。 影響 IO 和文件系統性能的主要因素&#xff1a; 數據寫入或讀取特征 順序或隨機 buffered 或…

基于ssm+mysql智能圖書館導航系統設計與實現

摘 要 電腦的出現是一個時代的進步&#xff0c;不僅僅幫助人們解決了一些數學上的難題&#xff0c;如今電腦的出現&#xff0c;更加方便了人們在工作和生活中對于一些事物的處理。應用的越來越廣泛&#xff0c;通過互聯網我們可以更方便地進行辦公&#xff0c;也能夠在網上就能…

【Oracle 數據庫 SQL 語句 】積累1

Oracle 數據庫 SQL 語句 1、分組之后再合計2、顯示不為空的值 1、分組之后再合計 關鍵字&#xff1a; grouping sets &#xff08;&#xff08;分組字段1&#xff0c;分組字段2&#xff09;&#xff0c;&#xff08;&#xff09;&#xff09; select sylbdm ,count(sylbmc) a…

神經網絡基礎-神經網絡補充概念-20-激活函數

概念 激活函數是神經網絡中的一個重要組成部分&#xff0c;它引入了非線性性質&#xff0c;使得神經網絡可以學習和表示更復雜的函數關系。激活函數對于將輸入信號轉換為輸出信號起到了關鍵作用&#xff0c;它在神經元的計算過程中引入了非線性變換。 幾種常見的激活函數及其…

DR模式 LVS負載均衡群集

數據包流向分析&#xff1a; &#xff08;1&#xff09;客戶端發送請求到 Director Server&#xff08;負載均衡器&#xff09;&#xff0c;請求的數據報文&#xff08;源 IP 是 CIP,目標 IP 是 VIP&#xff09;到達內核空間。 &#xff08;2&#xff09;Director Server 和 Re…

Docker 網絡

目錄 Docker 網絡實現原理 Docker 的網絡模式&#xff1a; 網絡模式詳解&#xff1a; 1&#xff0e;host模式 2&#xff0e;container模式 3&#xff0e;none模式 4&#xff0e;bridge模式 5&#xff0e;自定義網絡 Docker 網絡實現原理 Docker使用Linux橋接&#x…

Linux下如何修改CPU 電源工作模式

最近處理一起歷史遺留問題&#xff0c;感覺很爽。 現象&#xff1a; 背景&#xff1a;設備采用ARM&#xff0c;即rk3568處理器&#xff0c;采用Linux系統&#xff1b;主要用于視覺后端處理 現象&#xff1a;當軟件運行一段時間&#xff0c;大概1個小時&#xff08;也不是很固定…

考研算法第46天: 字符串轉換整數 【字符串,模擬】

題目前置知識 c中的string判空 string Count; Count.empty(); //正確 Count ! null; //錯誤c中最大最小宏 #include <limits.h>INT_MAX INT_MIN 字符串使用發運算將字符加到字符串末尾 string Count; string str "liuda"; Count str[i]; 題目概況 AC代碼…

國內的PMP有多少含金量?

1.PMP是什么 PMP&#xff08;Project Management Professional&#xff09;指項目管理專業人士資格認證。它是由美國項目管理協會&#xff08;PMI&#xff09;舉辦的項目管理專業人員&#xff08;PMP&#xff09;認證考試&#xff0c;在全球190多個國家和地區推廣&#xff0c;…

vue 數字遞增(滾動從0到)

使用 html <Incremental :startVal"0" :endVal"1000" :duration"500" />js&#xff1a; import Incremental from /utils/num/numViewjs let lastTime 0 const prefixes webkit moz ms o.split( ) // 各瀏覽器前綴let requestAnimatio…

[C++] string類的介紹與構造的模擬實現,進來看吧,里面有空調

文章目錄 1、string類的出現1.1 C語言中的字符串 2、標準庫中的string類2.1 string類 3、string類的常見接口說明及模擬實現3.1 string的常見構造3.2 string的構造函數3.3 string的拷貝構造3.4 string的賦值構造 4、完整代碼 1、string類的出現 1.1 C語言中的字符串 C語言中&…

「Qt」文件讀寫操作

0、引言 我們知道 C 和 C 都提供了文件讀寫的類庫&#xff0c;不過 Qt 也有一套自己的文件讀寫操作&#xff1b;本文主要介紹 Qt 中進行文件讀寫操作的類 —— QFile。 1、QFileDialog 文件對話框 一般的桌面應用程序&#xff0c;當我們想要打開一個文件時&#xff0c;通常會彈…

php+echarts實現數據可視化實例

效果&#xff1a; 代碼&#xff1a; php <?php include(includes/session.inc); include(includes/SQL_CommonFunctions.inc); ?> <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv&quo…

OpenLayers入門,OpenLayers加載google街景地圖

專欄目錄: OpenLayers入門教程匯總目錄 前言 本章講解OpenLayers加載google街景地圖,無需科學上網,也可以正常訪問瓦片。 二、依賴和使用 "ol": "^6.15.1"使用npm安裝依賴npm install ol@6.15.1使用Yarn安裝依賴yarn add olvue中如何使用: vue項…

FastApi-1-結合sql 增/查demo

目錄 FastAPI學習記錄項目結構部分接口/代碼展示感受全部代碼 FastAPI學習記錄 fastapi已經學習有一段時間&#xff0c;今天抽時間簡單整理下。 官網介紹&#xff1a; FastAPI 是一個用于構建 API 的現代、快速&#xff08;高性能&#xff09;的 web 框架&#xff0c;使用 Py…

SpringBoot的配置文件以及日志設置

在使用SpringBoot開發的過程中我們通常會用到配置文件來設置配置信息 以及使用日志來進行記錄我們的操作&#xff0c;方便我們對錯誤的定位 配置文件的作用在于&#xff1a;設置端口&#xff0c;設置數據庫連接信息&#xff0c;設置日志等等 在SpringBoot中&#xff0c;配置…