python写后台接口请求出错_python登录接口测试问题记录与解决
最近做一個登錄接口測試中,發現了以下的一些場景,本次將所遇到的問題以及解決過程做下記錄:
1、抓包發現登錄操作時,先后請求三個接口,并且每個接口有關聯
2、每次請求都需要保留cookie信息,下個接口請求需要
3、每個接口返回數據非json格式,提取數據需要另外操作
本篇文檔就從這三點來開始講
1、首先看抓包情況與大致框架分析
image.png
先后請求3條接口,然后我們一條一條來分析
①整體來看,都是get請求,且共同參數都是service、callback、_,第2條和第3條都還有其他的參數
image.png
②第1條接口返回的數據中data下的兩個字段就是第2個接口的參數
image.png
image.png
③第2條接口返回數據中的某個字段是第3條接口的參數
綜合以上就寫大致的框架
#coding:utf-8
import requests,re
url = "xxxxx"
#tt就代替那個_作為參數了
def login1(service,callback,tt):
pass
#三條接口相互依賴,第2個接口參數來源第1個接口返回值
def login2():
pass
#三條接口相互依賴,第3個接口參數來源第2個接口返回值
def login3():
pass
if __name__ == '__main__':
service = 'xxxxxx'
callback = 'xxxxxxx'
tt = 'xxxxxxx'
login3(service, callback, tt)
2、然后就是正常的編寫get請求了
image.png
這里的返回值因為不是json格式,就不用json.loads() 這么寫了,先打印查看
image.png
3、上面已經說到,這里的lt和execution 都是下個接口的參數,所以此刻需要將他們的值提取出來
這就涉及到正則提取了
ps:推薦個調試的網站 http://tools.jb51.net/regex/javascript
python正則表達學習地址:https://www.jb51.net/article/177521.htm
python中這里寫起來也簡單,具體見下面腳本中的備注信息
def login1(service,callback,tt):
print("開始執行login1")
url = url1 + "/sso/login"
params = {
"service":service,
"callback":callback,
"_":tt
}
req = requests.get(url = url,params=params)
print(req.text)
#返回結果轉換為字符串
response_str = str(req.text)
#正則提取字符串信息,返回列表,提取data下的信息
m = re.findall(r'{.*?}',response_str)[0]
#data下就是key-value形式,通過eval()將字符串轉換為字典,然后字典中通過key提取到value值
lt = eval(m)['lt']
execution = eval(m)['execution']
return lt,execution
4、第2個接口編寫,并將第1個接口返回的東西帶入
def login2(service,callback,tt):
lt,execution = login1(service,callback,tt)
print("開始執行login2")
執行過程中發現報302錯誤
302錯誤:redirect,代表暫時性轉移;意思就是你訪問網址a,但是因為服務端的攔截器或者其他代碼處理,會被重定向到網址b。
利用requests模擬登錄時,直接使用request.get(url),容易造成 302 重定向,究其原因是因為cookie不持久(requests自帶cookie處理,但不持久)
所以這里 我們就需要將cookie存儲下來并使用起來
具體cookie用法見路徑:https://www.cnblogs.com/liuzhzhao/p/12114453.html
5、知道怎么使用了,那么我們代碼修改一下
image.png
后面的腳本就照葫蘆畫瓢了,第1個接口的cookie信息保存給到第2個接口使用,第2個接口的cookie保存,給到第3個接口使用
整體上就寫完了,后面需要單獨補充下就好
本次主要知識點:接口依賴調用、cookie保存與使用、python關鍵信息正則提取
總結
以上是生活随笔為你收集整理的python写后台接口请求出错_python登录接口测试问题记录与解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql商品和图片表_【mysql】数
- 下一篇: mongodb查询值不为空_MongoD