???????從本期開始,將開啟《保姆級(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文本)

2. Requests介紹
???????Requests提供了幾乎所有 HTTP 方法的功能:GET、OPTIONS、HEAD、POST、PUT、PATCH、DELETE,另外,它提供了 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的異常)。

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è)xml或json格式的報(bào)文載體。


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)。