淺析Jmeter多用戶token使用問題
背景
在測試的時候,經(jīng)常會有模擬用戶登錄,拿到用戶 token 后再去請求接口的場景。
這個模擬用戶登錄就會分為兩種,一種是單用戶,另一種是多用戶。
日常自動化測試的時候可能一個用戶對應(yīng) n 個用例就可以滿足大多數(shù)場景;
如果是在壓力測試的場景下面,可能就會略顯單調(diào),也無法滿足一些真實業(yè)務(wù)場景。
對于單用戶的情況下,和我們常規(guī)的多接口有依賴的測試其實沒什么太大的差別。
所以這里主要講的是多用戶產(chǎn)生多個 token 的情況。
下面來看一個具體的例子來了解一下。
場景接口
在這里的話,只有兩個接口,一個是登錄拿 token,一個是有 token 才能請求的。
下面是各接口定義
登錄接口
請求:
POST http://localhost:8532/MultiToken/Login Content-Type: application/json { "UserName":"catcherwong-1", "Password":"123" }
響應(yīng):
{"code":0,"msg":"ok","data":"catcherwong-1-token"}
業(yè)務(wù)接口
請求:
GET http://localhost:8532//MultiToken/do?account=xxx Content-Type: application/json token: catcherwong-1-token
響應(yīng):
{"code":0,"msg":"ok","data":"catcherwong-1-token"}
登錄接口處理
登錄接口屬于預(yù)請求,所以我們一般會選擇把它放在 setUp 線程組里面。
我們需要準備一個 csv 文件,里面用來存放需要登錄的用戶名和密碼。
接下來就是把這個 csv 配置好,定義了兩個變量 account
和 pwd
然后是把登錄的 HTTP 請求配置好:
由于后面要用到 token,所以要先把 token 提取出來,這里用的是 JSON Extractor。
到這里就要開始注意了!?。。?/p>
由于我們會有多個用戶進行登錄,但是這一個提取操作每次都會把 token 賦值到 access_token 這個變量上面,是覆蓋的操作。
換句話就是說,每登錄一個用戶,這個 access_token 的值就會是最后一個登錄的用戶的 token,。
換個思路,每次它會覆蓋,那么把這些 token 存到一個地方,然后業(yè)務(wù)接口去這個地方取就可以了。
如果沒有用戶登錄這一步,給的直接是 token,那么我們也是直接把這個 token 放到 csv 文件里面,然后讓 jmeter 去循環(huán)使用里面的 token。
那么要做的東西其實就很確定了,就是在提取到 token 后,把這個 token 寫到一個 csv 文件里面。
要想做到這一步,需要在登錄接口后面加一個后置的處理。
String p1 = System.getProperty("user.dir"); String p2 = System.getProperty("file.separator"); String p3 = "user_token.csv"; String path = p1 + p2 + p3; FileWriter fileWriter = new FileWriter(new File(path), true); BufferedWriter writer = new BufferedWriter(fileWriter); writer.append(vars.get("accout")+","+vars.get("access_token")+"\n"); writer.close(); fileWriter.close();
這段代碼的意思是,把用戶名和提取到的 access_token 寫進到 csv 文件里面,這個文件在的位置是 jmeter 的目錄。
這里是對文件路徑做了處理,可以適配所有操作系統(tǒng)的。不會出現(xiàn)說指定了一個 windows 系統(tǒng)的路徑,然后放到 linux 系統(tǒng)下面就跑不了了。
還有最重要的一個是,要修改 setUp 線程組的屬性,把循環(huán)次數(shù)改成 3 。因為前面的 csv 文件里面有 3 個用戶,這樣它才會觸發(fā)三次登錄。
業(yè)務(wù)接口處理
業(yè)務(wù)接口要放到正常的線程組里面,獨立于 setUp 線程組。
前面提到,登錄后會有一個 csv 文件,所以這里第一個要做的是把 csv 配置好。
上面的截圖用的是 ${__P(user.dir,)}${__P(file.separator,)}user_token.csv
這個文件路徑,這個在本地環(huán)境的 Jmeter 是可以通過的,不過在一些云服務(wù)上面是不行的,如阿里云 PTS 。
這里可以忽略前面的路徑,直接填寫 user_token.csv
即可,填這兩個,得到的文件路徑是一樣的,一個是絕對路徑一個是相對路徑。
然后就是配置 HTTP 請求了
PS:不要忘記把請求頭也配置了,這里就不截圖了。
這里試跑兩次,可以發(fā)現(xiàn)業(yè)務(wù)請求的接口,它的 token 請求頭每次都是不一樣的,在交替變化,這個是符合預(yù)期的。
但是會發(fā)現(xiàn)生成 csv 文件里面的數(shù)據(jù)會重復(fù),沒有自動清理掉上一次產(chǎn)生的數(shù)據(jù)。如果上一次產(chǎn)生的 token 過期了,那么用了這些過期的 token === 涼涼。
所以這里還有必要加一步 tearDown 線程組,每次跑完腳本把這個文件刪除掉。
String p1 = System.getProperty("user.dir"); String p2 = System.getProperty("file.separator"); String p3 = "user_token.csv"; String path = p1 + p2 + p3; log.info("準備刪除文件:" + path); File file = new File(path); if (!file.exists()) { log.info("刪除文件失敗:" + path + "不存在!"); } else { file.delete(); }
這個時候跑腳本就基本沒什么問題了。
寫在最后
多用戶獲取多 token 再使用的場景其實挺多的,這篇內(nèi)容簡單講解了老黃正在用的一個方案,如果您有更好的建議,也歡迎一起溝通交流。
老黃把 JMeter 系列的內(nèi)容都放在 github 了,方便大家查閱和測試。
https://github.com/catcherwong/JmeterSample
到此這篇關(guān)于聊一聊Jmeter多用戶token使用問題的文章就介紹到這了,更多相關(guān)Jmeter多用戶token使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java使用POI批量導(dǎo)入excel數(shù)據(jù)的方法
這篇文章主要為大家詳細介紹了java使用POI批量導(dǎo)入excel數(shù)據(jù)的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07Spring動態(tài)管理定時任務(wù)之ThreadPoolTaskScheduler解讀
這篇文章主要介紹了Spring動態(tài)管理定時任務(wù)之ThreadPoolTaskScheduler解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12Java常問面試內(nèi)容--數(shù)組、聲明、初始化、冒泡、多維數(shù)組、稀疏數(shù)組
這篇文章主要介紹了Java多線程面試題(面試官常問),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-07-07詳解servlet的url-pattern匹配規(guī)則
本篇文章主要介紹了=servlet的url-pattern匹配規(guī)則,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12Python爬蟲之爬取2020女團選秀數(shù)據(jù)
本文將對比《青春有你2》和《創(chuàng)造營2020》全體小姐姐,鑒于兩個節(jié)目的數(shù)據(jù)采集和處理過程基本相似,在使用Python做數(shù)據(jù)爬蟲采集的章節(jié)中將只以《創(chuàng)造營2020》為例做詳細介紹。感興趣的同學可以照貓畫虎去實操一下《青春有你2》的數(shù)據(jù)爬蟲采集,需要的朋友可以參考下2021-04-04