當(dāng)你接觸到了Requests類庫,你就已經(jīng)掌握了Python接口自動(dòng)化測(cè)試框架的終極奧義

???????從本期開始,將開啟《保姆級(jí)Pytest接口自動(dòng)化測(cè)試框架實(shí)戰(zhàn)指南》系列。
???????本文系列文章中第一期,用于我們項(xiàng)目中接口調(diào)用之Requests說明。

前言

???????為什么筆者大言不慚的說Requests就是接口自動(dòng)化測(cè)試的終極奧義呢?因?yàn)樵诮涌跍y(cè)試中,對(duì)接口的請(qǐng)求處理是最基本的,也是最核心的,掌握了最基本的接口請(qǐng)求處理,其他花里胡哨的功能都是錦上添花而已,那么如何在Python中進(jìn)行接口請(qǐng)求呢?那么本文將給大家介紹Python中的接口請(qǐng)求秘訣。
???????這里我們使用的是Requests類庫,它是使用Python語言編寫的一個(gè)用于在Python環(huán)境中發(fā)出標(biāo)準(zhǔn)HTTP請(qǐng)求的模塊,簡(jiǎn)單易用,是接口測(cè)試必備神器。
???????官網(wǎng)中對(duì)requests的介紹是:for human beings

官方介紹

使用到的工具
  • 編程語言:?Python 3.8
  • 編譯器:??Pycharm
  • Python類: ?Requests

1. HTTP 請(qǐng)求介紹

???????在了解Requests之前我們先看看HTTP的簡(jiǎn)單介紹。

???????我們知道,一個(gè) HTTP 請(qǐng)求由三部分構(gòu)成:
??????? - 請(qǐng)求URL:包含請(qǐng)求方法(常用的有 GET, POST)、請(qǐng)求地址和 HTTP 協(xié)議版本
??????? - 請(qǐng)求頭:包含一個(gè)或多個(gè)鍵值對(duì)
??????? - 請(qǐng)求報(bào)文:(可選,例如GET請(qǐng)求參數(shù)在URL中設(shè)置就無需報(bào)文,而POST方法的報(bào)文可以是一個(gè)json文本)

HTTP請(qǐng)求組成

2. Requests介紹

???????Requests提供了幾乎所有 HTTP 方法的功能:GETOPTIONS、HEAD、POSTPUT、PATCHDELETE,另外,它提供了 headers 參數(shù)讓我們根據(jù)需求定制請(qǐng)求頭。

2.1 Requests庫的幾個(gè)主要方法

方法名 方法作用
requests.request() 構(gòu)造一個(gè)請(qǐng)求,支持以下各種方法
requests.head() 獲取html頭部信息的主要方法
requests.get() GET請(qǐng)求的方法
requests.post() POST請(qǐng)求的方法
requests.put() PUT請(qǐng)求的方法
requests.patch() PATCH請(qǐng)求的方法:用于交局部修改的請(qǐng)求
requests.delete() DELETE請(qǐng)求的方法:用于刪除請(qǐng)求

???????這其中GET、POST這兩個(gè)方法是我們平時(shí)最常用的方法,我們下面也將對(duì)GET、POST這兩個(gè)方法做一個(gè)簡(jiǎn)單的介紹。

3. requests.get()

使用方法:requests.get(url, params, **kwargs)

  • url: 接口請(qǐng)求地址
  • params: 請(qǐng)求的參數(shù),即url中的額外參數(shù),可選。
  • **kwargs: 12個(gè)控制訪問的參數(shù)

requests.get()方法中的的url參數(shù)能從字面意思了解其功能,我們這邊來主要講講params**kwargs參數(shù):

  • params:字典或字節(jié)序列, 作為參數(shù)增加到url中,使用這個(gè)參數(shù)可以把一些鍵值對(duì)以?key1=value1&key2=value2的模式增加到url中
例如:
key_value = {'key1':' values', 'key2': 'values'} 
response = requests.get('http://www.python123.abc', params=key_value)
  • **kwargs:用于控制訪問的參數(shù),上面我們提到的params也是屬于其控制范圍,我們?cè)俳榻B幾個(gè)常用的參數(shù)

???????1. data:數(shù)據(jù)格式為字典,字節(jié)序或文件對(duì)象,重點(diǎn)作為向服務(wù)器提供或提交資源是提交,,作為request的內(nèi)容,與params不同的是,data提交的數(shù)據(jù)并不放在url鏈接里, 而是放在url鏈接對(duì)應(yīng)位置的地方作為數(shù)據(jù)來存儲(chǔ)。,它也可以接受一個(gè)字符串對(duì)象。

???????2. json:數(shù)據(jù)格式為json,也是經(jīng)常使用的數(shù)據(jù)格式,他是作為內(nèi)容部分可以向服務(wù)器提交。

例如:
key_value = {'key1': 'value1'} 
response = requests.post('http://www.python123.abc', json=key_value)

???????3. headers:數(shù)據(jù)格式為字典,是向url訪問時(shí)所發(fā)起的http的請(qǐng)求頭參數(shù)。

例如:
http_headers = {'Content-Type': 'application/json'} 
response = requests.post('http://www.python123.abc', headers=http_headers)

???????4. cookies:數(shù)據(jù)格式為字典或CookieJar,指的是從http中解析cookie

???????5. auth:數(shù)據(jù)格式為元組,用來支持http認(rèn)證功能

???????6. timeout:數(shù)據(jù)格式為一個(gè)數(shù)值,用于設(shè)定超時(shí)時(shí)間, 單位為秒(當(dāng)發(fā)起一個(gè)get請(qǐng)求時(shí)可以設(shè)置一個(gè)timeout時(shí)間, 如果在timeout時(shí)間內(nèi)請(qǐng)求內(nèi)容沒有返回, 將產(chǎn)生一個(gè)timeout的異常)。

GET請(qǐng)求方式示例

4. requests.post()

post(url, data, json, **kwargs)

  • url: 接口請(qǐng)求地址
  • data,json: 請(qǐng)求的參數(shù)。
  • **kwargs: 12個(gè)控制訪問的參數(shù)

???????這其中data,json,**kwargs 這幾個(gè)參數(shù)方法已經(jīng)在上方有所介紹,只是接口請(qǐng)求方法已經(jīng)在方法名中有所體現(xiàn),請(qǐng)求方式為POST。
???????post接口請(qǐng)求與get請(qǐng)求不同點(diǎn)在于請(qǐng)求參數(shù)是存放在請(qǐng)求體中的,通常是一個(gè)xmljson格式的報(bào)文載體。

POST請(qǐng)求url和請(qǐng)求報(bào)文示例

POST請(qǐng)求headers示例

5. Response對(duì)象

???????既然有HTTP請(qǐng)求信息,那么就有HTTP返回信息,下面我們?cè)俳榻B一下 response對(duì)象。

  • response
response對(duì)象有以下屬性:
屬性名 屬性說明
response.status_code http請(qǐng)求的返回狀態(tài),例如200則表示請(qǐng)求成功
response.text http響應(yīng)內(nèi)容的字符串形式,即接口返回的報(bào)文主體
response.encoding 從http header 中猜測(cè)的相應(yīng)內(nèi)容編碼方式
response.apparent_encoding 從內(nèi)容中分析出的響應(yīng)內(nèi)容編碼方式(備選編碼方式)
response.content http響應(yīng)內(nèi)容的二進(jìn)制形式
response對(duì)象還有以下方法:
方法名 方法作用
response.json() 將接口返回報(bào)文信息解析為json格式的報(bào)文
responseiter_content() 配置stream=True,指定chunk_size大小
response.iter_lines() 配置stream=True,每次返回一行
response.raise_for_status() 控制返回狀態(tài)碼為400-500之間將拋出異常
response.close() 關(guān)閉請(qǐng)求

??????? response對(duì)象的方法使用比較簡(jiǎn)單,看方法名即可在項(xiàng)目中靈活使用。

6. 綜合示例

??????? 下面的示例是使用GET方式請(qǐng)求接口,將返回信息處理成json格式,通過節(jié)點(diǎn)名稱的方式獲取對(duì)應(yīng)節(jié)點(diǎn)value值并返回。

    @staticmethod
    def get_singerlist():
        """
        獲取接口返回報(bào)文中的歌手列表
        :return:
        """
        global singerlist
        url_singerlist = CommonInfo().get_url_singerlist()
        response = requests.get(url=url_singerlist)
        jsonres = response.json()

        singerlist = jsonres['singerList']['data']['singerlist']

        return singerlist
綜合示例

總結(jié)

???????以上就是我們使用 Requests類庫在Python中進(jìn)行接口請(qǐng)求的簡(jiǎn)單說明,還是比較簡(jiǎn)單易懂的,該終極奧義是我們本系列文章的基礎(chǔ),其他功能都是基于此基本上進(jìn)行拓展開來的,Requests類庫還有其他很多豐富的功能等待各位去發(fā)掘和探索,在此不做詳細(xì)介紹了。
???????下一期將進(jìn)行requests項(xiàng)目實(shí)戰(zhàn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容