python+pytest接口自動化:token關聯登錄這樣做,阿里p8都直呼牛逼!!!

在PC端登錄公司的后臺管理系統或在手機上登錄某個APP時,經常會發現登錄成功后,返回參數中會包含token,它的值為一段較長的字符串,而后續去請求的請求頭中都需要帶上這個token作為參數,否則就提示需要先登錄。

這其實就是狀態或會話保持的第三種方式token

一. 什么是token

token 由服務端產生,是客戶端用于請求的身份令牌。第一次登錄成功時,服務端會生成一個包含用戶信息的加密字符串token,返回給客戶端并保存在本地,后續客戶端只需要帶上token進行請求即可,無需帶上用戶名密碼。

token原理簡單概括如下:

  1. 用戶首次登錄成功后,服務端會生成一個token值,服務端會將它保存保存在數據庫中,同時也會將它返回給客戶端;

  2. 客戶端拿到token值后,保存在本地;

  3. 后續客戶端再次發送除登錄外的其他請求時,會把保存在本地的token值作為參數一起發送給服務端;

  4. 服務端收到客戶端的請求后,會拿發送過來的token值與保存在數據庫中的token值進行比較;

  5. 如果兩個token值相同, 則說明當前用戶處于登錄狀態;

  6. 如果數據庫中沒有這個token值或者token值已經生效,則需用戶重新登錄。

二. token場景處理

公司某管理后臺系統,登錄后返回token,接著去請求其他接口時請求頭中都需要加上這個token,否則提示請先登錄。

請求該系統的登錄接口如下:

# @author: 給你一頁白紙
# 微信公眾號:測試上分之路import requests
import jsonheaders = {"Content-Type": "application/json;charset=utf8"}
url = "http://127.0.0.1:5000/login"
_data = {"username": "劉德華","password": "123456"
}
res = requests.post(url=url, headers=headers, json=_data).text
print(res)

結果如下:

{"code": 1000, "msg": "登錄成功!", "token": "sh34ljjl08s32730djsh34ljjl08s32730djsh34ljjl08s32730djsh34ljjl08s32730djsh34ljjl08s32730djsh34ljjl08s32730dj"
}

在對扎樣的項目做接口自動化測試時,需要先請求登錄接口拿到token,再去請求別的接口。每次請求其他接口時先請求一次登錄接口,這樣做雖然可行,但這樣不僅會降低自動化的執行效率,而且每次都請求登錄也會對服務器資源造成浪費。

這里介紹如下兩種處理思路。

?自動化測試相關教程推薦:

2023最新自動化測試自學教程新手小白26天入門最詳細教程,目前已有300多人通過學習這套教程入職大廠!!_嗶哩嗶哩_bilibili

2023最新合集Python自動化測試開發框架【全棧/實戰/教程】合集精華,學完年薪40W+_嗶哩嗶哩_bilibili

測試開發相關教程推薦

2023全網最牛,字節測試開發大佬現場教學,從零開始教你成為年薪百萬的測試開發工程師_嗶哩嗶哩_bilibili

postman/jmeter/fiddler測試工具類教程推薦

講的最詳細JMeter接口測試/接口自動化測試項目實戰合集教程,學jmeter接口測試一套教程就夠了!!_嗶哩嗶哩_bilibili

2023自學fiddler抓包,請一定要看完【如何1天學會fiddler抓包】的全網最詳細視頻教程!!_嗶哩嗶哩_bilibili

2023全網封神,B站講的最詳細的Postman接口測試實戰教學,小白都能學會_嗶哩嗶哩_bilibili

1. 思路一

在執行用例之前,先請求登錄接口,并將返回的token值存儲在文件中(如yaml文件),后續請求需要用到token值則從該文件。

python中yaml文件

1,運行接口自動化測試框架,初始化時先請求登錄接口,獲取token值,并寫入指定的yaml文件中。

# @author: 給你一頁白紙
# 微信公眾號:測試上分之路import requests
import json
import yamldef get_token():'''請求登錄接口,獲取token:return:'''headers = {"Content-Type": "application/json;charset=utf8"}url = "http://127.0.0.1:5000/login"_data = {"username": "劉德華","password": "123456"}res = requests.post(url=url, headers=headers, json=_data).textres = json.loads(res)token = res["token"]return tokendef write_yaml(token):'''寫入yaml文件:return:'''t_data = {"token": token}with open("yaml文件路徑", "w", encoding="utf-8") as f:yaml.dump(data=t_data,  stream=f, allow_unicode=True)if __name__ == '__main__':token = get_token() # 獲取tokenwrite_yaml(token)   # 將token值寫入yaml文件

2,執行測試用例時先讀取yaml文件中token值,并將token加入headers中(也有些是將token放在請求參數中,視被測試項目具體情況而定),再發送請求。

# @author: 給你一頁白紙
# 微信公眾號:測試上分之路import requests
import yaml
import pytest
import jsondef read_yaml():'''讀yaml文件:return:'''with open('yaml文件路徑', 'r', encoding='utf-8') as f:result = yaml.load(f.read(), Loader=yaml.FullLoader)token = result["token"]return tokendef test_check_user():'''查詢個人信息(需要先登錄系統):return:'''# 先從yaml文件中讀取tokentoken = read_yaml()# 再將token添加到請求頭中headers = {"Content-Type": "application/json;charset=utf8","token": token}url = "http://127.0.0.1:5000/users/3"res = requests.get(url=url, headers=headers).text# 返回結果為json格式,轉換為字典res = json.loads(res)# 斷言code是否為1000assert res["code"] == 1000if __name__ == '__main__':pytest.main()

這里僅僅只是舉例說明,而在實際的框架中,我們需要把這些諸如yaml文件的讀寫這樣的函數單獨封裝在某個模塊中,供其他模塊調用,這樣會代碼會更加清晰簡潔。

2. 思路二

利用pytest中的Fixture函數,作用域設置為session,并返回token值,后續測試方法/函數調用該Fixture函數。

pytest中Fixture的使用請參考我之前的文章pytest(6)-Fixture(固件)。

1,首先,在conftest中定義一個作用域為session的Fixture函數,用于請求登錄接口返回token。

# @author: 給你一頁白紙
# 微信公眾號:測試上分之路import pytest
import requests
import json@pytest.fixture(scope="session")
def get_token_fixture():'''作用域為session的fixture函數,返回token:return:'''headers = {"Content-Type": "application/json;charset=utf8"}url = "http://127.0.0.1:5000/login"_data = {"username": "劉德華","password": "123456"}res = requests.post(url=url, headers=headers, json=_data).textres = json.loads(res)token = res["token"]return token

2,接著,測試用例調用該Fixture。

def test_check_user(get_token_fixture):'''查詢個人信息(需要先登錄系統):return:'''# 通過Fixture函數g獲取et_token_fixture值,即token,再將token添加到請求頭中headers = {"Content-Type": "application/json;charset=utf8","token": get_token_fixture}url = "http://127.0.0.1:5000/users/3"res = requests.get(url=url, headers=headers).textres = json.loads(res)print(res)print(headers)assert res["code"] == 1000if __name__ == '__main__':pytest.main()

執行測試用例結果如下:

說明思路二也是可行的,當然這里只執行了一條測試用例,如果執行很多的用例,效果會是怎樣還沒去驗證,大家可以試試看。

三. 總結

  1. 相對于Session/Cookies來說,請求量較大或者涉及第三方接口的系統,使用token更適合。
  2. 有些項目token是放在請求頭中發送的,而有一些項目則是放在請求參數里發送的,做接口自動化時要明確是哪種方式。
  3. 接口自動化處理token時這兩種思路可任選一種,如果使用pytest框架的話建議嘗試思路二。
  4. ?總結:

    ?光學理論是沒用的,要學會跟著一起敲,要動手實操,才能將自己的所學運用到實際當中去,這時候可以搞點實戰案例來學習。

    如果對你有幫助的話,點個贊收個藏,給作者一個鼓勵。也方便你下次能夠快速查找。

    如有不懂還要咨詢下方小卡片,博主也希望和志同道合的測試人員一起學習進步

    在適當的年齡,選擇適當的崗位,盡量去發揮好自己的優勢。

    我的自動化測試開發之路,一路走來都離不每個階段的計劃,因為自己喜歡規劃和總結,

    測試開發視頻教程、學習筆記領取傳送門!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163185.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163185.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163185.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何在Linux系統上檢測GPU顯存和使用情況?

如何在Linux系統上檢測GPU顯存和使用情況? 在Linux系統上,你可以使用一些命令行工具來檢測GPU顯存和使用情況。以下是一些常用的方法: 1. 使用nvidia-smi(僅適用于NVIDIA GPU) 如果你使用的是NVIDIA的顯卡&#xff0…

【前端】vue3+ts+vite,el-table表格渲染記錄重復情況

給自己一個目標,然后堅持一段時間,總會有收獲和感悟! 在使用vue的過程中,總會遇到一些有疑問的地方,總結就能夠加深印象,下次再出現的時候也有個參考的地方。 目錄 一、常見屬性二、重復原因三、高階用法3.…

Claude 發布2.1 版本,重大升級更新來看看有什么新功能?

11 月 23 日消息,OpenAI 競爭對手 Anthropic 日前推出了 Claude 2.1 聊天機器人及對應同名 AI 模型Claude 2.1,本文將總結Claude 2.1的主要功能。 增強的處理能力 上下文處理量大幅提升:Claude 2.1 現在能處理高達 200K上下文標記&#xff…

2、單片機及開發板介紹

單片機介紹 單片機,英文Micro Controller Unit,簡稱:MCU 內部集成:CPU、RAM(隨機存儲器)、ROM(只讀存儲器)、定時器、中斷系統、通訊接口等 作用:信息采集(傳感器)、處理&#xff0…

uniapp 適配部分IPhone手機底部安全距離

部分 IOS 機型,比如 Iphone X 的屏幕底部有一條“小黑線”區域,uniapp 項目中我們可以使用CSS的 env(safe-area-inset-bottom) 語句來自適配 IOS 的底部安全區域高度,這個語句會返回該機型的底部安全區域高度(單位 px)…

ffmpeg播放器實戰(播放器流程)

1.流程圖 1.main窗口創建程序窗口 程序窗口構造函數執行下面內容 2.開啟播放 3.開啟解碼 4.開啟渲染 5.反饋給ui 本文福利, 免費領取C音視頻學習資料包學習路線大綱、技術視頻/代碼,內容包括(音視頻開發,面試題,FFmpeg…

Linux C++ 服務器端這條線怎么走?一年半能做出什么?

Linux C 服務器端這條線怎么走?一年半能做出什么? 既然你是在校學生,而且編程語言和數據結構的基礎還不錯,我認為應該在《操作系統》和《計算機體系結構》這兩門課上下功夫,然后才去讀編程方面的 APUE、UNP 等書。 最…

【深度學習】如何選擇神經網絡的超參數

1. 神經網絡的超參數分類 神經網路中的超參數主要包括: 1. 學習率 η 2. 正則化參數 λ 3. 神經網絡的層數 L 4. 每一個隱層中神經元的個數 j 5. 學習的回合數Epoch 6. 小批量數據 minibatch 的大小 7. 輸出神經元的編碼方式 8. 代價函數的選擇 9. 權重初始化的方法 …

C語言哈希查找

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAXKEY 1000 typedef struct Info_s {int num;char name[30];int age;char addr[30]; }Info_t, *pInfo_t; //哈希函數 int hash(char *key) {int h 0…

軟件測試之安全測試

軟件安全測試是指對軟件的安全性能和安全缺陷進行檢測和評估的過程&#xff0c;目的是保證軟件的安全性和穩定性&#xff0c;防止軟件受到惡意攻擊或者泄露敏感信息。 軟件安全測試要怎么測&#xff0c;主要取決于軟件的安全需求、風險和威脅。 在這我準備了一份軟件測試視頻…

C語言--給定一個數組,把第一項的值減去第二項的值,第二項的值減去第三項的值,第三項的值減去第四項的值,依次類推。放到一個新的數組中,并打印新的數組

一.題目描述&#xff1a; 給定一個數組&#xff0c;把第一項的值減去第二項的值&#xff0c;第二項的值減去第三項的值&#xff0c;第三項的值減去第四項的值&#xff0c;依次類推。放到一個新的數組中&#xff0c;并打印新的數組。 比如&#xff1a;輸入一個數組是5&#xff…

SA實戰 ·《SpringCloud Alibaba實戰》第14章-服務網關加餐:SpringCloud Gateway核心技術

大家好,我是冰河~~ 一不小心《SpringCloud Alibaba實戰》專欄都更新到第14章了,再不上車就跟不上了,小伙伴們快跟上啊! 在《SpringCloud Alibaba實戰》專欄前面的文章中,我們實現了用戶微服務、商品微服務和訂單微服務之間的遠程調用,并且實現了服務調用的負載均衡。也基…

Nginx結合cpolar實現內網穿透多個Windows Web站點端口

文章目錄 1. 下載windows版Nginx2. 配置Nginx3. 測試局域網訪問4. cpolar內網穿透5. 測試公網訪問6. 配置固定二級子域名7. 測試訪問公網固定二級子域名 1. 下載windows版Nginx 進入官方網站(http://nginx.org/en/download.html)下載windows版的nginx 下載好后解壓進入nginx目…

[autojs]利用console實現懸浮窗日志輸出

"ui"; ui.layout(<vertical><button id"autoFloatWindow" text"開啟懸浮窗" textSize"15sp" /><button id"autoService" text"開啟無障礙服務" textSize"15sp" /><button id"…

vue中怎么根據選擇的名稱 生成印章圖片

項目中需要根據選擇的印章名稱&#xff0c;動態生成印章 &#xff0c;印章下方顯示當前的日期 代碼如下 <template><div><label for"name">選擇名稱&#xff1a;</label><select id"name" v-model"selectedName">…

技術面時,一定要掌握這3個關鍵點

前言 現在有這么多優秀的測試工程師&#xff0c;大家都知道技術面試是不可避免的一個環節&#xff0c;一般技術面試官都會通過自己的方式去考察你的技術功底與基礎理論知識。 如果你參加過一些大廠面試&#xff0c;肯定會遇到一些這樣的問題&#xff1a; 1、看你項目都用到了…

機器學習/sklearn 筆記:K-means,kmeans++,MiniBatchKMeans

1 K-means介紹 1.0 方法介紹 KMeans算法通過嘗試將樣本分成n個方差相等的組來聚類&#xff0c;該算法要求指定群集的數量。它適用于大量樣本&#xff0c;并已在許多不同領域的廣泛應用領域中使用。KMeans算法將一組樣本分成不相交的簇&#xff0c;每個簇由簇中樣本的平均值描…

為什么要寫測試用例,測試用例寫給誰看?

&#x1f4e2;專注于分享軟件測試干貨內容&#xff0c;歡迎點贊 &#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff01;&#x1f4e2;交流討論&#xff1a;歡迎加入我們一起學習&#xff01;&#x1f4e2;資源分享&#xff1a;耗時200小時精選的「軟件測試」資…

mysql查詢統計最近12個月的數據

項目場景&#xff1a; mysql查詢統計最近12個月的數據&#xff0c;按每個月縱向展示&#xff0c;效果圖 sql語句 注意&#xff1a;count( v.uuid ) 這里的是被統計那張表的id SELECT m.month,count( v.uuid ) AS total FROM (SELECT DATE_FORMAT(( CURDATE()), %Y-%m ) AS mon…

Leetcode—6.N字形變換【中等】

2023每日刷題&#xff08;三十七&#xff09; Leetcode—6.N字形變換 算法思想 參考k神的題解 實現代碼 class Solution { public:string convert(string s, int numRows) {if(numRows < 2) {return s;}vector<string> rows(numRows);int flag -1;int i 0;for(…