1. 程式人生 > 其它 >Python 介面自動化 -- requests框架

Python 介面自動化 -- requests框架

1.前言

Python內建的urllib模組,也可以用於訪問網路資源。但是,它用起來比較麻煩,而且,缺少很多實用的高階功能。因此我們使用 requests 模組進行進行介面測試。
requests官方文件資料地址:http://cn.python-requests.org/zh_CN/latest/



2.環境安裝

cmd(win+R快捷鍵)輸入:

pip install requests -i https://pypi.douban.com/simple

提示以下資訊表示安裝成功。



3.requests傳送請求

3.1 get請求無引數param

  1. 將安裝好的requests模組匯入後,通過GET訪問一個URL地址的網頁頁面,如:

    http://www.cnblogs.com/wwho

  2. 這裡的 r 也就是 response,請求後的返回值,可以呼叫 response 裡的 status_code 方法檢視狀態碼

  3. 狀態碼 200 只能說明介面請求傳送成功了,並不能說明功能一定是 OK 的,一般要檢視響應的內容,r.text 是返回文字資訊

# -*- coding:utf-8 -*-

# 匯入 requests 模組
import requests
# 定義 url
url = 'http://www.cnblogs.com/wwho'
# 請求部落格園
r = requests.get(url=url)
# 列印狀態碼
print(r.status_code)
# 列印文字
print(r.text)



3.2 get請求有引數param

url地址為:http://apis.juhe.cn/simpleWeather/query?city=深圳&key=xxx
引數:city=深圳&key=xxx

可以以字典的形式傳參:
{"city": "深圳", "key": "xxx"}

多個引數格式:

{"key1": "value1", "key2": "value2", "key3": "value3"}

(r.url獲取當前url地址,可以檢查是否傳參成功)

程式碼:

# -*- coding:utf-8 -*-

# 匯入 requests 模組
import requests

# 定義 url
url = 'http://apis.juhe.cn/simpleWeather/query'
par = {"city": "深圳",
       "key": "4611a7abae4afe573fd7ca751d9d423a"}

result = requests.get(url=url, params=par)
# 列印文字
print(result.text)



3.3定製請求頭

一個完整的get請求,應該包括請求行(url) 和請求頭(headers)、請求引數(params),
什麼時候要加請求頭呢,如果你不確定的話最好加上去。

3.4 response返回資訊

response返回資訊

-- r.status_code   # 響應狀態碼

-- r.content   # 位元組方式的響應體,會自動為你解碼 gzip 和deflate 壓縮

-- r.headers  # 以字典物件儲存伺服器響應頭,但是這個字典比較特殊,字典鍵不區分大小寫,若鍵不存在則返回 None

-- r.json()  # Requests 中內建的 JSON 解碼器,requests的方便之處還在於,對於特定型別的響應,例如JSON,可以直接獲取

-- r.url  # 獲取 url

-- r.encoding  # 編碼格式,requests自動檢測編碼

-- r.cookies  # 獲取 cookie

-- r.raw  # 返回原始響應體-- r.text #字串方式的響應體,會自動根據響應頭部的字元編碼進行解碼

-- r.raise_for_status()  # 失敗請求(非 200 響應)丟擲異常

以上就是requests模組主要的返回格式。



3.5 post請求

講post請求之前 先講一下 requests.session()
requests.session() 獲取 requests的session物件,簡單來說就相當於一個微型瀏覽器,能自動保持登入態。所以一般對於 cookie – session 保持登入態的系統就可以使用
requests.session()

使用方法:後續的請求都使用session即可

Post請求首先要注意的就是body的資料型別
常見的有四種類型,但是不止四種:

  1. 第一種:application/json: {“key1“:”value1”,“keyt2":“value2"}

  2. 第二種:application/x-www-form-urlencoded:name1= value1&name2=value2

  3. 第三種:multipart/form-data:這一種是表單格式的
    (檔案上傳,圖片上傳等混合式)

  4. 第四種:text/xml

examples.getStateName

Body為x-www-form-urlencoded型別

怎麼知道body是什麼型別?

  1. 介面文件有說明
  2. 自己抓包看

直接通過抓包就可以看出post請求的資料型別,如下圖就是x-www-form-urlencoded型別

傳data引數就行(無需轉json)

程式碼:

# -*- coding:utf-8 -*-
# @File:sms.py
import requests
host = 'http://127.0.0.1:8002'
session = requests.session()  # 相當於微型瀏覽器,保持登入態
url = host + '/api/mgr/signin'  # 定義url
body = {
    "username": "byhy",
    "password": "88888888"
}
resp = session.post(url=url, data=body)

status_code=resp.status_code  #獲取響應狀態碼
print('響應狀態碼:{}'.format(status_code))

text=resp.text  # 獲取響應內容,結果型別是字串
print('響應內容:{}'.format(text))

json=resp.json()  # 獲取響應內容,結果是字典型別
print('響應內容:{}'.format(json))

resp_headers=resp.headers  # 獲取響應headers
print('響應header:{}'.format(resp_headers))

Body為json型別

json=body: 這個表示自動將python裡面的字典,轉化為json格式引數了。關於字典和json的種種關係,後面專門寫篇文章講一下。

程式碼:

# -*- coding:utf-8 -*-
import requests
host = 'http://127.0.0.1:8002'
session = requests.session()  # 相當於微型瀏覽器,保持登入態
url = host + '/api/mgr/signin'  # 定義登入的 url
body = {
    "username": "byhy",
    "password": "88888888"
}

resp = session.post(url=url, data=body)  # 傳送登入請求

url_add_customer = host + '/api/mgr/customers'  # 新建客戶的 url
body = {
    "action":"add_customer",
    "data":{
        "name":"tester",
        "phonenumber":"13345679934",
        "address":"深圳市南山區"
    }
}
resp = session.post(url=url_add_customer, json=body)
print(resp.text)  # 列印響應文字



3.6 put請求

put 請求的介面做法跟 post請求的差不多的,只是把post 請求改為 put請求。一樣要看請求的格式。如果是 json 格式,也是用json接,Form格式用data接。

程式碼:

# -*- coding:utf-8 -*-
# @Time:2021/4/16 9:54
# @File:sms.py
import requests
host = 'http://127.0.0.1:8002'
session = requests.session()  # 相當於微型瀏覽器,保持登入態
url = host + '/api/mgr/signin'  # 定義登入的 url
body = {
    "username": "byhy",
    "password": "88888888"
}
resp = session.post(url=url, data=body)

url_modify_customer = host + '/api/mgr/customers'  # 修改客戶的 url
body = {
    "action":"modify_customer",
    "id": 52,
    "newdata":{
        "name":"深圳市橋北醫院",
        "phonenumber":"13345678888",
        "address":"深圳市中醫院"
    }
}
resp = session.put(url=url_modify_customer, json=body)
print(resp.text)  # 列印修改客戶介面響應的文字



3.7 delete請求

delete 請求的介面做法跟 post請求的差不多的,只是把post 請求改為 delete請求。一樣要看請求的格式。如果是 json 格式,也是用json接,Form格式用data接。

程式碼:

# -*- coding:utf-8 -*-
# @Time:2021/4/16 9:54
# @File:sms.py
import requests
host = 'http://127.0.0.1:8002'
session = requests.session()  # 相當於微型瀏覽器,保持登入態
url = host + '/api/mgr/signin'  # 定義登入的 url
body = {
    "username": "byhy",
    "password": "88888888"
}
resp = session.post(url=url, data=body)

url_delete_customer = host + '/api/mgr/customers'  # 刪除客戶的 url
body = {
    "action":"del_customer",
    "id": 52
}
resp = session.delete(url=url_delete_customer, json=body)
print(resp.text)  # 列印刪除客戶介面響應的文字

總結:

requests庫的請求方法裡引數眾多,所以簡單總結一下:

    1. get請求帶引數就用params=params

    2. post請求是form格式就用data=data

    3. post請求是json型別引數就用json=json

    4. 請求頭資訊header就用headers=headers