???????從本期開始咪鲜,將開啟《保姆級Pytest接口自動化測試框架實戰(zhàn)指南》系列。
???????本文系列文章中第一期撞鹉,用于我們項目中接口調(diào)用之Requests說明疟丙。
前言
???????為什么筆者大言不慚的說Requests就是接口自動化測試的終極奧義呢?因為在接口測試中鸟雏,對接口的請求處理是最基本的享郊,也是最核心的,掌握了最基本的接口請求處理崔慧,其他花里胡哨的功能都是錦上添花而已拂蝎,那么如何在Python中進行接口請求呢穴墅?那么本文將給大家介紹Python中的接口請求秘訣惶室。
???????這里我們使用的是Requests
類庫,它是使用Python語言編寫的一個用于在Python環(huán)境中發(fā)出標準HTTP請求的模塊玄货,簡單易用皇钞,是接口測試必備神器。
???????官網(wǎng)中對requests的介紹是:for human beings
使用到的工具
-
編程語言:?Python 3.8
-
編譯器:??Pycharm
-
Python類: ?Requests
1. HTTP 請求介紹
???????在了解Requests之前我們先看看HTTP的簡單介紹松捉。
???????我們知道夹界,一個 HTTP 請求由三部分構(gòu)成:
??????? - 請求URL:包含請求方法(常用的有 GET, POST)、請求地址和 HTTP 協(xié)議版本
??????? - 請求頭:包含一個或多個鍵值對
??????? - 請求報文:(可選隘世,例如GET請求參數(shù)在URL中設置就無需報文可柿,而POST方法的報文可以是一個json文本)
2. Requests介紹
???????Requests
提供了幾乎所有 HTTP 方法的功能:GET
、OPTIONS
丙者、HEAD
复斥、POST
、PUT
械媒、PATCH
目锭、DELETE
评汰,另外,它提供了 headers
參數(shù)讓我們根據(jù)需求定制請求頭痢虹。
2.1 Requests庫的幾個主要方法
方法名 | 方法作用 |
---|---|
requests.request() | 構(gòu)造一個請求被去,支持以下各種方法 |
requests.head() | 獲取html頭部信息的主要方法 |
requests.get() | GET請求的方法 |
requests.post() | POST請求的方法 |
requests.put() | PUT請求的方法 |
requests.patch() | PATCH請求的方法:用于交局部修改的請求 |
requests.delete() | DELETE請求的方法:用于刪除請求 |
???????這其中GET、POST這兩個方法是我們平時最常用的方法奖唯,我們下面也將對GET惨缆、POST這兩個方法做一個簡單的介紹。
3. requests.get()
使用方法:requests.get(
url
,params
,**kwargs
)
- url: 接口請求地址
- params: 請求的參數(shù)臭埋,即url中的額外參數(shù)踪央,可選。
- **kwargs: 12個控制訪問的參數(shù)
requests.get()方法中的的url參數(shù)能從字面意思了解其功能瓢阴,我們這邊來主要講講params
和**kwargs
參數(shù):
-
params
:字典或字節(jié)序列畅蹂, 作為參數(shù)增加到url中,使用這個參數(shù)可以把一些鍵值對以?key1=value1&key2=value2的模式增加到url中
例如:
key_value = {'key1':' values', 'key2': 'values'}
response = requests.get('http://www.python123.abc', params=key_value)
-
**kwargs
:用于控制訪問的參數(shù),上面我們提到的params也是屬于其控制范圍荣恐,我們再介紹幾個常用的參數(shù)
???????1. data:數(shù)據(jù)格式為字典液斜,字節(jié)序或文件對象,重點作為向服務器提供或提交資源是提交叠穆,少漆,作為request的內(nèi)容,與params不同的是硼被,data提交的數(shù)據(jù)并不放在url鏈接里示损, 而是放在url鏈接對應位置的地方作為數(shù)據(jù)來存儲。嚷硫,它也可以接受一個字符串對象检访。
???????2. json:數(shù)據(jù)格式為json,也是經(jīng)常使用的數(shù)據(jù)格式仔掸,他是作為內(nèi)容部分可以向服務器提交脆贵。
例如:
key_value = {'key1': 'value1'}
response = requests.post('http://www.python123.abc', json=key_value)
???????3. headers:數(shù)據(jù)格式為字典,是向url訪問時所發(fā)起的http的請求頭參數(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認證功能
???????6. timeout:數(shù)據(jù)格式為一個數(shù)值,用于設定超時時間, 單位為秒(當發(fā)起一個get請求時可以設置一個timeout時間呐萨, 如果在timeout時間內(nèi)請求內(nèi)容沒有返回, 將產(chǎn)生一個timeout的異常)系吭。
4. requests.post()
post(url, data, json, **kwargs)
- url: 接口請求地址
- data,json: 請求的參數(shù)残腌。
- **kwargs: 12個控制訪問的參數(shù)
???????這其中data
村斟,json
贫导,**kwargs
這幾個參數(shù)方法已經(jīng)在上方有所介紹,只是接口請求方法已經(jīng)在方法名中有所體現(xiàn)蟆盹,請求方式為POST孩灯。
???????post接口請求與get請求不同點在于請求參數(shù)是存放在請求體中的,通常是一個xml
或json
格式的報文載體逾滥。
5. Response對象
???????既然有HTTP請求信息峰档,那么就有HTTP返回信息,下面我們再介紹一下 response
對象寨昙。
-
response
:
response對象有以下屬性:
屬性名 | 屬性說明 |
---|---|
response.status_code | http請求的返回狀態(tài)讥巡,例如200則表示請求成功 |
response.text | http響應內(nèi)容的字符串形式,即接口返回的報文主體 |
response.encoding | 從http header 中猜測的相應內(nèi)容編碼方式 |
response.apparent_encoding | 從內(nèi)容中分析出的響應內(nèi)容編碼方式(備選編碼方式) |
response.content | http響應內(nèi)容的二進制形式 |
response對象還有以下方法:
方法名 | 方法作用 |
---|---|
response.json() | 將接口返回報文信息解析為json格式的報文 |
responseiter_content() | 配置stream=True舔哪,指定chunk_size大小 |
response.iter_lines() | 配置stream=True欢顷,每次返回一行 |
response.raise_for_status() | 控制返回狀態(tài)碼為400-500之間將拋出異常 |
response.close() | 關閉請求 |
??????? response
對象的方法使用比較簡單,看方法名即可在項目中靈活使用捉蚤。
6. 綜合示例
??????? 下面的示例是使用GET方式請求接口抬驴,將返回信息處理成json格式,通過節(jié)點名稱的方式獲取對應節(jié)點value值并返回缆巧。
@staticmethod
def get_singerlist():
"""
獲取接口返回報文中的歌手列表
: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中進行接口請求的簡單說明布持,還是比較簡單易懂的,該終極奧義是我們本系列文章的基礎陕悬,其他功能都是基于此基本上進行拓展開來的题暖,Requests類庫還有其他很多豐富的功能等待各位去發(fā)掘和探索,在此不做詳細介紹了捉超。
???????下一期將進行requests項目實戰(zhàn)胧卤。