亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python利用requests庫進(jìn)行接口測試的方法詳解

 更新時間:2018年07月06日 16:56:49   作者:MR_Hanjc  
在python的標(biāo)準(zhǔn)庫中,雖然提供了urllib,utllib2,httplib,但是做接口測試,requests真心好,正如官方說的,“讓HTTP服務(wù)人類”,一言以蔽之,說明一切,這篇文章主要給大家介紹了關(guān)于python利用requests庫進(jìn)行接口測試的相關(guān)資料,需要的朋友可以參考下

前言

之前介紹了接口測試中需要關(guān)注得測試點,現(xiàn)在我們來看看如何進(jìn)行接口測試,現(xiàn)在接口測試工具有很多種,例如:postman,soapui,jemter等等,對于簡單接口而言,或者我們只想調(diào)試一下,使用工具是非常便捷而且快速得,但是對于更復(fù)雜得場景,這些工具雖然也能實現(xiàn),但是難度要比寫代碼更大,而且定制化受到工具得功能影響,會
遇到一些障礙,當(dāng)然我們還要實現(xiàn)自動化等等,鑒于以上因素,我們還是要學(xué)會使用代碼進(jìn)行接口測試,便于維護(hù)與擴展,或者算是我們知識得補充把~

requests庫是python用來發(fā)起http/https請求得第三方庫,支持get,post,put,delete等,requests特點是簡單便捷、功能豐富,能夠滿足日常測試需求,所以我們選取requests庫進(jìn)行接口測試

運行環(huán)境:

  • 系統(tǒng):mac os 10.13.5
  • python:3.6.4
  • requests:2.19.1

接口為自己編寫得測試接口,測試請使用自己得接口

第一部分:安裝

1.安裝python(自行安裝),不會的朋友們可以參考這篇文章:http://chabaoo.cn/article/112486.htm

2.安裝requests(linux和mac os可能會遇到權(quán)限問題,sudo安裝即可)

pip install -U requests

3.驗證

localhost:~ mac$ python3
Python 3.6.4 (v3.6.4:d48ecebad5, Dec 18 2017, 21:07:28)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>>

沒有報錯說明python與requests環(huán)境都沒問題

第二部分:基礎(chǔ)部分

以一個簡單的get接口為例

import requests #導(dǎo)入requests模塊
response=requests.get("http://localhost:5000/hello")#對hello接口進(jìn)行g(shù)et請求,并獲取響應(yīng)信息

1.響應(yīng)信息(response)解析

print(response.text) 
print(response.content)
##輸出
你好
b'\xe4\xbd\xa0\xe5\xa5\xbd'

response.text是以str得形式返回得響應(yīng)信息

response.content是以bytes形式返回

實際使用中根據(jù)自己得情況進(jìn)行選擇

2.獲取狀態(tài)碼

print(response.status_code)
##輸出
200

3.獲取headers信息

print(response.headers)
##輸出
{'Content-Type': 'text/html; charset=utf-8', 'Content-Length': '6', 'Server': 'Werkzeug/0.14.1 Python/3.6.4', 'Date': 'Sun, 24 Jun 2018 02:55:27 GMT'}

4.獲取cookies信息

print(response.cookies)
##輸出
<RequestsCookieJar[]>

注意:這里與其他部分稍有不同,返回cookies的信息為cookies對象,而不是像前面部分返回得是字符串或者字典,cookies解析部分在后面會進(jìn)行單獨說明

5.獲取請求url

print(response.url)
###輸出
http://localhost:5000/hello

6.獲取反序列化后的得信息:

print(response.json())
###輸出:
{'name': 'john'}

注意:只有在返回信息為json格式時才能使用,否則會報json異常

7.獲取響應(yīng)時間

print(response.elapsed)
print(response.elapsed.microseconds)
print(response.elapsed.seconds)
print(response.elapsed.total_seconds())
##輸出
0:00:00.003773
3773
0
0.003773

第三部分:進(jìn)階部分

通常我們要想獲取正確得響應(yīng)信息需要傳遞一些參數(shù),針對不同得請求,傳參方式稍有不通,下面我們來看一下
這里我部署了一個get接口和一個post接口,功能都是講獲取得請求參數(shù)返回回來,以便我們查看效果

1.get請求傳遞參數(shù)

params={"name":"john","age":17}
response=requests.get("http://localhost:5000/get_params",params=params)
print(response.text)
print(response.url)
##輸出
{"name": "john", "age": "17"}
http://localhost:5000/get_params?name=john&age=17

說明:

這里做了三件事,先定義一個參數(shù)字典p,然后將參數(shù)字典以params參數(shù)傳遞給get方法,最后將響應(yīng)信息打印出來,從響應(yīng)信息可以看到參數(shù)被正確得傳遞進(jìn)去,requests幫我們把參數(shù)組合到了url里面

2.post請求傳遞參數(shù)

post傳遞參數(shù)和get有所不同,根據(jù)服務(wù)端取值方式進(jìn)行不同方式得傳遞

如果是傳遞得json格式得參數(shù)

p={"name":"john","age":17}
response=requests.post("http://localhost:5000/post_params",json=p)
print(response.text)
###輸出:
{"name": "john", "age": 17}

如果是以html中form得形式傳遞參數(shù),

response=requests.post("http://localhost:5000/post_params",data=p)
print(response.text)

如果form傳遞得是json格式需要以下面得方式

import json
response=requests.post("http://localhost:5000/post_params",data=json.dumps(p))
print(response.text)

說明:

需要將字典行駛得參數(shù)轉(zhuǎn)換為json格式,再進(jìn)行傳遞

根據(jù)服務(wù)端得情況選中一種方式進(jìn)行傳遞參數(shù),通常情況下這三種情況可以滿足測試需求

第四部分:高級部分

1.操作cookies

有時候由于服務(wù)端需要取得cookies信息來進(jìn)行用戶身份驗證, 或者另外一些用戶信息來進(jìn)行邏輯處理,這時候我們在測試接口時需要手動獲取cookies信息和添加cookies信息到請求中

先看設(shè)置cookies信息

注:我這里部署了一個set_cookies接口,將cookies信息作為響應(yīng)信息返回

my_cookies={"name":"john"}
response=requests.get("http://localhost:5000/set_cookies",cookies=my_cookies)
print(response.text)
##輸出
{"name": "john"}

說明:

這段代碼先定義了一個cookies字典,然后通過get方法,以cookies參數(shù)傳入,最后打印出響應(yīng)信息,可以看到cookies被成功種入請求中

我們再說說如何獲取cookies并解析cookies信息

注:這里我部署了一個get_cookies接口,將{"name":"john"}作為cookies置入響應(yīng)中

response=requests.get("http://localhost:5000/get_cookies")
cookies=response.cookies
print(cookies["name"])
##輸出:
john

說明:

獲取cookies對象得信息,我們只需要像獲取字段得value一樣即可,可以看到我們成功獲取到了john

2.headers

看完了cookies之后,header就一目了然了,但是我還是同樣部署兩個接口(一個set_headers,一個get_headers)

#設(shè)置headers
my_headers={"name":"john"}
response=requests.get("http://localhost:5000/set_headers",headers=my_headers)
print(response.text)
#獲取headers
response=requests.get("http://localhost:5000/get_headers")
print(response.headers.get("name"))
##輸出:
{"name": "john"}
john

3.session

session可以理解為一段對話,而這段對話會紀(jì)錄這次會話中得一些內(nèi)容和狀態(tài),當(dāng)中斷這段對話,這些信息與狀態(tài)就丟失了session對象讓你能夠跨請求保持某些參數(shù)。它也會在同一個 Session 實例發(fā)出的所有請求之間保持 cookie, 期間使用 urllib3 的 connection pooling 功能。所以如果你向同一主機發(fā)送多個請求,底層的 TCP 連接將會被重用,從而帶來顯著的性能提升

使用方法

注:我這里部署兩個接口,一個hello接口(用來演示使用全局cookies,將請求cookies返回),一個world接口(用來演示使用全局headers,將請求headers返回)

#設(shè)置headers
my_info={"name":"john"}
#創(chuàng)建全局session對象
my_session=requests.session()
#設(shè)置全局cookies信息
my_session.cookies.set("name","john")
#設(shè)置全局headers信息
my_session.headers.update(my_info)
#演示全局cookies使用
response=my_session.get("http://localhost:5000/hello")
print(response.text)
#演示全局headers使用
response=my_session.get("http://localhost:5000/world")
print(response.text)
##輸出
{"name": "john"}
{"Host": "localhost:5000", "User-Agent": "python-requests/2.19.1", "Accept-Encoding": "gzip, deflate", "Accept": "*/*", "Connection": "keep-alive", "Name": "john", "Cookie": "name=john"}

4.設(shè)置timeout

通常接口都是為上游服務(wù)得,由于上游不能夠長時間等待接口返回信息,都會設(shè)置一個超時時間,超過了這個時間,會將這個結(jié)果丟棄,如果我們要監(jiān)控線上接口有沒有超時情況,這時候我們發(fā)起請求的時候就需要設(shè)置一個超時時間,如果超過這個時間,就會拋出一個異常

response=requests.get("http://www.baidu.com",timeout=5)

說明:

將5這個超時時間以timeout參數(shù)傳入,這里得單位是秒

如果要想將連接(connect)與讀?。╮ead)都進(jìn)行設(shè)置,則需要傳入一個元組,第一個元素為connect超時事件,第二個元素為read超時時間

response=requests.get("http://www.baidu.com",timeout=(1,2))

5.hook

太晚了,先睡覺,明天補上~~

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Tensorflow tf.tile()的用法實例分析

    Tensorflow tf.tile()的用法實例分析

    這篇文章主要介紹了Tensorflow tf.tile()的用法實例分析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • keras分類之二分類實例(Cat and dog)

    keras分類之二分類實例(Cat and dog)

    這篇文章主要介紹了keras分類之二分類實例(Cat and dog),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • python批量爬取圖片的方法詳解

    python批量爬取圖片的方法詳解

    這篇文章給大家介紹了如何使用python批量爬取圖片,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-12-12
  • 聊聊python里如何用Borg pattern實現(xiàn)的單例模式

    聊聊python里如何用Borg pattern實現(xiàn)的單例模式

    這篇文章主要介紹了聊聊python里如何用Borg pattern實現(xiàn)的單例模式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • python?包之?Pillow?圖像處理教程分享

    python?包之?Pillow?圖像處理教程分享

    這篇文章主要介紹了python?包之?Pillow?圖像處理教程分享,文章基于Python的相關(guān)資料展開主題相關(guān)內(nèi)容,需要的小伙伴可以參考一下
    2022-04-04
  • python 捕獲 shell/bash 腳本的輸出結(jié)果實例

    python 捕獲 shell/bash 腳本的輸出結(jié)果實例

    下面小編就為大家?guī)硪黄猵ython 捕獲 shell/bash 腳本的輸出結(jié)果實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • python使用mediapiple+opencv識別視頻人臉的實現(xiàn)

    python使用mediapiple+opencv識別視頻人臉的實現(xiàn)

    本文主要介紹了python使用mediapiple+opencv識別視頻人臉,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Python通過WHL文件實現(xiàn)離線安裝的操作詳解

    Python通過WHL文件實現(xiàn)離線安裝的操作詳解

    在Python開發(fā)中,我們經(jīng)常需要安裝第三方庫來擴展Python的功能,通常情況下,我們可以通過pip命令在線安裝這些庫,此時,WHL(Wheel)文件成為了非常實用的解決方案,本教程將結(jié)合實際案例,詳細(xì)介紹如何通過WHL文件在Python中進(jìn)行離線安裝,需要的朋友可以參考下
    2024-08-08
  • Python繪制莖葉圖的示例代碼

    Python繪制莖葉圖的示例代碼

    這篇文章主要為大家信息介紹了Python繪制莖葉圖的相關(guān)知識,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • 關(guān)于matlab圖像濾波詳解(二維傅里葉濾波)

    關(guān)于matlab圖像濾波詳解(二維傅里葉濾波)

    這篇文章主要介紹了關(guān)于matlab圖像濾波詳解(二維傅里葉濾波),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論