jmeter知識總結(一)
Apache JMeter是一款純java編寫負載功能測試和性能測試開源工具軟件。相比Loadrunner而言,JMeter小巧輕便且免費,逐漸成為了主流的性能測試工具,是每個測試人員都必須要掌握的工具之一。
1. Jmeter安裝
1.1 JDK安裝
由於Jmeter是基於java開發,首先需要下載安裝JDK (略)。
Windows環境下檢測安裝情況如下:
Linux環境下檢測安裝情況如下:
1.2 JMeter安裝
1>官網下載地址:http://jmeter.apache.org/download_jmeter.cgi
2>下載:
3>下載完成後解壓zip或tgz包即安裝完成。
windows環境下,將包解壓即可使用。
(註意:編輯jmeter目錄/bin/jmeter.porperties文件中的language屬性值將其設置為默認中文顯示。)
Linux環境下,將包解壓亦即可使用。推薦編輯/etc/profile文件配置Jmeter的環境變量並用命令source /etc/profile讓配置生效,則在任意目錄下可以使用jmeter命令。
2.Jmeter使用(自定義Java腳本)
2.1 windows環境下
雙擊JMeter解壓路徑(apache-jmeter-4.0\bin)bin下面的jmeter.bat即可
如下顯示就是Jmeter的主界面:
右鍵點擊“測試計劃” -> “添加” -> “Threads(Users)” -> “線程組”,如下可在“線程組”界面中可以配置線程組名稱,線程數,準備時長(Ramp-Up Period(in seconds))循環次數,調度器等參數:
線程組參數詳解:
1> 線程數:虛擬用戶數。一個虛擬用戶占用一個進程或線程。設置多少虛擬用戶數在這裏也就是設置多少個線程數。
2> Ramp-Up Period(in seconds)準備時長:設置的虛擬用戶數需要多長時間全部啟動。如果線程數為10,準備時長為2,那麽需要2秒鐘啟動10個線程,也就是每秒鐘啟動5個線程。
3> 循環次數:每個線程發送請求的次數。如果線程數為10,循環次數為100,那麽每個線程發送100次請求。總請求數為10*100=1000 。如果勾選了“永遠”,那麽所有線程會一直發送請求,一到選擇停止運行腳本。
4> Delay Thread creation until needed:直到需要時延遲線程的創建。
5> 調度器:設置線程組啟動的開始時間和結束時間(配置調度器時,需要勾選循環次數為永遠)
6> 持續時間(秒):測試持續時間,會覆蓋結束時間
7> 啟動延遲(秒):測試延遲啟動時間,會覆蓋啟動時間
8> 啟動時間:測試啟動時間,啟動延遲會覆蓋它。當啟動時間已過,手動只需測試時當前時間也會覆蓋它。
9> 結束時間:測試結束時間,持續時間會覆蓋它。
右鍵點擊“線程組” -> “添加” -> “Sampler” -> “java請求”,如下可在“java請求”界面中可以選擇對應的自定義的java類,也可以手動在界面上修改參數值。
然後選擇保存即可生成xxx.jmx配置文件(可供在非GUI環境下即Linux上執行)
2.2 Linux環境下
首先,要把自己寫的java腳本打包及其運行所依賴的其他jar包都放到apache-jmeter-4.0\lib路徑下,然後若jar包有需要依賴的配置文件的話,通過配置apache-jmeter-4.0\bin\user.properties文件中的search_paths屬性來進行指定,如下:
然後,在JMeter解壓路徑(apache-jmeter-4.0\bin)bin下執行類似如下命令即可。
sh jmeter -n -t test.jmx -l result.jtl -j test.log
下面是我們使用非GUI 模式運行測試腳本時可以使用的一些命令:
- -h 幫助 -> 打印出有用的信息並退出
- -n 非 GUI 模式 -> 在非 GUI 模式下運行 JMeter
- -t 測試文件 -> 要運行的 JMeter 測試腳本文件(可以在GUI模式下配置生成好直接再拿來用,需要的話再手動修改裏面的一些參數)
- -l 結果文件 -> 記錄結果的文件
- -r 遠程執行 -> 啟動遠程服務
- -H 代理主機 -> 設置 JMeter 使用的代理主機
- -P 代理端口 -> 設置 JMeter 使用的代理主機的端口號
- -j 保存日誌 ->記錄jmeter執行過程情況
(註意:如果安裝部署jmeter時設置了環境變量,則可以在任意目錄使用jmeter命令;如果未設置Jmeter的環境變量則在執行腳本的時候需要檢查當前目錄是否是jmetet的bin 目錄下。)
運行效果如下:
xxx.jtl文件內容如下:
執行結果可以使用 GUI 模式下的聚合報告查看,比如你想要看xxx.jtl 的報告,可以在Windows環境上打開JMeter GUI 界面 -> 測試計劃 -> 添加線程組 -> 添加聚合報告 -> 點擊"所有數據寫入一個文件"下的 "瀏覽..." 按鈕找到你剛生成的jtl 文件就可以對執行結果進行直觀分析了:
聚合報告參數詳解:
1> Label:每個 JMeter 的 element(例如 HTTP Request)都有一個 Name 屬性,這裏顯示的就是 Name 屬性的值
2> #Samples:請求數——表示這次測試中一共發出了多少個請求,如果模擬10個用戶,每個用戶叠代10次,那麽這裏顯示100
3> Average:平均響應時間——默認情況下是單個 Request 的平均響應時間,當使用了 Transaction Controller 時,以Transaction 為單位顯示平均響應時間
4> Median:中位數,也就是 50% 用戶的響應時間
5> 90% Line:90% 用戶的響應時間
6> Min:最小響應時間
7> Max:最大響應時間
8> Error%:錯誤率——錯誤請求數/請求總數
9> Throughput:吞吐量——默認情況下表示每秒完成的請求數(Request per Second),當使用了 Transaction Controller 時,也可以表示類似 LoadRunner 的 Transaction per Second 數
10> KB/Sec:每秒從服務器端接收到的數據量,相當於LoadRunner中的Throughput/Sec
一般而言,性能測試中我們需要重點關註的數據有: #Samples 請求數,Average 平均響應時間,Min 最小響應時間,Max 最大響應時間,Error% 錯誤率及Throughput 吞吐量。
3.jmeter執行java請求代碼實例
在eclipse中新建maven項目,首先在pom.xml文件中加入jmeter的依賴:
<!-- Jmeter dependency -->
<dependency><groupId>org.apache.jmeter</groupId><artifactId>ApacheJMeter_core</artifactId><version>4.0</version><scope>provided</scope></dependency><dependency><groupId>org.apache.jmeter</groupId><artifactId>ApacheJMeter_java</artifactId><version>4.0</version><scope>provided</scope></dependency>
然後新建測試方法類,具體如下代碼:
public class TestDemo {public int Tdemo(int a,int b){int sum = 0;
sum = a+b;return sum;
}}
再新建一個class文件,繼承AbstractJavaSamplerClient,
(備註:AbstractJavaSamplerClient類的四個方法.)
public Arguments getDefaultParameters();設置可用參數及的默認值,設置了在Jmeter中則要輸入。public void setupTest(JavaSamplerContext arg0):每個線程測試前執行一次,做一些初始化工作;public SampleResult runTest(JavaSamplerContext arg0):開始測試,從arg0參數可以獲得參數值;public void teardownTest(JavaSamplerContext arg0):測試結束時調用;
並重寫裏面的方法,具體如下代碼:
public class TestLength extends AbstractJavaSamplerClient{private SampleResult results;
private String a;
private String b;
private String sum;
//設置可用參數集的默認值;
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("num1","");
params.addArgument("num2","" );
return params;
}//初始化方法,實際運行時每個線程僅執行一次,在測試方法運行前執行
public void setupTest(JavaSamplerContext arg0) {results = new SampleResult();
}//測試執行的循環體,根據線程數和循環次數的不同可執行多次
public SampleResult runTest(JavaSamplerContext arg0) {
a = arg0.getParameter("num1");
b = arg0.getParameter("num2");
results.sampleStart(); //定義一個事務,表示這是事務的起始點
try{
TestDemo test = new TestDemo();
sum = String.valueOf(test.Tdemo(Integer.parseInt(a), Integer.parseInt(b)));if (sum != null && sum.length() > 0) {results.setResponseData("結果是:"+sum, null);results.setDataType(SampleResult.TEXT);}//會顯示在結果樹的響應數據裏
System.out.println(sum);//會輸出在Jmeter啟動的命令窗口中
results.setSuccessful(true);
}catch(Throwable e){
results.setSuccessful(false);
e.printStackTrace();}finally{
results.sampleEnd(); //定義一個事務,表示這是事務的結束點
}return results;
}//結束方法,實際運行時每個線程僅執行一次,在測試方法運行結束後執行
public void teardownTest(JavaSamplerContext arg0) {}}
使用eclipse的maven install打成jar包,並將其放入apache-jmeter-4.0\lib\ext路徑下,然後在GUI模式中的Java請求界面中就能看到相應的類啦。通過此方法(jmeter運行Java腳本)的學習,在以後則可以直接測試開發寫好的方法。
4.jmeter註意事項
1>程序中依賴的jmeter的jar包和Linux主機上安裝的版本要一致(Windows環境中自己寫的java的jar包中依賴的jmeter版本和所安裝版本不一致時並未報錯);
jmeter知識總結(一)