概述
???????? Apache JMeter是Apache組織開發的基于Java的壓力測試工具。本文檔主要描述用Jmeter工具對基于Dubbo、Zookeeper框架的Cassandra接口、區塊鏈接口進行壓力測試的一些說明,為以后類似接口的測試提供參考。
環境部署
1、? 下載Jmeter工具apache-jmeter-3.3.zip:
http://jmeter.apache.org/download_jmeter.cgi
2、? 解壓apache-jmeter-3.3.zip;
3、? 運行bin目錄下的jmeter.bat,就可以看到Jmeter測試界面(Linux環境請運行jmeter.sh)。如下圖所示:
測試流程
1、? 打開Jmeter工具,在【測試計劃】下面添加【線程組】,如下如圖所示:
?
2、? 在【線程組】下面添加【java請求】,如下圖所示
3、? 在【線程組】下面繼續添加【察看結果數】和聚合報告,如下圖所示
?
4、? 接下來在我們的consumer工程中,用maven引入Jmeter依賴的jar包,在pom.xml文件加入如下幾行代碼:
?? <dependency>
??????? <groupId>org.apache.jmeter</groupId>
??????? <artifactId>ApacheJMeter_core</artifactId>
??????? <version>3.0</version>
??? </dependency>
??? ???????? <dependency>
??????? ???????? <groupId>org.apache.jmeter</groupId>
????? ???????? <artifactId>ApacheJMeter_java</artifactId>
??????? ???? <version>3.0</version>
</dependency>
5、? 加好之后,用Maven編譯consumer工程,編譯成功后,會在工程中引入如下兩個Jmeter jar包:
6、? 編寫Jmeter測試用例,需要繼承AbstractJavaSamplerClient類,這個步驟很重要,寫好之后,后續導出xxx.jar包后,Jmeter界面使用這個測試用例進行壓力測試,下面附上詳細代碼
public class JMeterTestSign extends AbstractJavaSamplerClient {
??? private String resultData ; //寫入結果樹時使用
??? private SampleResult results;
??? //提供給jmeter的對外參數,可修改
??? String value;
??? String type;
??? /**
???? * 測試方法運行之前的工作(初始化記錄結果;從參數列表中獲取對應變)
???? * @param arg0
???? */
??? @Override
??? public void setupTest(JavaSamplerContext arg0) {
??????? results = new SampleResult();
??????? value = arg0.getParameter("value");
??????? type = arg0.getParameter("type");
??? }
??? /**
???? * 獲取默認參數以及參數值
???? * @return
???? */
??? @Override
??? public Arguments getDefaultParameters() {
??????? Arguments params = new Arguments();
??????? String value = "1234567890";
??????? params.addArgument("value", value);
??????? params.addArgument("type", "ec");
??????? return params;
??? }
??? /**
???? * 運行測試方法(初始化記錄結果,設定開始/結束記錄時間,測試調用Service的主方法,測試成功與否的判斷方法)
???? * @param arg0
???? * @return
???? */
??? public SampleResult runTest(JavaSamplerContext arg0) {
??????? results = new SampleResult();//初始化記錄結果
??????? results.sampleStart();//計時開始
??????? /*測試方法,此處寫自己的測試方法進行調用*/
??????? try {
// 下面的一行為自定義方法,可以測試自己的方法
??????????? String signature = EccService.sign(value, type);
??????????? results.sampleEnd();//計時結束
??????????? //判斷測試成功與否的方法:可根據實際進行判斷,此處為如果沒有拋出異常,則認為該次調用成功
??????????? results.setSuccessful(true);
??????????? //將結果寫入結果樹:在JMeter的監聽器-查看結果樹時即可查看返回結果
??????????? resultData = signature;
??????????? results.setResponseData("結果是:"+resultData ,null);
??????????? results.setDataType(SampleResult. TEXT);
??????????? return results;
??????? } catch (InvalidKeySpecException e) {
??????????? results.setSuccessful(false);
??????????? e.printStackTrace();
??????????? return results;
??????? } catch (IOException e) {
??????????? results.setSuccessful(false);
??????????? e.printStackTrace();
??????????? return results;
??????? } catch (CryptoException e) {
??????????? results.setSuccessful(false);
??????????? //將結果寫入結果樹:在jmeter的監聽器-查看結果樹時即可查看返回結果
??????????? resultData += false;
? ??????????results.setResponseData("結果是:"+resultData ,null);
??????????? results.setDataType(SampleResult. TEXT);
??????????? e.printStackTrace();
??????? }
??????? return results;
??? }
??? /**
???? * 獲取jmeter輸入的參數值
???? *
???? * @return
???? */
??? public void setValues(JavaSamplerContext arg0) {
??????? value = arg0.getParameter("value", value);
??????? type = arg0.getParameter("type", type);
??? }
??? @Override
??? public void teardownTest(JavaSamplerContext context) {
??? }
}
7、? 編寫好測試用例后,將工程導出為一個jar包:
Maven build或者maven package都可以
8、? 將導出的jar包,拷貝到Jmeter安裝目錄的lib/ext子目錄下
9、? 在Jmeter測試計劃主界面,點擊【瀏覽】,選擇本次Jmeter測試用例所依賴的jar包目錄(右鍵工程,選擇maven build,在goals中輸入dependency:copy-dependencie命令并執行,把所有jar包放到某個目錄下)
注:maven導出所有依賴的jar包,也可以在pom文件中添加配置
<build>
??????? <plugins>
??????????? <plugin>
??????????????? <groupId>org.apache.maven.plugins</groupId>
??????????????? <artifactId>maven-dependency-plugin</artifactId>
??????????????? <executions>
??????????????????? <execution>
??????????????????????? <id>copy</id>
??????????????????????? <phase>package</phase>
??????????????????????? <goals>
??????????????????????????? <goal>copy-dependencies</goal>
? ??????????????????????</goals>
??????????????????????? <configuration>
??????????????????????????? <outputDirectory>${project.build.directory}/lib</outputDirectory>
??????????????????????? </configuration>
??????????????????? </execution>
??????????????? </executions>
??????????? </plugin>
??????? </plugins>
??? </build>
12、??? 點擊【線程組】,在主界面中輸入【線程數】:需要多少并發量就寫多少個,其他都寫1
13、?? 再點擊【Java請求】,在主界面中,【類名稱】選擇’ com.foriseland.fas.cassandra.jmeter.TestConsumer’;并在下方輸入自定義的參數,如下如圖所示:
14、????????????? 以上這些操作完成后,保存退出,并重啟Jmeter,然后就可以對其進行壓力測試了。