`

jmeter 自定义 java测试脚本

阅读更多

1.打开Java编译器,新建一个项目"TestLength",然后新建一个包"app".
2.从Jmeter的安装目录lib\ext中拷贝两个文件"ApacheJMeter_core.jar" 和"ApacheJMeter_java.jar"到"Tester"的项目中,然后引入这两个JAR文件.(具体的引入方法参考各个Java编译器的使用方法)
3.在"app"包中新建一个类,名字叫"TestLength",不过这个类要继承"AbstractJavaSamplerClient"类,如果项目引入步骤二中的两个文件,就可以找到"AbstractJavaSamplerClient"类了.
4."TestLength"类在继承"AbstractJavaSamplerClient"类的同时也会继承四个方法,分别是"getDefaultParameters","setupTest","runTest"和"teardownTest"方法."getDefaultParameters"方法主要用于设置传入的参数;"setupTest"方法为初始化方法,用于初始化性能测试时的每个线程."runTest"方法为性能测试时的线程运行体;"teardownTest"方法为测试结束方法,用于结束性能测试中的每个线程.

 

5、把上面的例子打包,然后把生成的"TestLength。jar"文件拷贝到Jmeter的安装目录lib\ext下。
6、运行Jmeter,添加一个线程组,然后在该线程组下面添加一个Java请求(在Sampler中),在Java请求的类名称中选择咱们刚创建的类"app。TestLength",在下面参数列表的"testStr"后面输入要测试的字符串,然后添加一个监听器(聚合报告),设置一下模拟的用户数就可以测试了。如果测试不成功,Jmeter会在它自己个输出框中抛出这个字符串。
  通过上面的例子我们可以发现,使用Jmeter自定义Java测试代码,配合Jmeter自带的函数,就可以实现出LoadRunner中"Java Vuser"协议的绝大多数功能。

 

附上代码:

Java代码  收藏代码
  1. package cn.gbase.jmeterTest;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.ResultSet;  
  6. import java.sql.ResultSetMetaData;  
  7. import java.sql.SQLException;  
  8. import java.sql.Statement;  
  9.   
  10. import org.apache.jmeter.config.Arguments;  
  11. import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;  
  12. import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;  
  13. import org.apache.jmeter.samplers.SampleResult;  
  14.   
  15. /** 
  16.  *  
  17.  * @author tianmao 
  18.  */  
  19. public class JmeterExtendJDBCTest extends AbstractJavaSamplerClient {  
  20.     private SampleResult results;  
  21.     private String arg1;  
  22.   
  23.     /* Implements JavaSamplerClient.setupTest(JavaSamplerContext) */  
  24.     public void setupTest(JavaSamplerContext arg0) {  
  25.   
  26.         results = new SampleResult();  
  27.         results.setSamplerData(toString());  
  28.         results.setDataType("text");  
  29.         results.setContentType("text/plain");  
  30.         results.setDataEncoding("UTF-8");  
  31.   
  32.         results.setSuccessful(true);  
  33.         results.setResponseMessageOK();  
  34.         results.setResponseCodeOK();  
  35.           
  36.         arg1 = arg0.getParameter("arg1""");  
  37.         if (arg1 != null && arg1.length() > 0) {  
  38.             results.setSamplerData(arg1);  
  39.         }  
  40.     }  
  41.   
  42.     /* Implements JavaSamplerClient.teardownTest(JavaSamplerContext) */  
  43.     public void teardownTest(JavaSamplerContext arg0) {  
  44.         System.out.println("treaddown");  
  45.     }  
  46.   
  47.     /* Implements JavaSamplerClient.getDefaultParameters() */  
  48.     public Arguments getDefaultParameters() {  
  49.         Arguments params = new Arguments();  
  50.         params.addArgument("arg1""abc"); // 定义一个参数,显示到Jmeter的参数列表中,第一个参数为参数默认的显示名称,第二个参数为默认值  
  51.         return params;  
  52.     }  
  53.   
  54.     @Override  
  55.     public SampleResult runTest(JavaSamplerContext context) {  
  56.         int len = 0;  
  57.         results.sampleStart(); // 定义一个事务,表示这是事务的起始点,类似于LoadRunner的  
  58.                                 // lr.start_transaction  
  59.         arg1 = context.getParameter("arg1");  
  60.         doJDBCDeal();  
  61.         results.sampleEnd(); // 定义一个事务,表示这是事务的结束点,类似于LoadRunner的  
  62.                                 // lr.end_transaction  
  63.         return results;  
  64.     }  
  65.     public void doJDBCDeal() {  
  66.         try {  
  67.             Class.forName("com.gbase.jdbc.Driver");  
  68.         } catch (ClassNotFoundException e) {  
  69.             e.printStackTrace();  
  70.         }  
  71.         Connection conn = null;  
  72.         Statement stm = null;  
  73.         ResultSet rs = null;  
  74.         String sql = "select * from testView";  
  75.         try {  
  76.             conn = DriverManager.getConnection("jdbc:gbase://192.168.1.11/kgdx?user=gbase&password=gbase20110531&connectTimeout=300000");  
  77.             stm = conn.createStatement();  
  78.             rs = stm.executeQuery(sql);  
  79.             results.setResponseCode("testStr:" + arg1);  
  80.             results.setResponseMessage("aaaaaaaaaaaaaaa");  
  81.               
  82.             results.setResponseCode("UTF-8");  
  83.             results.setResponseCodeOK();  
  84.             results.setResponseData(("execute:"+ sql+ "\r\n" + rs2Str(rs)).getBytes("utf-8"));  
  85.         } catch (Exception e) {  
  86.             results.setSamplerData(e.getMessage());  
  87.             results.setSuccessful(false); // 用于设置运行结果的成功或失败,如果是"false"则表示结果失败,否则则表示成功  
  88.             return;  
  89.         } finally {  
  90.             try {  
  91.                 if (rs != null)  
  92.                     rs.close();  
  93.             } catch (SQLException e) {  
  94.             }  
  95.             try {  
  96.                 if (stm != null)  
  97.                     stm.close();  
  98.             } catch (SQLException e) {  
  99.             }             
  100.             try {  
  101.                 if (conn != null)  
  102.                     conn.close();  
  103.             } catch (SQLException e) {  
  104.             }  
  105.         }  
  106.         results.setSuccessful(true);  
  107.     }  
  108.       
  109.     public String rs2Str(ResultSet rs) {  
  110.         StringBuilder sb = new StringBuilder();  
  111.   
  112.         try {  
  113.             ResultSetMetaData rsmd = rs.getMetaData();  
  114.             int c = rsmd.getColumnCount();  
  115.             while (rs.next()) {  
  116.                 sb.append("----------------------------------------------------------").append("\r\n");;  
  117.                 for (int i = 0; i < c; i++) {  
  118.                     sb.append(rsmd.getColumnLabel(i + 1)).append("=").append(rs.getObject(i + 1)).append("\r\n");  
  119.                 }  
  120.                 sb.append("\r\n");  
  121.             }  
  122.         } catch (SQLException e) {  
  123.             e.printStackTrace();  
  124.         }  
  125.         return sb.toString();  
  126.     }  
  127. }  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics