1.前言
Python內(nèi)置的urllib模塊,也可以用于訪問網(wǎng)絡(luò)資源。但是,它用起來比較麻煩,而且,缺少很多實用的高級功能。因此我們使用 requests 模塊進行進行接口測試。
requests官方文檔資料地址:http://cn.python-requests.org/zh_CN/latest/
2.環(huán)境安裝
cmd(win+R快捷鍵)輸入:
pip install requests -i https://pypi.douban.com/simple
提示以下信息表示安裝成功。
3.requests發(fā)送請求
3.1 get請求無參數(shù)param
- 將安裝好的requests模塊導(dǎo)入后,通過GET訪問一個URL地址的網(wǎng)頁頁面
- 這里的 r 也就是 response,請求后的返回值,可以調(diào)用 response 里的 status_code 方法查看狀態(tài)碼
- 狀態(tài)碼 200 只能說明接口請求發(fā)送成功了,并不能說明功能一定是 OK 的,一般要查看響應(yīng)的內(nèi)容,r.text 返回文本信
# -*- coding:utf-8 -*-
# 導(dǎo)入 requests 模塊
import requests
# 定義 url
url = 'http://www.cnblogs.com/wwho'
# 請求博客園
r = requests.get(url=url)
# 打印狀態(tài)碼
print(r.status_code)
# 打印文本
print(r.text)
3.2 get請求有參數(shù)param
url地址為:http://apis.juhe.cn/simpleWeather/query?city=深圳&key=xxx
參數(shù):city=深圳&key=xxx
可以以字典的形式傳參:{"city": "深圳", "key": "xxx"}
多個參數(shù)格式:
{"key1": "value1", "key2": "value2", "key3": "value3"}
(r.url獲取當前url地址,可以檢查是否傳參成功)
代碼:
# -*- coding:utf-8 -*-
# 導(dǎo)入 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請求,應(yīng)該包括請求行(url) 和請求頭(headers)、請求參數(shù)(params),
什么時候要加請求頭呢,如果你不確定的話最好加上去。
3.4 response返回信息
response返回信息
-- r.status_code # 響應(yīng)狀態(tài)碼
-- r.content # 字節(jié)方式的響應(yīng)體,會自動為你解碼 gzip 和deflate 壓縮
-- r.headers # 以字典對象存儲服務(wù)器響應(yīng)頭,但是這個字典比較特殊,字典鍵不區(qū)分大小寫,若鍵不存在則返回 None
-- r.json() # Requests 中內(nèi)置的 JSON 解碼器,requests的方便之處還在于,對于特定類型的響應(yīng),例如JSON,可以直接獲取
-- r.url # 獲取 url
-- r.encoding # 編碼格式,requests自動檢測編碼
-- r.cookies # 獲取 cookie
-- r.raw # 返回原始響應(yīng)體-- r.text #字符串方式的響應(yīng)體,會自動根據(jù)響應(yīng)頭部的字符編碼進行解碼
-- r.raise_for_status() # 失敗請求(非 200 響應(yīng))拋出異常
以上就是requests模塊主要的返回格式。
3.5 post請求
講post請求之前 先講一下 requests.session()
requests.session() 獲取 requests的session對象,簡單來說就相當于一個微型瀏覽器,能自動保持登錄態(tài)。所以一般對于 cookie – session 保持登錄態(tài)的系統(tǒng)就可以使用
requests.session()
使用方法:后續(xù)的請求都使用session即可
Post請求首先要注意的就是body的數(shù)據(jù)類型
常見的有四種類型,但是不止四種:
- 第一種:application/json: {“key1“:”value1”,“keyt2":“value2"}
- 第二種:application/x-www-form-urlencoded:name1= value1&name2=value2
- 第三種:multipart/form-data:這一種是表單格式的
(文件上傳,圖片上傳等混合式)
- 第四種:text/xml
examples.getStateName
Body為x-www-form-urlencoded類型
怎么知道body是什么類型?
- 接口文檔有說明
- 自己抓包看
直接通過抓包就可以看出post請求的數(shù)據(jù)類型,如下圖就是x-www-form-urlencoded類型
傳data參數(shù)就行(無需轉(zhuǎn)json)
代碼:
# -*- coding:utf-8 -*-
# @File:sms.py
import requests
host = 'http://127.0.0.1:8002'
session = requests.session() # 相當于微型瀏覽器,保持登錄態(tài)
url = host + '/api/mgr/signin' # 定義url
body = {
"username": "byhy",
"password": "88888888"
}
resp = session.post(url=url, data=body)
status_code=resp.status_code #獲取響應(yīng)狀態(tài)碼
print('響應(yīng)狀態(tài)碼:{}'.format(status_code))
text=resp.text # 獲取響應(yīng)內(nèi)容,結(jié)果類型是字符串
print('響應(yīng)內(nèi)容:{}'.format(text))
json=resp.json() # 獲取響應(yīng)內(nèi)容,結(jié)果是字典類型
print('響應(yīng)內(nèi)容:{}'.format(json))
resp_headers=resp.headers # 獲取響應(yīng)headers
print('響應(yīng)header:{}'.format(resp_headers))
Body為json類型
?json=body: 這個表示自動將python里面的字典,轉(zhuǎn)化為json格式參數(shù)了。關(guān)于字典和json的種種關(guān)系,后面專門寫篇文章講一下。
代碼:
# -*- coding:utf-8 -*-
import requests
host = 'http://127.0.0.1:8002'
session = requests.session() # 相當于微型瀏覽器,保持登錄態(tài)
url = host + '/api/mgr/signin' # 定義登錄的 url
body = {
"username": "byhy",
"password": "88888888"
}
resp = session.post(url=url, data=body) # 發(fā)送登錄請求
url_add_customer = host + '/api/mgr/customers' # 新建客戶的 url
body = {
"action":"add_customer",
"data":{
"name":"tester",
"phonenumber":"13345679934",
"address":"深圳市南山區(qū)"
}
}
resp = session.post(url=url_add_customer, json=body)
print(resp.text) # 打印響應(yīng)文本
3.6 put請求
put 請求的接口做法跟 post請求的差不多的,只是把post 請求改為 put請求。一樣要看請求的格式。如果是 json 格式,也是用json接,F(xiàn)orm格式用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() # 相當于微型瀏覽器,保持登錄態(tài)
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":"深圳市橋北醫(yī)院",
"phonenumber":"13345678888",
"address":"深圳市中醫(yī)院"
}
}
resp = session.put(url=url_modify_customer, json=body)
print(resp.text) # 打印修改客戶接口響應(yīng)的文本
3.7 delete請求
delete 請求的接口做法跟 post請求的差不多的,只是把post 請求改為 delete請求。一樣要看請求的格式。如果是 json 格式,也是用json接,F(xiàn)orm格式用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() # 相當于微型瀏覽器,保持登錄態(tài)
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) # 打印刪除客戶接口響應(yīng)的文本
總結(jié):
requests庫的請求方法里參數(shù)眾多,所以簡單總結(jié)一下:
- get請求帶參數(shù)就用params=params
- post請求是form格式就用data=data
- post請求是json類型參數(shù)就用json=json
- 請求頭信息header就用headers=headers
最后如果你想學(xué)習自動化測試和需要軟件測試資料,歡迎加入筆者的交流群:320231853,里面會有很多測試資源和大佬答疑解惑,我們一起交流一起學(xué)習!
搜索文章來源:http://www.zghlxwxcb.cn/news/detail-711156.html
復(fù)制文章來源地址http://www.zghlxwxcb.cn/news/detail-711156.html
到了這里,關(guān)于Python 接口自動化 —— requests框架的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!