盡管我一直在使用JMeter進行Web應用程序的壓力測試和負載測試好幾次,但我們還是花了一些時間才弄清楚如何使用該工具測試基于異步HTTP / REST的服務。 在我們這里,我是指一名程序員, Holger Staudacher ,我很榮幸能與當前的一個項目一起工作。
當Holger基于對上述項目進行功能和集成測試的經驗而開發了Restfuse時 ,我們決定使用JMeter
進行壓力和負載測試。 被測軟件的主要服務處理上傳到特定URL的數據結構。 如果上傳過程成功,則返回指向包含處理結果的資源的URL。 產生的資源無法立即使用-處理需要一段時間。 因此,輪詢可用于在資源可用時檢索資源1 。
我們的目標是在一次測試中測量上載數據結構,處理數據和下載結果資源所花費的時間。 同時運行多個用戶的這種測試應該使我們對系統的吞吐量能力有一個良好的印象。 聽起來不太復雜,但是…
…使用JMeter
機載功能為上一段中描述的場景編寫測試計劃的第一種方法效果不佳。 計劃既不可理解,也不是(更糟的是)使測量結果毫無意義。 特別是將上載請求和輪詢循環與事務控制器一起鉗制似乎對計時器產生了一些意外的副作用。 因此,經過一段時間的Google額外研究之后,我偶然發現了JavaSamplerClient API ,這是我以前所不知道的。
stackoverflow.com上有一個條目,描述了如何擴展AbstractJavaSamplerClient ( JavaSamplerClient
的實現)并在JMeter
使用它。 因此,這就是解決我們的問題的方法。 我們創建了AbstractJavaSamplerClient
的擴展,以覆蓋runTest(JavaSamplerContext)
。 在該方法中,我們使用HttpClient執行上載和輪詢請求。 一旦輪詢請求成功檢索到處理結果,所有標頭和內容信息都將存儲在SampleResult
實例中。 后者由覆蓋的測試采樣器方法返回,由JMeter
進行進一步處理–非常簡單2 。
創建包含自定義JavaSampleClient
的jar并將其放入JMeter
安裝目錄下的lib/ext/
文件夾后,可以將Sampler
類型的Java Request
添加到Thread Group
。 這使您可以選擇和配置自定義采樣器,如下圖所示:
使用JavaSamplerClient
使我們的測試計劃變得非常簡單,并允許我們使用通用的JMeter
結果測量功能,如下圖所示,在Graph Results
視圖中:
當然,測量結果現在是合理的……
由于我們不得不花很長時間才能做到這一點,所以我認為我們的解決方案也可能對其他人很感興趣-這就是寫這篇文章的原因。 但是,如果有我們沒有注意到的更簡單的解決方案,也很高興收到您的來信。 因此歡迎提供反饋
- 我們開始使用網絡掛接 ,但我們的客戶有問題,說服IT管理員打開防火墻... ?
- 為了使本文的篇幅合理,我跳過了關于如何處理不成功請求的任何描述,但是我們的大多數實施工作都必須在該領域中完成…… ?
參考:來自Code Affine博客的JCG合作伙伴 Frank Appel的JMeter對異步HTTP / REST服務進行壓力/負載測試 。
翻譯自: https://www.javacodegeeks.com/2012/11/stressload-testing-of-asynchronous-httprest-services-with-jmeter.html