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"协议的绝大多数功能。
附上代码:
- package cn.gbase.jmeterTest;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.ResultSetMetaData;
- import java.sql.SQLException;
- import java.sql.Statement;
- 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 tianmao
- */
- public class JmeterExtendJDBCTest extends AbstractJavaSamplerClient {
- private SampleResult results;
- private String arg1;
- /* Implements JavaSamplerClient.setupTest(JavaSamplerContext) */
- public void setupTest(JavaSamplerContext arg0) {
- results = new SampleResult();
- results.setSamplerData(toString());
- results.setDataType("text");
- results.setContentType("text/plain");
- results.setDataEncoding("UTF-8");
- results.setSuccessful(true);
- results.setResponseMessageOK();
- results.setResponseCodeOK();
- arg1 = arg0.getParameter("arg1", "");
- if (arg1 != null && arg1.length() > 0) {
- results.setSamplerData(arg1);
- }
- }
- /* Implements JavaSamplerClient.teardownTest(JavaSamplerContext) */
- public void teardownTest(JavaSamplerContext arg0) {
- System.out.println("treaddown");
- }
- /* Implements JavaSamplerClient.getDefaultParameters() */
- public Arguments getDefaultParameters() {
- Arguments params = new Arguments();
- params.addArgument("arg1", "abc"); // 定义一个参数,显示到Jmeter的参数列表中,第一个参数为参数默认的显示名称,第二个参数为默认值
- return params;
- }
- @Override
- public SampleResult runTest(JavaSamplerContext context) {
- int len = 0;
- results.sampleStart(); // 定义一个事务,表示这是事务的起始点,类似于LoadRunner的
- // lr.start_transaction
- arg1 = context.getParameter("arg1");
- doJDBCDeal();
- results.sampleEnd(); // 定义一个事务,表示这是事务的结束点,类似于LoadRunner的
- // lr.end_transaction
- return results;
- }
- public void doJDBCDeal() {
- try {
- Class.forName("com.gbase.jdbc.Driver");
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- Connection conn = null;
- Statement stm = null;
- ResultSet rs = null;
- String sql = "select * from testView";
- try {
- conn = DriverManager.getConnection("jdbc:gbase://192.168.1.11/kgdx?user=gbase&password=gbase20110531&connectTimeout=300000");
- stm = conn.createStatement();
- rs = stm.executeQuery(sql);
- results.setResponseCode("testStr:" + arg1);
- results.setResponseMessage("aaaaaaaaaaaaaaa");
- results.setResponseCode("UTF-8");
- results.setResponseCodeOK();
- results.setResponseData(("execute:"+ sql+ "\r\n" + rs2Str(rs)).getBytes("utf-8"));
- } catch (Exception e) {
- results.setSamplerData(e.getMessage());
- results.setSuccessful(false); // 用于设置运行结果的成功或失败,如果是"false"则表示结果失败,否则则表示成功
- return;
- } finally {
- try {
- if (rs != null)
- rs.close();
- } catch (SQLException e) {
- }
- try {
- if (stm != null)
- stm.close();
- } catch (SQLException e) {
- }
- try {
- if (conn != null)
- conn.close();
- } catch (SQLException e) {
- }
- }
- results.setSuccessful(true);
- }
- public String rs2Str(ResultSet rs) {
- StringBuilder sb = new StringBuilder();
- try {
- ResultSetMetaData rsmd = rs.getMetaData();
- int c = rsmd.getColumnCount();
- while (rs.next()) {
- sb.append("----------------------------------------------------------").append("\r\n");;
- for (int i = 0; i < c; i++) {
- sb.append(rsmd.getColumnLabel(i + 1)).append("=").append(rs.getObject(i + 1)).append("\r\n");
- }
- sb.append("\r\n");
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return sb.toString();
- }
- }
相关推荐
它能够对静态和动态资源(如静态文件、Java小应用程序、CGI脚本、Java对象、数据库和FTP服务器)进行性能和功能测试。 2. **安装与配置** 首先,你需要从Apache JMeter官方网站下载最新版本的JMeter,解压后运行`...
总的来说,JMeter 调用 Java 脚本是一种强大的功能,可以帮助测试工程师实现自定义测试逻辑,提高测试的灵活性和覆盖率。了解和掌握这一技巧,对于提升 JMeter 测试的质量和效率至关重要。通过不断的实践和优化,...
Java Sampler是JMeter框架的一部分,它允许开发者用Java语言编写测试脚本,从而实现对任何基于Java接口的服务进行压力测试。这种灵活性使得Java Sampler成为那些无法通过默认取样器实现测试需求的项目的理想选择。 ...
JMeter提供了丰富的插件和API,允许通过Java编程自定义测试逻辑,实现更复杂的测试场景。例如,可以编写Java代码创建自定义的断言、采样器或监听器。 总结,JMeter测试脚本是性能测试的核心,通过理解和熟练掌握...
JMeter支持JSR223兼容的语言(如Groovy和BeanShell)来编写脚本,提供了丰富的函数和定时器供用户自定义测试行为。 项目实战阶段,测试人员通常会创建线程组,设定并发用户数量,添加HTTP请求采样器模拟用户访问,...
通过配置线程组、使用监听器收集数据和自定义Java请求,我们可以对Java接口进行深入的性能测试,确保系统在高并发情况下的稳定性和效率。同时,JMeter丰富的文档和社区支持,使得学习和使用JMeter成为了一项相对容易...
在JMeter中使用Java Request进行TCP测试,你需要编写Java代码来建立TCP连接,发送数据,并处理服务器返回的数据。这通常涉及到Socket编程,包括Socket的创建、数据的编码与解码等步骤。 HTTP请求则是我们最常见的...
2. **脚本语言**:大多数压力测试工具支持自定义脚本语言,例如JMeter使用Java语法的Groovy或BSF脚本,LoadRunner有其专有的Vuser脚本语言。开发者需要掌握这些语言来编写复杂的测试逻辑。 3. **负载模拟**:脚本...
1. BeanShell脚本:BeanShell是一个小型、快速的Java脚本语言,可以直接在JMeter中使用。通过BeanShell脚本,开发者可以编写Java代码,进行数据处理、条件判断等操作。 2. JSR223脚本:JSR223是Java Scripting API...
此外,Jmeter还支持自定义插件,以满足特定的测试需求。 总的来说,Jmeter是一款强大且灵活的性能测试工具,无论是在压力测试、功能测试还是接口测试中,都能发挥关键作用。掌握Jmeter的使用,可以帮助我们更有效地...
总之,掌握JMeter的基本操作,熟练运用录制脚本功能,并结合Java开发技巧,不仅可以提高测试效率,还能为团队提供强大的性能测试能力。对于任何Java开发者而言,熟悉JMeter都是提升自身技能,优化项目性能不可或缺的...
JMeter可以用来测试静态和动态资源,如静态文件、Java小服务程序、CGI脚本、Java对象、数据库等。使用JMeter可以方便地创建测试计划,这些测试计划通过模拟多用户访问来测试一个或多个服务器的压力。 在进行API接口...
标签“源码”和“工具”暗示了这个压缩包可能包含了JMeter的自定义脚本或源代码示例,以及关于如何利用JMeter工具进行数据库测试的详细信息。源码可能是一个预配置的JMX文件(JMeter的测试计划文件),如"JDBC ...
支持通过Java代码、BeanShell、JSR223脚本创建自定义逻辑,满足复杂测试需求。 12. **易用性**: JMeter采用GUI界面,便于用户构建和修改测试计划,同时提供命令行模式适合自动化测试。 13. **兼容性**: 支持...
4. **灵活的测试设计**: JMeter支持录制和回放测试脚本,方便进行功能测试和回归测试。用户可以自定义测试逻辑,通过断言来验证响应数据。 5. **模块控制器**: 支持模块化的测试设计,使得测试计划的管理和维护变得...
3. **可扩展性**:支持自定义插件,可以通过编写Java代码或使用BeanShell、JSR223脚本语言实现自定义功能。 4. **丰富的测试元素**:包含HTTP请求、HTTP响应断言、定时器、监听器等多种测试组件,覆盖了全面的测试...
但是,在实际应用中,有些情况下我们需要将自定义的Jar包引入JMeter,以满足特殊的测试需求。因此,本文将详细介绍JMeter如何导入自定义的Jar包。 环境准备 要成功地将自定义的Jar包引入JMeter,需要 preparation ...