JMeter基於http請求的web接口性能測試總結


[本文出自天外歸雲的博客園]

基於http請求的web接口性能測試總結

壓測的目的:對於Web接口壓測的目的最終是要在對數據庫造成壓力的情況下觀察壓測服務器的cpu是否達到預警值、memory是否發生激變甚至泄露、響應結果的error率以及數據庫服務器讀寫方面的情況是否正常等等情況。

測試環境的准備

我們要准備壓測服務器和壓力機,並建立二者之間的聯系。

壓測服務器

用來提供服務的,也就是我們的測試服務器,上面發布的是壓測分支,我們首先要基於壓測基准分支拉一個壓測分支並push到遠端,然后把開發的代碼合到壓測分支上再push到遠端,發布到壓測服務器。一般來說,我們的壓測服務器是單節點的tomcat,而線上環境往往是多台服務器組成的負載均衡集群。

壓力機

壓力機是用來提供壓力的,我們通過jmeter來做並發。實際測試中,壓力機可以選擇本機,也可以選擇壓測服務器。

不同點是:本機有jmeter界面,測試結果很直觀,而壓測服務器上是沒有ui的;

優缺點是:選擇本機的優點就是壓測結果展示方便,Windows圖形化壓測結果展示,但是缺點是本機到壓測服務器之間的網絡情況會影響壓測結果的准確性。而在壓測服務器上進行就不存在這個問題。

建立聯系

在壓力機上把hosts切換到壓測環境上,這樣就可以對壓測環境進行加壓。

測試數據的准備

對於數據庫方面施加壓力,我們是通過分析http請求,找出能夠對數據庫產生壓力的參數(這個參數往往會被用於與數據庫進行交互,比如進行增刪改查),然后對參數進行mock,做出足夠數據量和滿足復雜度的參數,通過並發http請求的方式來間接對數據庫施加壓力。這是針對與參數來做數據,以便模擬足夠多樣的http請求。再就是我們會在數據庫表中插入一定量的數據,以滿足數據庫方面的數據量要求,模擬現實情況下數據庫表中的數據量。前者是針對用戶行為做數據,后者是針對數據庫現狀進行模擬,二者共同為壓測提供模擬數據支持。

壓測腳本的准備

我們通過jmeter來制定壓測計划,在jmeter中創建壓測計划,添加線程組,然后在線程組中添加http請求、聚合報告、查看結果樹、圖形結果等。調試沒問題,腳本可以跑通了,就可以對線程組設置線程屬性(設置並發量),在調度器配置中設置好持續並發時間進行壓力測試了。我們可以把本機做壓力機,在本機切換hosts到壓測環境進行壓測。也可以把配置好的jmeter腳本連通jmeter文件夾一起打包zip文件發到壓測linux服務器上,然后在自己的目錄下“unzip jmeter.zip”,“cd”到解壓后的目錄下,“chmod 777 jmeter.sh”添加執行權限,然后“./jmeter.sh -n -t 你的壓測.jmx -l result.jtl”來執行壓測,壓測結果會保存到result.jtl文件中,在當前目錄下。我們可以在服務器執行壓測過程中觀察測試結果,也可以在測試結束后在linux服務器上查看與分析result.jtl文件(也可以通過“sz result.jtl”命令將文件下載到本機,具體的下載存放路徑在SecureCRT的Options->Session Options->X/Y/Zmodem中設置)。實際的壓測過程中,我們會不斷修改線程數,更改並發量。隨着並發線程數的增加,當平均響應時間開始顯著增加而每秒的吞吐量近乎不變的時候,這個並發量所對應的每秒吞吐量就是瓶頸點所在。

壓測過程中會遇到的問題

在壓測過程中,可能會遇到“NoHttpResponseException (the target server failed to respond)”。這是由於jmeter自身設置的問題導致的,修改jmeter.properties中的httpclient4.retrycount和httpclient4.idletimeout值就可以了,然后修改jmeter中設置http請求繼承自HttpClient4。

在壓測過程中,可能會遇到“java.net.URISyntaxException: Illegal character in query at index xxx”,這可能是由於你對於http請求參數沒有勾選編碼造成的,解決辦法如下:

 


免責聲明!

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



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