接口測試中的cookie鑒權和token鑒權


  在講今天的內容之前,我們應該先了解一些基本的基礎知識,要不然,突然講鑒權,可能有點懵,聽不太懂,所以,我會先把基礎的東西先梳理一遍

一、什么是接口測試?
接口測試:本質是基於某種協議,發送一個請求給服務器,然后服務器返回一個響應數據,然后對響應數據進行分析,判斷是否與我們預期的返回一致,從而驗證功能是否正確,這就是接口測試

二、授權和鑒權的區別?
授權:相當於給一個通行證
鑒權:鑒定是否有權訪問(判斷有沒有通行證)

三、cookie與session的區別
1、cookie是一個小的小文本文件,是由web服務器保存在用戶瀏覽器上的小文本文件,包含用戶的相關信息,無論何時用戶訪問到服務器,都會帶上該服務器的cookie信息,一般cookie是有有效期的,cookie只在瀏覽器上保存一段規定的時間,一旦超過規定的時間,該cookie就會被系統清除

2、session是將數據存儲在服務器中,服務器會為每一個用戶創建一條session,用戶訪問服務器的時候需要拿着session去表明自己的身份,session的實現是基於cookie,session需要借助於cookie來存儲sessionIDsession可以自動保存cookie信息

另外注意:cookie和session都是開發設置的,我們作為測試人員,不要想着去怎么設置,基本與測試人員無關,我們只是測接口

 cookie_session鑒權的接口

接下來,我們以課堂派的接口為例,為大家講解如何進行cookie和session方式鑒權的接口,提前准備好一些接口信息,比如:

# 1.登錄接口
login_url = "https://www.ketangpai.com/UserApi/login"
請求方法:post
請求參數類型:表單類型
請求參數: 有時候我們並沒有拿到開發人員給我們的接口文檔,那請求參數怎么獲取,只能去瀏覽器上手動抓包,獲取這些信息
email: 郵箱(賬號)
password: 密碼
remember: 0           

# 2.獲取班級列表的接口地址
course_url = "https://www.ketangpai.com/CourseApi/lists"

 

 直接來上代碼

"""
提前准備的工作:課堂派的接口

# 1.登錄接口
login_url = "https://www.ketangpai.com/UserApi/login"
請求方法:post
請求參數類型:表單類型
請求參數:
    email:  郵箱(賬號)
    password: 密碼
    remember: 0

# 2.獲取班級列表的接口地址
course_url = "https://www.ketangpai.com/CourseApi/lists"


筆記:
http請求時無狀態的:
    可以通過cookie或者token來傳遞用戶登錄的狀態信息
    session可以自動保存cookie信息
cookie+session進行鑒權的接口,在python的處理:

    requests模塊中有一個session類,使用session類的同一個對象發送請求,會自動保存之前請求的cookie信息
"""
import requests

# 創建一個session對象
session = requests.Session()
# -------------------------請求課堂派登錄接口-------------------------------------
# 接口地址
login_url = "https://www.ketangpai.com/UserApi/login"
# 請求參數
params = {
    "email": "1234667890",
    "password": "000000123",
    "remember": 0     
}

response = session.post(url=login_url, data=params)
print(response.json())

# -------------------請求課堂派課程列表的接口---------------------------
course_url = "https://www.ketangpai.com/CourseApi/lists"

response2 = session.get(url=course_url)
print(response2.json())

 token鑒權的接口

我們以<前程貸>的項目中的充值功能為例,來講解如何進行token鑒權,因為是先登錄,登錄后才能實現充值功能

token鑒權解決思路:

1、登錄,獲取服務器返回的token

2、提取登錄之后返回的token
    1、要么從返回的響應數據中提取
    2、要么從響應頭中提取

3、請求需要鑒權的接口時,加上前面提取得token
    1、要么把token放在請求頭中
    2、要么返回請求的參數中

import requests
from jsonpath import jsonpath# 登錄
login_url = "http://api.lemonban.com/futureloan/member/login"
params = {
    "mobile_phone": "15879563287",
    "pwd": "lemonban"
}
headers = {
    "X-Lemonban-Media-Type": "lemonban.v2"
}

# 1、發送請求登錄
response = requests.post(url=login_url, json=params, headers=headers)
# 獲取請求之后返回得數據
result = response.json()

# 2、提取token
token = jsonpath(result, "$..token")[0]
token_data = "Bearer" + " " + token

# 提取用戶id
member_id = jsonpath(result, "$..id")[0]
# ------------------------------充值--------------------------
recharge_url = "http://api.lemonban.com/futureloan/member/recharge"
# 充值的參數
recharge_params = {
    "member_id": member_id,  # 充值的用戶id哪里來?
    "amount": 10000
}
# 請求頭
headers2 = {
    "X-Lemonban-Media-Type": "lemonban.v2",
    "Authorization": token_data
}
response2 = requests.post(url=recharge_url, json=recharge_params, headers=headers2)
print("充值的結果:", response2.json())

我們先對代碼中的部分,進行語法介紹,怕有的同學看不太懂

 然后再從大局角度或者宏觀角度,再來整體看看代碼是如何實現token鑒權的

所以,以上兩種就是requests請求需要鑒權的具體過程

其實,從以上兩個舉例中,我們都可以找到一些共同的影子,無論是哪種鑒權方式,都是測某個功能的接口,都需要先過登錄這一關,這是門檻,然后再利用登錄后的信息的基礎上,再去測試具體的某個功能接口,

第一種:創建seeion對象,登錄后,sesson保存cookie信息,然后用seesion請求

第二種:從登錄后返回的數據中獲取token,再把token放在該放的位置,然后照常用requests請求

 token過期怎么辦?

拓展一個小內容:如果token過期了,那如何進行處理?在代碼中如何進行改進?

導入時間類,登錄前設置開始時間,后邊再設置結束時間,通過if判斷時間,token有效期是否過期,如果過期,則重新登錄,(詳情請見紅色代碼標記之處)

import requests
from jsonpath import jsonpath
import time
# 登錄
login_url = "http://api.lemonban.com/futureloan/member/login"
params = {
    "mobile_phone": "15879563287",
    "pwd": "lemonban"
}
headers = {
    "X-Lemonban-Media-Type": "lemonban.v2"
}
s_time = time.time()
# 1、發送請求登錄
response = requests.post(url=login_url, json=params, headers=headers)
# 獲取請求之后返回得數據
result = response.json()

# 2、提取token
token = jsonpath(result, "$..token")[0]
token_data = "Bearer" + " " + token

# 提取用戶id
member_id = jsonpath(result, "$..id")[0]
# ------------------------------充值--------------------------
recharge_url = "http://api.lemonban.com/futureloan/member/recharge"
# 充值的參數
recharge_params = {
    "member_id": member_id,  # 充值的用戶id哪里來?
    "amount": 10000
}
# 請求頭
headers2 = {
    "X-Lemonban-Media-Type": "lemonban.v2",
    "Authorization": token_data
}
e_time = time.time()
if e_time - s_time > 300:
    pass   # 重新登錄提取token

response2 = requests.post(url=recharge_url, json=recharge_params, headers=headers2) print("充值的結果:", response2.json())

 

 

小編願同廣大網友一起交流,共同進步


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM