如果你想從頭學習Jmeter,可以看看這個系列的文章哦
https://www.cnblogs.com/poloyy/category/1746599.html
前言
- 在實際業務場景中,很多業務都需要先登錄才能正常使用
- 在做接口性能測試的時候,需要測試登錄后才能訪問的接口肯定是無法避免的
- 那么,我們怎么才能完成先登錄后發出請求的性能腳本呢
思路
- 發出登錄請求
- 提取響應的認證內容
- 后面的請求引用認證內容
提出問題
做性能測試,是模擬多個虛擬用戶實現並發的,那我們的登錄接口也需要重復發起嗎?
可以類比一個場景
做 UI 自動化的時候肯定也需要登錄的,一般我們會將登錄放到全局前置來操作,所以整個測試流程下來只需要登錄一次
關鍵點
一個用戶只需要登錄一次,避免重復發起登錄請求,造成不必要的資源消耗
最簡單的場景
- 所有虛擬用戶使用同一個用戶賬戶,每次都是先調登錄接口,再調登錄之后接口請求嗎?
- 如果你的系統,業務上允許一個用戶在不退出情況下,反復登錄,且沒有登錄次數限制,這種最理想的情況,你完全可以這么做
- 做完了,你可能會想,我不用一個賬戶,100個並發用戶數,我就用100個獨立賬戶,
每個用戶擁有獨立賬戶
靈魂拷問
每個虛擬用戶都試用一個獨立賬戶,還是先調登錄,再調登錄之后接口請求,這樣可以嗎,要怎么做?
當然可以
- 在你的線程組里面用上 csv 數據文件設置讀取出用戶賬戶信息,或者用 JDBCrequest 從數據庫獲取出用戶信息
- 然后再在登錄接口中用取出的用戶信息來登錄
- 這樣,在性能測試時,就會循環使用你用戶總量中的用戶來發送請求
- 這樣,理論上是行的通的,但是,現實有些骨感
- 因為做性能測試,使用的是高並發,可能存在競爭關系,可能出現后續接口,使用的關聯參數取不到值的情況
- 從而導致請求報錯,而這種錯誤,不是性能測試服務器響應報錯,而是腳本問題導致報錯,影響我們對性能結果的判斷
那么,我們就會問,還有沒有其他辦法呢?
終極好辦法
上面也說了一個關鍵點:一個用戶只需要登錄一次
既然我們一個線程就是一個模擬用戶,那我們只需要針對每個線程做到只發出一次登錄請求,其他接口可以無限次發起
具體步驟
- 在線程組下添加一個邏輯控制器【僅一次控制器】
- 在該邏輯控制器下添加登錄請求
- 登錄請求下添加提取器,提取登錄響應內容
- 和邏輯控制器平級下添加需要並發的請求
運行查看聚合報告
可以看到 login 登錄接口總共調用了 5 次,針對重置密碼接口進行了並發請求
注意:並發請求並不代表在測試過程中,每個用戶的並發總次數會相等