`

jmeter 自定义测试脚本

阅读更多

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();
	}
}

 

 

 

分享到:
评论

相关推荐

    JMeter性能测试脚本

    JMeter的代理服务器功能可以方便地录制用户操作,生成测试脚本。而丰富的插件库则扩展了JMeter的功能,如图形化展示、更复杂的断言、数据可视化等。 通过这一系列的学习,你将能够熟练掌握JMeter进行性能测试的基本...

    jmeter接口测试脚本

    在“jmeter接口测试脚本”这个主题中,我们将深入探讨如何使用JMeter进行接口测试,包括脚本的创建、执行以及结果分析。 首先,接口测试是验证应用程序内部或不同应用程序之间的通信功能是否正常的一种方法。它确保...

    jmeter测试脚本

    JMeter提供了丰富的插件和API,允许通过Java编程自定义测试逻辑,实现更复杂的测试场景。例如,可以编写Java代码创建自定义的断言、采样器或监听器。 总结,JMeter测试脚本是性能测试的核心,通过理解和熟练掌握...

    Jmeter进行soap接口测试脚本示例

    它的优点在于易用性、可扩展性和灵活性,允许用户自定义测试逻辑。 在JMeter中,进行SOAP接口测试主要涉及以下几个步骤: 1. **创建线程组**:线程组是JMeter测试计划的基本单元,代表一组并发用户。在测试计划下...

    JMeter编写录制HTTPS性能测试脚本.pdf

    JMeter支持JSR223兼容的语言(如Groovy和BeanShell)来编写脚本,提供了丰富的函数和定时器供用户自定义测试行为。 项目实战阶段,测试人员通常会创建线程组,设定并发用户数量,添加HTTP请求采样器模拟用户访问,...

    jmeter性能测试笔记

    在jmeter脚本中,需要将请求中需要参数化的部分的value原有的内容删除,并填入${自定义的参数名}。这样可以将请求参数化,提高测试效率。 五、添加同步计时器 在jmeter脚本中,需要添加同步计时器,以便在不同的...

    BadBoy jmeter测试录制脚本工具

    首先,让我们详细了解一下BadBoy如何帮助我们录制测试脚本。BadBoy通过模拟用户在浏览器中的操作,记录下这些操作对应的HTTP请求和响应,形成一个可读性强的脚本。这个脚本包含了URL、HTTP方法(如GET、POST)、请求...

    Jmeter性能测试白皮书

    此外,Jmeter还支持自定义插件,以满足特定的测试需求。 总的来说,Jmeter是一款强大且灵活的性能测试工具,无论是在压力测试、功能测试还是接口测试中,都能发挥关键作用。掌握Jmeter的使用,可以帮助我们更有效地...

    Jmeter测试实验报告.docx

    1. **测试计划(Test Plan)**:测试计划是JMeter测试的起点,它是其他测试元件的容器,整个测试脚本和配置都在这个层次下组织。 2. **线程组(Thread Group)**:线程组模拟并发用户,可以设置线程数、启动速率...

    用Jmeter测试RabbitMQ

    - **示例脚本**: [RPC Load Test.jmx](https://github.com/jlavallee/JMeter-Rabbit-AMQP/blob/master/examples/RPC_Load_Test.jmx),提供了一个基于请求/响应模式的性能测试示例。 - **补充资料**: 可以参考以下...

    Jmeter调用java脚本过程详解

    总的来说,JMeter 调用 Java 脚本是一种强大的功能,可以帮助测试工程师实现自定义测试逻辑,提高测试的灵活性和覆盖率。了解和掌握这一技巧,对于提升 JMeter 测试的质量和效率至关重要。通过不断的实践和优化,...

    Jmeter接口测试方案实例

    JMeter支持插件机制,可以安装各种插件以增强功能,例如CSV Data Set Config用于读取数据文件,JSR223 Sampler用于执行自定义的脚本测试,以及各种图表和报告插件,以满足更复杂的测试需求。 总结来说,JMeter接口...

    JMeter性能测试从零到高手

    1. **内存溢出**:增加JMeter的内存分配,或者优化测试脚本减少内存消耗。 2. **响应慢**:检查网络连接、服务器配置等问题;也可以尝试优化测试脚本,减少不必要的延迟。 3. **结果不一致**:确保每次测试前后的...

    jmeter压力测试脚本

    在这个"jmeter压力测试脚本"中,我们可以找到与性能测试相关的多个知识点。 1. **JMeter基本概念**: - **工作原理**:JMeter通过发送HTTP/HTTPS请求到服务器,模拟用户行为,然后记录服务器的响应时间、吞吐量等...

    jmeter性能测试白皮书

    - **Variable Name Bound to Pool(绑定到连接池的变量名)**:通常用来存储数据库连接池的信息,以便于在测试脚本中引用。 - **Database Type**:指定了所使用的数据库类型,例如MySQL、MS SQL Server、Oracle等。 ...

    Jmeter接口测试,性能压测等

    JMeter的工作原理是通过录制用户的操作,生成测试脚本,然后在大量虚拟用户中重放这些操作,以模拟真实用户的行为。这种方式使得JMeter在接口测试和性能压测方面非常灵活和实用。 1. **接口测试**: 在JMeter中,...

    Jmeter性能测试报告之曲线图展示

    这样做是为了让Ant能够找到`org.programmerplanet.ant.taskdefs.jmeter.JMeterTask`类,从而成功执行JMeter脚本。 #### 配置Build.xml 接下来,需要配置`build.xml`文件来定义测试任务的细节。以下是关键部分的...

    jmeter软件测试工具

    8. **脚本录制与回放**:JMeter具有代理服务器功能,可以记录用户的浏览器操作并生成相应的测试脚本,方便进行回放和修改,简化了测试脚本的创建过程。 9. **扩展性**:JMeter的插件系统非常强大,社区提供了众多第...

    JMeter 压力测试详解PPT

    除了基础的测试功能,JMeter 还支持插件和自定义脚本,可以进行更复杂的场景模拟,如负载渐增测试、分布式测试等。此外,JMeter 还可以通过配置实现对响应时间、错误率等阈值的监控,以判断系统是否达到预设的性能...

Global site tag (gtag.js) - Google Analytics