1. 程式人生 > >使用Python的Requests庫進行web介面測試

使用Python的Requests庫進行web介面測試

1、Requests簡介

Requests 是使用 Apache2 Licensed 許可證的 HTTP 庫。用 Python 編寫,真正的為人類著想。

Python 標準庫中的 urllib2 模組提供了你所需要的大多數 HTTP 功能,但是它的 API 太渣了。它是為另一個時代、另一個網際網路所建立的。它需要巨量的工作,甚至包括各種方法覆蓋,來完成最簡單的任務。

總之,大家以後對urllib2庫敬而遠之就行了。來擁抱Requests吧。

Requests的官方文件:http://cn.python-requests.org/zh_CN/latest/

通過下面方法安裝requests

pip install requests

2、Requests如何傳送HTTP請求

非常簡單,先匯入requests,

import requests
然後,按照下面的方法傳送http的各種請求:
r = requests.get('https://github.com/timeline.json')
r = requests.post("http://httpbin.org/post")
r = requests.put("http://httpbin.org/put")
r = requests.delete("http://httpbin.org/delete")
r = requests.head("http://httpbin.org/get")
r = requests.options("http://httpbin.org/get")

3、為URL傳遞引數

如果http請求需要帶URL引數(注意是URL引數不是body引數),那麼需要將引數附帶到payload字典裡頭,按照下面的方法傳送請求:

import requests
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get",params=payload)
print r.url
通過print(r.url)能看到URL已被正確編碼:
http://httpbin.org/get?key2=value2&key1=value1
注意字典裡值為 None
的鍵都不會被新增到 URL 的查詢字串裡。

4、unicode響應內容

import requests
r = requests.get('https://github.com/timeline.json')
r.text
響應結果是:

{"message":"Hello there, wayfaring stranger. If you're reading this then you probably didn't see our blog post a couple of years back announcing that this API would go away: http://git.io/17AROg Fear not, you should be able to get what you need from the shiny new Events API instead.","documentation_url":"https://developer.github.com/v3/activity/events/#list-public-events"}
Requests會自動解碼來自伺服器的內容。大多數unicode字符集都能被無縫地解碼。請求發出後,Requests會基於HTTP頭部對響應的編碼作出有根據的推測。當你訪問r.text之時,Requests會使用其推測的文字編碼。你可以找出Requests使用了什麼編碼,並且能夠使用r.encoding 屬性來改變它

>>> r.encoding
'utf-8'

5、二進位制響應內容

如果請求返回的是二進位制的圖片,你可以使用r.content訪問請求響應體。

import requests
from PIL import Image
from StringIO import StringIO
r = requests.get('http://cn.python-requests.org/zh_CN/latest/_static/requests-sidebar.png')
i = Image.open(StringIO(r.content))
i.show()

6、JSON響應內容

Requests中也有一個內建的JSON解碼器,助你處理JSON資料:

import requests
r = requests.get('https://github.com/timeline.json')
print r.json()
r.json將返回的json格式字串解碼成python字典。r.text返回的utf-8的文字。

7、定製請求頭

如果你想為請求新增HTTP頭部,只要簡單地傳遞一個 dictheaders 引數就可以了。

import requests
import  json
payload = {'some': 'data'}
headers = {'content-type': 'application/json'}
r = requests.get('https://github.com/timeline.json', data=json.dumps(payload), headers=headers)
print r.json()
注意,這裡的payload是放到body裡面的,所以params引數要使用json資料。

8、POST請求

就像上面‘定製請求頭’中的例子,將payload序列化為json格式資料,傳遞給data引數。

9、POST提交檔案

先製作一個text檔案,名為‘report.txt’,內容是‘this is a file’。Requests使得上傳多部分編碼檔案變得很簡單:

import requests

url = 'http://httpbin.org/post'
files = {'file': open('report.txt', 'rb')}
r = requests.post(url, files=files)
print r.text
返回結果是:
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/flaskexample/postfile.py
{
  "args": {}, 
  "data": "", 
  "files": {
    <strong>"file": "this is a file"</strong>
  }, 
  "form": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "160", 
    "Content-Type": "multipart/form-data; boundary=a3b41a6300214ffdb55ddbc23dfc0d91", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.7.0 CPython/2.7.9 Windows/2012Server"
  }, 
  "json": null, 
  "origin": "202.108.92.226", 
  "url": "http://httpbin.org/post"
}


Process finished with exit code 0

10、POST提交表單

傳遞一個字典給 data 引數就可以了。資料字典在發出請求時會自動編碼為表單形式:

>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.post("http://httpbin.org/post", data=payload)
檢視響應內容:

>>> print r.text
{
  "args": {},
  "data": "",
  "files": {},
  "form": {
    "key1": "value1",
    "key2": "value2"
  },

  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Content-Length": "23",
    "Content-Type": "application/x-www-form-urlencoded",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.6.0 CPython/2.7.10 Windows/7"
  },
  "json": null,
  "origin": "124.251.251.2",
  "url": "http://httpbin.org/post"
}

11、響應狀態碼

使用r.status_code返回響應的狀態碼。

import requests

r = requests.get('http://httpbin.org/get')
print r.status_code
為方便引用,Requests還附帶了一個內建的狀態碼查詢物件:
print r.status_code == requests.codes.ok

12、失敗請求丟擲異常

如果傳送了一個失敗請求(非200響應),我們可以通過 Response.raise_for_status()來丟擲異常:

import requests

bad_r = requests.get('http://httpbin.org/status/404')
print bad_r.status_code
bad_r.raise_for_status()
返回結果是:
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/flaskexample/postfile.py
404
Traceback (most recent call last):
  File "C:/Users/Administrator/PycharmProjects/flaskexample/postfile.py", line 5, in <module>
    bad_r.raise_for_status()
  File "C:\Python27\lib\site-packages\requests\models.py", line 851, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
<strong>requests.exceptions.HTTPError: 404 Client Error: NOT FOUND</strong>

Process finished with exit code 1
如果返回碼是200,則不會丟擲異常,即:
import requests

bad_r = requests.get('http://httpbin.org/get')
print bad_r.status_code
bad_r.raise_for_status()
的返回結果是:
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/flaskexample/postfile.py
200

Process finished with exit code 0

13、響應頭

我們可以檢視以一個Python字典形式展示的伺服器響應頭:

讀取全部頭部:

r.headers
返回:
{
    'content-encoding': 'gzip',
    'transfer-encoding': 'chunked',
    'connection': 'close',
    'server': 'nginx/1.0.4',
    'x-runtime': '148ms',
    'etag': '"e1ca502697e5c9317743dc078f67693f"',
    'content-type': 'application/json'
}
讀取某一個頭部欄位:
r.headers['Content-Type']
r.headers.get('content-type')

14、Cookies

得到響應中包含的一些Cookie:

>>> url = 'http://example.com/some/cookie/setting/url'
>>> r = requests.get(url)

>>> r.cookies['example_cookie_name']
'example_cookie_value'
要想傳送你的cookies到伺服器,可以使用 cookies 引數:
>>> url = 'http://httpbin.org/cookies'
>>> cookies = dict(cookies_are='working')

>>> r = requests.get(url, cookies=cookies)
>>> r.text
返回結果:

u'{\n  "cookies": {\n    "cookies_are": "working"\n  }\n}\n'

15、重定向與請求歷史

預設情況下,除了 HEAD, Requests會自動處理所有重定向。

可以使用響應物件的 history 方法來追蹤重定向。

>>> r = requests.get('http://github.com')
>>> r.url
'https://github.com/'
>>> r.status_code
200
>>> r.history
[<Response [301]>]
如果你使用的是GET, OPTIONS, POST, PUT, PATCH 或者 DELETE,,那麼你可以通過 allow_redirects 引數禁用重定向處理:
>>> r = requests.get('http://github.com', allow_redirects=False)
>>> r.status_code
301
>>> r.history
[]
如果你使用的是HEAD,你也可以啟用重定向:
>>> r = requests.head('http://github.com', allow_redirects=True)
>>> r.url
'https://github.com/'
>>> r.history
[<Response [301]>]




相關推薦

使用Python的Requests進行web介面測試

1、Requests簡介 Requests 是使用 Apache2 Licensed 許可證的 HTTP 庫。用 Python 編寫,真正的為人類著想。 Python 標準庫中的 urllib2 模組提供了你所需要的大多數 HTTP 功能,但是它的 API 太渣了。它是為

使用Fiddler進行Web介面測試

本人摘取自CSDN Blog,http://blog.csdn.net/ohmygirl/article/details/17846199 一、Fiddler簡介 1.為什麼是Fiddler? 抓包工具有很多,小到最常用的web除錯工具firebug,達到通用的強大的抓包工

使用Python的Requests進行web接口測試

異常 part instead range 導入 2.7 text 部分 pub 1、Requests簡介Requests 是使用 Apache2 Licensed 許可證的 HTTP 庫。用 Python 編寫,真正的為人類著想。 Python 標準庫中的 urllib

Selenium+Python進行web自動化測試(Demo+API)

mod amp cep path chrome all 配置使用 nas img Selenium官方網站 http://selenium-python.readthedocs.io/ 配置使用環境 下載相應的瀏覽器驅動, Firefox 是默認的 本文以 chrome 為

Selenium基於Python 進行 web 自動化測試

對象 little syn can chang 執行 pri lba 版本 From: https://www.cnblogs.com/hanxiaobei/p/6108677.html 配置使用環境 下載相應的瀏覽器驅動, Firefox 是默認的 本文以 chrom

學習總結—JMeter實現web介面測試實踐舉例

測試專案: 本地搭建的jforum專案 測試內容: 登入:通過賬號密碼登入,並驗證是否登入成功; 進入板塊:實現動態獲取板塊資訊,驗證是否能正確進入板塊; 發帖:實現不同板塊隨機發帖,驗證是否發帖成功;   一、登入驗證 第一步,開啟JMeter 圖1 新建

postman進行http介面測試

HTTP的介面測試工具有很多,可以進行http請求的方式也有很多,但是可以直接拿來就用,而且功能還支援的不錯的,我使用過的來講,還是postman比較上手。 優點: 1、支援用例管理 2、支援get、post、檔案上傳、響應驗證、變數管理、環境引數管理等功能 3、

WEB介面測試之Jmeter介面測試自動化之一

 1、開啟jmeter           開源版本和可執行版本均可在Apache官方網站上下載到,解壓後開啟bin目錄下的jmeter.bat檔案,即打開了使用者介面:                     2、新增相關元件          2.1、新建執行

WEB介面測試之Jmeter介面測試自動化之四 持續構建

Jmeter是壓力測試、介面測試工具,Ant是基於Java的構建工具,具有跨平臺的作用,jenkins是持續整合工具。將這三者結合起來可以搭建一套webservice介面測試的持續構建環境。   1、安裝JDK,配置java環境變數(略過) 2、安裝Jmeter,這裡

Web介面測試工具---Poster與Postman

---Poster與Postman   工作當中有不少時間在編寫和維護介面自動化測試用例。打算先整理一些介面相關工具的使用。   簡單對接Web口測試的相關工具/技術做個劃分。   HTTP/SOAP協議介面的功能測試:   1、瀏覽器URL(GET請求) http://1

用阿里巴巴官方給Jmeter開發的Dubbo sampler取樣器進行dubbo介面測試【圖解剖析】

(本文圖片過於橫長,請右鍵新視窗開啟本文截圖) 【一】Dubbo sampler下載地址:       該外掛支援jmeter 3.2及3.2以上版本。       現在很多網際網路公司開發的系統中,越來越多的介面漸漸從http/https呼叫,改成了dubbo方式,原

轉(二):WEB介面測試之Jmeter介面測試自動化(資料分離)

通過逐個錄入的方式,好不容易將需要測試幾十個介面的300多個測試用例錄入sampler-http請求中,固定的測試環境跑起來也還感覺良好。不料在新伺服器環境中跑用例時,問題來了:修改引數維護指令碼等成本太大!      指令碼引數是寫死的,修改起來得一個個請求開啟來依次輸入引

使用JMeter進行Web 效能測試

1. 檢查點 JMeter通過斷言元件來實現測試結果正確性驗證。斷言元件獲取伺服器的響應資料,根據斷言規則匹配這些響應資料,匹配到,正常;匹配不到,則斷定為失敗。下面的例子是通過響應斷言判斷使用者是否登入成功,登入成功後,響應的資料,即html中有一個 <a id=

Visual Studio進行Web效能測試- Part II

對於一個多使用者的應用程式,效能是非常重要的。效能不僅是執行的速度,它包括負載和併發方面。Visual Studio是可以用於效能測試的工具之一。Visual Studio Test版或Visual Studio 2010旗艦版為自動化測試提供了支援。 介紹 對於一個多使

Jmeter進行http介面測試(對原文補充)

原文參考 http://blog.csdn.net/wt081216/article/details/51306201  一、測試需求描述   1、本次測試的介面為http服務端介面   2、介面的主要分成兩類,一類提供給查詢功能介面,一類提供儲存資料功能介面,這裡我們舉

Web介面測試工具(postman/fiddler)

1. PostmanPostman是一個 Chrome 擴充套件,能提供強大的 Web API & HTTP 請求除錯功能。Postman能夠傳送任何型別的http請求,支援GET/PUT/POST/DELETE等,請求頭中可以附帶任何數量的headers資訊。Pos

web介面測試中需要注意的地方

 針對Web應用的介面測試,可以從以下方面進行使用者介面測試:控制元件測試、多媒體測試、內容測試、容器測試、瀏覽器相容性測試、整體介面測試等。下面詳細敘述。 1、 控制元件測試 Web應用與其他應用程式一樣,也有許多用以實現各種功能或者操作的控制元件,比如常見的按鈕

phoenixframe自動化測試平臺web介面測試例項

package org.phoenix.cases.lianmeng; import java.util.LinkedList; import org.phoenix.action.WebElementActionProxy; import org.phoenix.mo

使用Python的requests進行介面測試——session物件的妙用

在進行介面測試的時候,我們會呼叫多個介面發出多個請求,在這些請求中有時候需要保持一些共用的資料,例如cookies資訊。妙用1requests庫的session物件能夠幫我們跨請求保持某些引數,也會在同一個session例項發出的所有請求之間保持cookies。舉個栗子,跨請

Jmeter連接SqlServer數據進行壓力測試

jmeter 性能測試 前提準備:先安裝jdbc驅動驅動下載鏈接地址:http://pan.baidu.com/s/1bpDpjSr 密碼:v6tn 下載解壓之後,講sqljdbc4.jar放置jmeter的安裝目錄/lib下;復制之後重新啟動jmeter;1.測試計劃—配置驅動程序 測試計劃