1. 程式人生 > 其它 >JMeter筆記:如何編寫Java請求

JMeter筆記:如何編寫Java請求

本篇編寫java指令碼來請求資料庫

 

準備工作

  • idea安裝和配置
  • mysql安裝和配置
  • 準備好依賴的jar包

 

指令碼編寫

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> 執行指令碼,執行成功如下圖: