python也可以進行接口測試,并且比工具更加靈活多變,借助第三方庫requests,下載下傳方式:cmd終端輸入 pip install requests
接口請求方式存在多種,get,post,put,delete等,目前企業中用的最多的為get及post請求,我們這裡也主要介紹如何使用python+requests進行post和get請求:
Get請求
import requests
apiurl="http://39.107.96.138:3000/api/v1/topics"
'''請求接口'''
輸入參數
resonse=requests.get(url=apiurl)
print(resonse.status_code)
# response.content ---響應值(資料流類型)
# response.text ---響應值(字元串類型)
# response.json() ---響應值(字典類型,隻能是接口才能這個方法)
# print(respone.content)
#response1.elapsed.total_seconds() ----擷取接口耗
以上可以看到一個簡單的get請求,并未傳入任何參數及請求頭資訊,以及列舉了一些擷取響應資訊的代碼。如果我們的接口需要傳入參數以及請求頭資訊該怎麼辦:
我們直接在請求後面的括号中進行參數的傳遞即可,具體詳情可參考requests的文檔介紹。
對于傳回的資料,我們可以對其進行格式的變化,以便于我們進行使用及提取相關資訊:
#json與字元串與字典的轉換
import json
#字元串轉換成字典類型
dict1=json.loads(string1)
#字典類型轉換成json字元串(python無json資料類型,實際為str類型)
json1=json.dumps(dict1)
Post請求
res=requests.post('http://39.107.96.138:3000/api/v1/topics',
json={"accesstoken":"dhsfdretret","title":"心儀的小姐姐和别人跑了","tab":"share","content":"真的好難受啊"})
print(res.status_code)
if res.status_code == 200:
print("建立成功")
else:
print("失敗")
實際我們看到隻是請求方式進行了改變,一級傳參的關鍵字變了一下,post中傳參可以使用data=,也可以使用json=,具體情況具體使用,json=多隻參數以json字元串格式進行傳遞,data=多用來進行字典格式傳遞,具體格式變換也可以使用json.loads()等方法進行變換,對傳回來的資料進行判斷斷言,以確定我們用例的執行成功與否。
Cookies設定
我們都知道有些接口是需要cookie進行傳遞才可進行請求,那麼我們不能每請求一次都需要進行收到擷取頁面的cookie,那麼我們如何進行cookie的設定呢:------>>>requests.session()
sessions = requests.session()
res=sessions.post('http://39.107.96.138:3000/api/v1/topics',
json={"accesstoken":"dhsfdretret","title":"心儀的小姐姐和别人跑了","tab":"share","content":"真的好難受啊"})
print(res.status_code)
以上我們可以看到直接設定sessions,然後進行登入接口請求,裡面的cookie會自動set到sessions中,後續直接使用sessions請求即可。
若無登入接口傳回cookie,公司有自動的擷取cookie接口,可以使用cookie自帶的RequestsCookieJar()方法set值:
sessions = requests.session()
c = requests.cookies.RequestsCookieJar()
c.set('cookie_key1','cookie_value1') # set擷取的cookie值
c.set('cookie_key2','cookie_key2') # # set擷取的cookie值
sessions.cookies.update(c) # 更新sessions
res=sessions.post('http://39.107.96.138:3000/api/v1/topics',
json={"accesstoken":"dhsfdretret","title":"心儀的小姐姐和别人跑了","tab":"share","content":"真的好難受啊"})
print(res.status_code)
接口常見問題:
1,若接口存在重定向,如何檢視重定向前的請求資訊(requests自動處理重定向)?
response.history #list類型
for i in response.history:
print(i.url)
print(i.status_code)
print(i.heasers["Location"]) 擷取定向的位址
如何設定接口重定向不處理?
response = requests.get(url,allow_redirects=False) #allow_redirects參數設定
2,url中帶有中文編碼轉換?(requests請求時自動轉換)
from urllib.parse import quote,unquote
a = '零基礎Python自動化'
b = quote(a) #編碼
c = unquote(b) #解碼
