用JMeter可以對Http請求進行Performance Test,來分析哪些方法花費的時間多,哪些方法花費的時間少,有了這樣的分析結果后,我們就可以集中力量來改進費時的方法。
官方文檔請參考如下鏈接:
http://jmeter.apache.org/usermanual/jmeter_proxy_step_by_step.pdf
關於Jmeter的更多問題與解決方案,依然可以參考如下鏈接:
http://www.technix.in/jmeter-problems-and-solutions/
安裝和運行JMeter需要配置Java環境,這里省略具體步驟~~
1):雙擊jmeter.bat來運行此程序后,如下圖創建一個WorkBench
2):保持基本的設置不變,可以看到我們采用8080這個端口來監聽HTTP的請求,在截圖的最下方有個Start按鈕,開啟之后可以監聽由此代理的HTTP請求
3):接上一步驟可以將我們的FireFox瀏覽器設置由本地的8080端口進行代理,那么當上圖Start之后,由FireFox所發出HTTP請求將會被JMeter錄制下來
4):根據下面的截圖添加一個Thread Group
5):可以對Thread Group的屬性進行設置,模擬多個用戶進行HTTP請求
6):如下圖所示,添加View Results in Table 和 View Results Tree 可以對運行結果進行分析,當然了還可以添加其他的控件進行更加直觀的比較結果
7):點擊第2步驟中的Start按鈕,用瀏覽器對指定的web站點進行訪問操作來錄制整個過程中所有的HTTP請求,最終的結果如下所示(當然了我們刪除了一些不必要的css,js等文件的加載過程),並且對所有post請求做以標識(在名字的后面添加-post),整個過程錄制完畢后,WorkBench下的HTTP(s) Test Script Recorder就沒有用了,我們可以直接刪除掉,並且我們可以把FireFox中的代理設置回復默認狀態,因為我們之后的HTTP請求的發送都是由JMeter所錄制好的腳本來完成的,這也就是完全模擬了用戶的操作過程,並且用多個線程去模擬多個用戶。
8):在下面的截圖中我們發現有些步驟(GET)是灰掉的,原因我們的POST請求中選擇了'Follow Redirects'這個選項,那么JMeter會將后續的GET請求步驟合並到前面的POST請求中;這樣的話會引出另外一個問題,就是此POST請求所記錄的時間包含了POST請求本省以及接下來的GET請求所花費的時間之和,所以我們可以講POST請求中的‘Follow Redirects’選項去掉,Enable對應的GET請求來更加准確的記錄所有請求所花費的時間
9):上面的步驟操作完畢后,我們直接運行所錄制好的腳本會發現,POST請求都失敗,如下圖所示
10):上圖中出現錯誤的具體原因是在每一個POST請求中都有__RequestVerificationToken這個參數,這個參數的值在每次請求的時候都是不同的,實質上這就是一個Cookie
11):因此我們要像下圖所示的樣子添加一個HTTP Cookie Manager
12):在像下圖所示的樣子添加一個Regular Expression Extractor
13):填寫對應的設置(<input name="__RequestVerificationToken" type="hidden" value="(.*?)" />)
14):然后將所有用到的地方都換成這個變量
15):在運行一遍,就可以發現測試都通過了
16):接下來我么繼續完善,如下圖所示添加User Define Variables組件
17):將我們所用到的可以共用的數據,以全局變量的形式添加到User Define Variables組件中,這樣管理起來更加的方便規范
18):用變量替換所有的值
19):用.csv文件可以實現跟全局變量相同的功能,如下圖所示.csv文件的具體內容,其中的第一行Header值表示的就是此變量的名字,可以用{!LPN}這種方式去訪問
20):參考如下截圖添加CSV Data Set Config組件
21):將.csv的文件名填寫到filename中(當然了這里我們是把.csv與當前的.jmx放到了同一個目錄下)
22):然后替換所有變量
23):最終的運行結果的解析
由於JMeter完全模擬了用戶操作的流程,和用戶在瀏覽器中操作的過程是一樣的,所以可以用VS去attach對應的w3wp.exe進行去進行調試,去確定具體的問題。
。。。