性能測試十一:jmeter進階之java請求
使用Java編寫JDBC腳本對Mysql進行增刪改查等操作的性能測試
使用Jmeter提供的腳本框架依賴的jar包(分別在jmeter目錄下的lib和ext目錄下)
ApacheJMeter_core.jar
ApacheJMeter_java.jar
avalon-framework-4.1.4.jar jorphan.jar
logkit-2.0.jar
若為4.+以上的jmeter還需加兩個 slf4j-api-的.jar包
腳本調試好後,導出為jar包,放在apache-jmeter-3.1\lib\ext目錄下
Jmeter腳本要點
1,實現JavaSamplerClient接口
2,四個方法:
getDefaultParameters:獲取參數,設置的參數會在Jmeter的參數面板上顯示出來
setupTest:初始化方法,只執行一次,跟LR裏的init方法一樣的,用於建立鏈接
runTest:執行N次,處理業務
teardownTest:結束方法,只執行一次,LR裏的end方法是一樣的,用於釋放資源
3,導出Jmeter的java腳本
導出之前先把腳本運行一遍,使用main方法,空的也行
file-export-runnable java file - launch configuration 那裏要選擇你的類名
Library handing那裏選擇第三項copy xxxx
將導出的xxx.jar 和xxx_lib文件夾放到Jmeter的lib/ext目錄下
重新啟動Jmeter
創建class文件時在interfaces處add->JavaSamplerClient
package cn.test.jmeter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
public class MyJmeterTest implements JavaSamplerClient {
// 全局變量
PreparedStatement statement;
Connection conn;
@Override
public Arguments getDefaultParameters() {
// TODO Auto-generated method stub
return null;
}
/**
* 初始化的操作寫在setup方法裏,類似於LR裏的init
*/
@Override
public void setupTest(JavaSamplerContext arg0) {
// 註冊驅動,告訴Java接下來要鏈接哪個數據庫
try {
Class.forName("com.mysql.jdbc.Driver");
// 建立mysql數據庫鏈接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/oa", "root", "123456");
// 把sql進行編譯
statement = conn.prepareStatement("insert into itcast_role (name, description) values (?,?)");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 真正多次操作的業務,放在runtest方法裏,類似於LR裏的action
*/
@Override
public SampleResult runTest(JavaSamplerContext arg0) {
SampleResult result = new SampleResult();
// 給事務起個名稱
result.setSampleLabel("insert");
// 事務開始
result.sampleStart();
// 執行sql之前,先進行參數化
try {
statement.setString(1, "abc");
statement.setString(2, "test");
int rows = statement.executeUpdate();
if (rows > 0){
// 事務成功
result.setSuccessful(true);
}else{
// 事務失敗
result.setSuccessful(false);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 事務結束
result.sampleEnd();
return result;
}
/**
* 結束的操作放在teardown裏,類似於LR裏的end
*/
@Override
public void teardownTest(JavaSamplerContext arg0) {
// 關閉鏈接
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
MyJmeterTest test = new MyJmeterTest();
// 創建一個JavaSamplerContext對象,該對象創建的時候需要傳入一個Arguments對象
JavaSamplerContext context = new JavaSamplerContext(new Arguments());
test.setupTest(context);
test.runTest(context);
test.teardownTest(context);
}
}
導出到jmeter中用
拷貝到jmeter的lib_ext下,包括二次開發的腳本也都是放在這個目錄下,重啟jmeter
創建一個java請求
性能測試十一:jmeter進階之java請求