本篇編寫java腳本來請求數據庫
准備工作
- idea安裝和配置
- mysql安裝和配置
- 准備好依賴的jar包(鏈接:https://pan.baidu.com/s/1xbY8-Wy161rEP9b8c5A8NA ,提取碼:e7pp )
腳本編寫
1、實現JavaSamplerClient接口
2、四個方法:
getDefaultParameters: 獲取參數,設置的參數會在Jmeter的參數面板上顯示出來
setupTest: 初始化方法,只執行一次,用於建立連接
runTest: 執行N次,處理業務
teardownTest: 結束方法,只執行一次,用於釋放資源
3、導出JMeter的java腳本
1> 導出之前先把腳本運行一遍,使用main方法,空的也行
2> file-export-runnable java file - launch configuration 那里要選擇你的類名
3> Library handing那里選擇第三項copy xxxx
4> 將導出的xxx.jar 和xxx_lib文件夾放到JMeter的lib/ext目錄下
5> 重新啟動JMeter
Java請求編寫
1、新建項目
2、新建lib目錄,將依賴jar包復制到lib下
3、解壓縮jar包,解壓縮jar包步驟如下:
1> File-->Project Structure
2> 在彈出來的Project Structure左側選擇Libraries,點擊+號,選擇Java
3> 在彈出來的Select Librariy Files中選擇當前項目的lib目錄
4> 如下圖點擊OK
5> 如下圖點擊OK
6> 解壓完成如下:
4、在src下編寫代碼
結構如下:
MyQueryTest內容如下:
package com.forest.jmeterSampler; 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; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; public class MyQueryTest implements JavaSamplerClient { Connection conn; PreparedStatement ps; String sql = "select user_name,password from user where id>?;"; ResultSet set; ArrayList<String> results = new ArrayList<>(); @Override public void setupTest(JavaSamplerContext javaSamplerContext) { String url = javaSamplerContext.getParameter("url"); String username = javaSamplerContext.getParameter("username"); String password = javaSamplerContext.getParameter("password"); try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url,username,password); ps = conn.prepareStatement(sql); System.out.println("setup"); } catch (Exception e) { e.printStackTrace(); } } @Override public SampleResult runTest(JavaSamplerContext javaSamplerContext) { SampleResult sampleResult = new SampleResult(); sampleResult.setSampleLabel("query-mysql-forest"); sampleResult.sampleStart(); try{ int id = javaSamplerContext.getIntParameter("id"); ps.setInt(1,id); set = ps.executeQuery(); while (set.next()){ String result = set.getString(1)+":"+set.getString(2); results.add(result); } if(results.size()>0){ sampleResult.setSuccessful(true); sampleResult.setResponseCode("200"); System.out.println(results); sampleResult.setResponseData(results.toString(),"utf-8"); sampleResult.setResponseMessage("query success!"); }else{ sampleResult.setSuccessful(false); sampleResult.setResponseCode("500"); sampleResult.setResponseMessage("query fail,sql is : "+sql); } }catch (Exception e) { sampleResult.setSuccessful(false); sampleResult.setResponseCode("500"); sampleResult.setResponseMessage(e.getMessage()); } sampleResult.sampleEnd(); return sampleResult; } @Override public void teardownTest(JavaSamplerContext javaSamplerContext) { try { ps.close(); //關閉對象 conn.close(); //關閉對象 }catch (Exception e){ e.printStackTrace(); } } @Override public Arguments getDefaultParameters() { Arguments arguments = new Arguments(); arguments.addArgument("url","jdbc:mysql://192.168.0.110:3306/forest"); arguments.addArgument("username","admin"); arguments.addArgument("password","admin123456"); arguments.addArgument("id","1"); return arguments; } public static void main(String[] args){ MyQueryTest myQueryTest = new MyQueryTest(); Arguments arguments = myQueryTest.getDefaultParameters(); JavaSamplerContext context = new JavaSamplerContext(arguments); myQueryTest.setupTest(context); myQueryTest.runTest(context); myQueryTest.teardownTest(context); } }
MysqlInsert內容如下:
package com.forest.jmeterSampler; import com.sun.xml.internal.bind.v2.util.QNameMap; 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; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class MysqlInsert implements JavaSamplerClient { Connection conn; //由setup中提到類下面 PreparedStatement ps; String sql = "insert into user(user_name,password) values(?,?);"; //預編譯SQL語句,需要有對象去存它 @Override public void setupTest(JavaSamplerContext javaSamplerContext) { String url = javaSamplerContext.getParameter("url"); String username = javaSamplerContext.getParameter("username"); String password = javaSamplerContext.getParameter("password"); try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url,username,password); ps = conn.prepareStatement(sql); } catch (Exception e) { e.printStackTrace(); } } @Override public SampleResult runTest(JavaSamplerContext javaSamplerContext) { SampleResult sampleResult = new SampleResult(); sampleResult.setSampleLabel("insert-mysql-forest"); sampleResult.sampleStart(); //開始發請求 int row = 0; try{ ps.setString(1,javaSamplerContext.getParameter("username3")); ps.setString(2,javaSamplerContext.getParameter("password3")); row = ps.executeUpdate(); if(row==1){ sampleResult.setSuccessful(true); sampleResult.setResponseCode("200"); sampleResult.setResponseData("insert行數"+row,"utf-8"); sampleResult.setResponseMessage("insert success!"); }else{ sampleResult.setSuccessful(false); sampleResult.setResponseCode("500"); sampleResult.setResponseMessage("insert fail"); } } catch (Exception e) { sampleResult.setSuccessful(false); sampleResult.setResponseCode("500"); sampleResult.setResponseMessage(e.getMessage()); } sampleResult.sampleEnd(); return sampleResult; } @Override public void teardownTest(JavaSamplerContext javaSamplerContext) { try { ps.close(); //關閉對象 conn.close(); //關閉對象 }catch (Exception e){ e.printStackTrace(); } } @Override public Arguments getDefaultParameters() { Arguments arguments = new Arguments(); arguments.addArgument("url","jdbc:mysql://192.168.0.110:3306/forest"); arguments.addArgument("username","admin"); arguments.addArgument("password","admin123456"); arguments.addArgument("username3",""); arguments.addArgument("password3",""); return arguments; } public static void main(String[] args){ MysqlInsert mysqlInsert = new MysqlInsert(); JavaSamplerContext context = new JavaSamplerContext(mysqlInsert.getDefaultParameters()); String url = context.getParameter("url"); String username =context.getParameter("username"); String password = context.getParameter("password"); Arguments arguments = new Arguments(); arguments.addArgument("url",url); arguments.addArgument("username",username); arguments.addArgument("password",password); arguments.addArgument("username3","lintest20"); arguments.addArgument("password3","123456"); JavaSamplerContext context2 = new JavaSamplerContext(arguments); mysqlInsert.setupTest(context2); mysqlInsert.runTest(context2); mysqlInsert.teardownTest(context2); } }
5、源碼打成jar包
1> build project
2> File -> Project Structure
3> Project Structure彈窗選擇Artifacts,選擇+號,選擇JAR,選擇Empty,如下圖:
4> 填寫名稱,雙擊圖中箭頭位置
5> 上一步雙擊完如下圖所示,點擊OK
6> 如下圖,out目錄已經生成,點擊Build -> Build Artifacts
7> 第6步點擊之后如下圖,點擊Build
8> 查看out下,打包成功
使用java請求
1> 添加java請求
2> 在java請求中選擇類名稱,填寫參數如下:
3> 運行腳本,運行成功如下圖: