實際過程中采用Jmeter壓測Http接口比較多,但是實際工作中也可能會遇見一些無法通過http 來實現的,之前工作中遇見通過SDK來獲取token,然后拿token再去請求其他的接口,需要借助java request來實現邏輯,下面來看下如何來實現java Request請求;
一、實現JAVA請求代碼(Java Request 核心內容)
1、創建Maven工程;
2、pom文件添加依賴 ApacheJMeter_core 和 pacheJMeter_java;
<dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_core</artifactId> <version>5.1.1</version> </dependency> <dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_java</artifactId> <version>5.1.1</version> </dependency>
3、繼承AbstractJavaSamplerClient,並重寫runTest()方法;
4、JAVA Request 請求例子(例子中主要模擬判斷賬號和密碼是否一致做出不同接口,賬號和密碼與預期一致登錄成功,設置結果為通過,賬號和密碼與預期不一致登錄失敗,設置結果為失敗);
package com.cfilmcloud.example; import org.apache.jmeter.config.Arguments; import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient; import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext; import org.apache.jmeter.samplers.SampleResult; /** * @Author liuqiang_cl@163.com * @Date 2020/7/14 16:56 */ public class JmeterJavaRequestExample extends AbstractJavaSamplerClient { public void setupTest(JavaSamplerContext context) { //可選,測試前執行,做一些初始化工作; System.out.println("setupTest"); } public void teardownTest(JavaSamplerContext context) { // 可選,測試結束時調用; System.out.println("teardownTest"); } @Override public Arguments getDefaultParameters() { // 設置可用參數 Arguments jMeterProperties = new Arguments(); jMeterProperties.addArgument("userName", ""); jMeterProperties.addArgument("userPassword", ""); return jMeterProperties; } @Override public SampleResult runTest(JavaSamplerContext javaSamplerContext) { //必選,實現自定義請求,請求邏輯; SampleResult sampleResult = new SampleResult(); sampleResult.setSampleLabel("Jmeter Java Request"); // 設置請求名稱 try { sampleResult.sampleStart(); //開始統計響應時間標記 String userName = javaSamplerContext.getParameter("userName"); String userPassword = javaSamplerContext.getParameter("userPassword"); if (userName.equals("admin") && userPassword.equals("admin")) { System.out.println("登錄成功"); sampleResult.setSuccessful(true); // 設置結果成功 sampleResult.setResponseData("登錄成功", "utf-8"); } else { System.out.println("登錄失敗"); sampleResult.setSuccessful(false); // 設置結果失敗 } } finally { sampleResult.sampleEnd();// 結束統計響應時間標記 } return sampleResult; } }
5、通過打包生成jar包
6、將jar包放在jmeter lib/ext目錄下,重新啟動Jmeter
二、Jmeter 配置 Java Request請求
1、新建Java Request請求
2、選擇要執行請求的類和配置請求參數
到此Java Request請求配置完成,后續請求執行階段與Http請求執行一致,而Jmeter request 請求的核心步驟不在於Jmeter的配置,關鍵在於Java 代碼的實現內容,主要邏輯存放在Java代碼,而Jmeter主要是來執行該代碼
三、JMeter Java Sampler介紹
1、常用方法
public void setupTest(JavaSamplerContext context){}; // 測試啟動時調用,主要做一些初始化工作; public void teardownTest(JavaSamplerContext context){}; // 測試結束時調用,主要做一些資源回收工作; public Arguments getDefaultParameters(){return null;}; //設置可用參數及參數默認值,主要用於Jmeter界面與代碼參數之間的交互操作; public SampleResult runTest(JavaSamplerContext javaSamplerContext) {return null;}; // 必選,實現自定義請求
代碼中的方法執行的先后順序:
sampleResult.setSampleLabel("Jmeter Java Request"); // 設置請求名稱 sampleResult.sampleStart(); //開始統計響應時間標記 sampleResult.setSuccessful(true); // 設置請求結果成功 sampleResult.setSuccessful(false); // 設置請求結果失敗 sampleResult.sampleEnd();// 結束統計響應時間標記 sampleResult.setResponseData("登錄成功", "utf-8"); // 設置Response,如果返回內容包含中文,需要指定字符串,否則會出現亂碼
文中代碼提取鏈接: https://pan.baidu.com/s/182pOzVR4S2Q0jEhjnN5wjA 提取碼: imgc