使用Jmeter進行並發測試


一、技術詳述

  • 本篇博客是對《軟件工程實踐總結&個人技術博客》這篇博客第二部分內容的展開。

  • 該技術的用途在前面的博客中有提到,主要用於web端壓力測試,模擬多用戶同時在線並發發出請求的場景,如100個用戶同時查詢某篇文章。

  • 閱讀本篇博客首先需要對Jmeter有一定的了解,Jmeter的下載安裝可以參考這篇文章《JMeter下載安裝及入門教程》,這里不再贅述。下面就開始介紹如何用Jmeter進行並發的壓力測試。

1.1 添加線程組

圖片1

  • 在測試計划中添加一個線程組test,設置用戶數,將Ramp-up period設為0。

1.2 添加Http請求

圖片2

  • 在test中添加一個HTTP Request “Login”,填寫必要的數據,如上圖。本篇博客中所用的請求都比較簡單,數據主要以Paramters的方式傳遞。

1.3 添加Listener

圖片3

  • 給線程組test添加View Results Tree作為Listener( 添加其它的也可以,個人感覺這個比較好用 ),以及View Results in Table( 主要是為了講述方便 )。

1.4 運行並查看結果

圖片4

  • 查看View Results Tree,點開一個請求,設置數據格式為JSON( 我們組的項目返回的數據格式主要是JSON ),可以看Response Body的數據如圖。

圖片5
查看View Results in Table,可以看到每個請求開始的時間是一致的,可見實現了並發。


以上便是實現單個請求並發的方法。那么問題來了,如果一個線程組有多個請求該如何並發呢?

1.5 添加多個請求並添加Synchronizing Timer

圖片6

  • 如上圖在test中又添加了一個請求“InquiryStudentList”,並給其添加響應斷言Response Assertion( 判斷請求是否返回數據,沒有的話視為不通過 )。

圖片7

  • 給test添加Synchronizing Timer,設置保持默認就好,其中Number of Simulated Users to Group by即每次釋放的線程數量( 0等同於設置為線程租中的線程數量 )。添加完成后便可以使得線程組中的每個請求並發執行,即請求A並發執行,然后請求B再並發執行。

  • 執行的結果如下:
    圖片8
    圖片9
  • 可以看到,Login請求並發執行完畢,InquiryStudentList請求才開始並發執行。

然而,上述請求僅在不需要身份認證的情況下,才能通過,而身份認證則需要在請求頭中添加token。也就是說需要先登錄獲取用戶的token,鑒於token每次登錄都是不同的,而且一個用戶只對應一個token,需要提取登錄返回的token,並將其設為全局變量。

1.6 提取token並設為全局變量

圖片10

  • 這邊更改test的設置,使得其只包含Login請求,並將線程數置1。給Login請求添加JSON Exactor( 登錄返回JSON類型的數據 )用於獲取返回數據中的token。

圖片11

  • 為Login請求添加BeanShell PostProcessor,將token設置為全局變量。

圖片12

  • 給測試計划添加HTTP Header Manager,將token變量加入,使得該測試計划中的其他線程組都可以獲得這個token。

圖片13

  • 在測試計划中添加需要測試的線程組( 並發數自行設置 ),與之前不同的是該線程組添加了新的Listener“Aggregate Report”。且線程組中的請求都需要token才能通過。

圖片14

  • 更改測試計划的設置,確保每個線程組順序執行,即保證token能夠起作用。

圖片15
圖片16

  • 運行測試,由上面兩張圖片可以看出確實將token提取出來並包含在請求中。

二、問題與解決

  • 技術使用倒是沒有什么問題,主要的問題是學習使用的過程中的問題。大概有以下兩點:

1、沒有將token設為全局變量

我之前並未考慮將登錄單獨設為一個線程組( 因為先前只知道如何提取token ),而是每個線程組都設置一個登錄請求,且每個線程組都有一個請求頭管理器,但是這樣的話就會使得登錄請求返回的token多次被覆蓋,因為線程組含多個線程,每個線程都得登錄一次,而之前有提到一個用戶一次只能用一個token。所以,這樣做是行不通的( 指並發的情況,如果循環就可以 ),而且每個線程組都得設置個登錄,太多余了。

2、沒有令測試計划中的線程組順序運行

也就是說雖然單獨設置了登錄的線程組,但並沒有保證其是先運行的,也就是token還沒提取,其它線程組就已經在執行了。即前面提過的token失效的問題。

三、總結


免責聲明!

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



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