3.token、cookie和session 1 token簡介 2 token實戰 3. cookies 簡介 cookies 封裝: cookie實戰 cookie實戰描述

1 token簡介



概念:令牌,一般在我們的前後端分離的項目中使用,作爲身份的校驗
詳情:服務後端程序產生的,然後存放到服務端,一般是緩存中(內存/磁盤)
時效性:過久過期,由開發或者項目本身決定

擴展:redis使用場景:
登錄的token會放到redis
高頻 熱點數據可以放

工作流程:
項目代碼的處理:
1.一般通過登錄接口,成功之後,在響應數據裏有token值
2.後續其他接口關聯使用這個token,一般放在後續接口的請求頭裏

響應體json(token)內容獲取:
1、先轉換爲字典--res.json()
2、使用第三方庫--jsonpath

2 token實戰

HOST = 'http://121.41.14.39:8082'#便於維護--測試環境變更--測試環境-預生產環境-生產環境
'''
目標:完成外賣系統的店鋪端的登錄接口操作
注意事項:密碼需要md5加密!
'''
import requests
import pprint
#需求:輸入一個字符串的密碼,輸出的一個md5加密結果
import hashlib
def get_md5(password):
   #1-實例化加密對象
   md5 = hashlib.md5()
   #2- 進行加密操作
   md5.update(password.encode('utf-8'))
   #3- 返回加密後的值
   return md5.hexdigest()

print(get_md5('xintian'))


def login(inData,getToken=False):
   '''
   :param inData:賬號+密碼---字典
   :param getToken  爲True 獲取token;   爲False  返回接口響應數據
   :return:
   '''
   #1-url
   url = f'{HOST}/account/sLogin'
   #2- 參數
   #字典的修改值操作   字典[鍵] = 新的值
   inData['password'] = get_md5(inData['password'])
   payload = inData
   #3-請求方法
   resp = requests.post(url,params=payload)
   if getToken == False:
       return resp.json()#響應數據
   else:
       return  resp.json()['data']['token']#token

if __name__ == '__main__':
   res = login({'username':'xxxxxx','password':'xxxxxx'})
   # pprint.pprint(res)
   print(res)

3. cookies 簡介

  • cookies的項目場景:
    1、訪問任何頁面都會返回cookies,這個cookies是臨時的,後續需要登錄認證,變得有效
    2、只有登錄纔會有cookies,否則不會返回cookies

cookies工作流程(主要裏面就是jsessionID)
1.客戶端發送一個請求到服務器
2.服務器返回響應數據--響應頭--set- COOkies---給我們客戶端

  1. 這個時候這個cookies不一定是有效!---需 要登錄的網站--臨時cookies
  2. 需要登錄---服務器判斷這個賬號密碼正確之 後,之前的cookies變成可以使用的!
  • cookies的關聯場景:
    1、原生態的cookies,即項目後續接口直接使用這個cookies,不作任何操作----不建議取出sessionid
    2、需要更新的cookies,即項目後續接口使用這個cookies,但是需要第三方認證,則需要更新cookies(增加cookies的屬性,如token)

cookies 封裝:

HOST="http://localhost:8080"
import requests
def login(data):
  # 1 url  
  url = f"{HOST}/api/mgr/loinReq"
  # 請求body
  payload = data
res = requests.post(url,data=payload)
  # 獲取響應頭
  print('響應頭-->',resp.headers)
  # 1 使用建取cookies值
  # print('響應頭-->',resp.headers['Set-Cookie'])
  # 2 直接獲取cookie對象
  print('cookies對象--->',resp.cookies)
#  -------業務接口-----------
class Lesson:
  def __init__(self,in_cookies):
    self.cookies = in_cookies
  def list_lesson(self,data):
    url = f'{host}/api/mgr/sq_mgr/'
    payload = data 
    resp = requests.get(url,params=data,cookies=self.cookies) # get方式用params,cookies的獲取直接到類中取得
    resp.encoding = 'unocode_escape' #設置響應數據編碼(爲了返回數據正常展示)
    return resp.text
  def get_vip_token():
    retuen 'token'  # 假裝獲得了token

if __name__== '__main__':
# 1 login接口
cookies = login('usename':'auto','password':';sdfsdfsdf')
# -----獲取token後,需要更新cookies,或手動新增(拼接)
cookies.update('token':get_vip_token()) # 更新,有鍵值則更新,無鍵值則新增
user_cookies= {'sessionid':cookies['sessionid'],'token':get_vip_token()}# 新增

# 2 列出課表接口
Lesson(cookies).list_lesson({'action':'list_course','pagenumm':1.,'pagesize':20})

cookies的傳遞:


知識點1:字典與json區別
1- 數據類型區別
1- 字典是一種存儲數據類型 type()
2- json:是一個鍵值對形式的格式字符串
1- json 不是python專屬,
2- 鍵是雙引號的字符串
3- json數據裏怎麼表示一個空對象:null,python的空None
4- json數據裏怎麼表示一個真:true,python的空True
3- 兩者相互轉化 import json
1- 字典轉json json.dumps()
2- json轉字典 json.loads()
2- 代碼裏區別
在控制檯裏輸出這個數據
1- 如果是單引號--是字典類型
2- 如果是雙引號--json字符串

演示代碼:

#1- 字典類型
    dict1 = {'name':'songqin','data':None,'data2':True}
    print('字典>>> ',dict1)
    print(json.dumps(dict1))#字典轉json

知識點2:場景描述:有時候,某一個接口你的Postman可以測試成功,但是你寫的代碼不能成功!
分析:
1- 項目的接口沒有問題,不要去懟開發
2- 肯定是你接口本身寫有問題:數據類型,一些參數 url等一些原因
環境限制:這個測試環境不能搭建任何抓包工具
解決方案:
1- 你拿到你自己代碼發出去請求與postman對比
2- 自己打印你的請求詳情

知識點3:
cookies在項目裏使用場景:
1- 後續接口使用原生態的cookie
2- 後續接口會使用到登錄的cookies(只有sessionid),但是這個cookies他是二次封裝的
cookies:session+token+uuid
解決方案:
1- 先通過登錄的方式獲取第三方接口的token
2- 再使用本測試項目的登錄去獲取cookies
3- 先從本項目的cookes提取session
4- 二次封裝 cookie=sessionid+token

cookie實戰

1、cookie關聯操作
前端訪問路徑:http://124.223.33.41:7081/mgr/login/login.html
1、登錄接口
-url : http://124.223.33.41:7081/api/mgr/loginReq http協議
-請求體:
username auto 必填
password sdfsdfsdf 必填
-響應頭
比如:·sessionid=89emkau5vhyg8vcwfwvq2pvr7ul2t5sc
·Content-Type 必填 該字段值爲 application/json,表示返回 JSON 格式的文本信息。
·Set-Cookie 必填 該字段保存本次登錄的 sessionid,
-響應體
如果請求成功,返回 json 格式的消息體,如下所示,retcode 值爲 0 表示登錄認證成功

{
"retcode": 0
}

如果輸入的用戶名或者密碼錯誤,則返回結果爲:

{
   "retcode": 1,
   "reason": "用戶或者密碼錯誤"
}

2、課程接口
-請求語法:
GET /api/mgr/sq_mgr/?action=list_course&pagenum=1&pagesize=20 HTTP/1.1
-url請求參數

-參數名
action:填寫list_course,表明是要列出所有課程信息pagenum:表示當前要顯示的是第幾頁,目前固定填寫1
`pagesize:表示一頁最多顯示多少條課程信息,目前固定填寫20
-請求體內容:該請求無需指定請求內容。
-響應內容
如果請求成功,返回json格式的消息體,如下所示

{
 "retlist": [
 {
        "desc": "初中語文",
         "id": 418,
        "display_idx": 1,
        "name": "初中語文"
   }
 ],
 "total": 3,
 "retcode": 0
}

retcode值爲0表示查詢成功。
total 值表示總共有多少門課程信息
retlist的內容是一個數組,其中每個元素對應一門課程信息。

示例

testData2 = { "action":"list_course", "pagenum":1,"pagesize":20 }

cookie實戰描述

#登錄接口
fiddler_proxies = {
'http':'http://127.0.0.1:8888',
'https':'http://127.0.0.1:8888'
}
esp = requests.post(url,params=payload)
HOST = 'http://120.55.190.222:7080'
import requests
def login():
#1- url
url = f'{HOST}/api/mgr/loginReq'
#2- 請求體
payload = {'username':'auto','password':'sdfsdfsdf'}
#3- 請求
resp = requests.post(url,data=payload)
#獲取cookie
#方案一:響應裏就有這個cookie
# print(resp.cookies)
return resp.cookies#返回原生態的cookie

#需要關聯的接口
def add_lesson(userCookie):
# 1- url
url = f'{HOST}/api/mgr/sq_mgr/'
# 3- 請求
resp = requests.post(url, cookies =userCookie)
print(resp.request.headers)#查看請求頭的cookies
if __name__ == '__main__':
userCookie= login()
add_lesson(userCookie)    

2、自己封裝cookie關聯後續接口實戰

使用場景描述:舉例說明如下
1、一個電商整個項目安裝包給學員
2、電商項目使用了cookie機制--sessionid
3、爲了避免非VIP使用該項目,在使用這個項目的使用,會彈出一個VIP認證的頁面,需要輸入VIP賬號
4、這個時候,代碼層做接口自動化測試時:需要自己獲取sessionID+token

代碼實戰:

HOST = 'http://120.55.190.222:7080'
import requests
def login():
   #1- url
   url = f'{HOST}/api/mgr/loginReq'
   #2- 請求體
   payload = {'username':'auto','password':'sdfsdfsdf'}
   #3- 請求
   resp = requests.post(url,data=payload)
   #獲取cookie
  #方案二:需要額外增加一些參數到cookie---定製化cookie--提取sessionID
   print(resp.cookies['sessionid'])
   return resp.cookies['sessionid']#返回原生態的cookie裏的sessionID

#需要關聯的接口
def add_lesson(userCookie):
   # 1- url
   url = f'{HOST}/api/mgr/sq_mgr/'
   # 3- 請求
   resp = requests.post(url, cookies =userCookie)
   print(resp.request.headers)#查看請求頭的cookies
if __name__ == '__main__':
    #自己封裝cookie
    userCookie = {'sessionid':userSessionId,'token':'123456'}
    add_lesson(userCookie)  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章