jmeter快速上手(四)压测自定义Java请求

jmeter不仅仅可以压测http、jdbc等常见应用场景,而且可以测试自定义的java请求。大多数情况下我们不会用到这种情况,但是有些情况下确实需要我们自己定义一个java请求取样器。例如我在使用服务器驱动连接Neo4j的时候,就需要自己定义这个操作。当然Neo4j也是支持jdbc的。下面以 Neo4j 的服务器驱动为例说明整个流程。

1、配置

在Java工程中添加JMETER_HOME/lib目录下的jar包到你的依赖中。新建一个java类,继承AbstractJavaSamplerClient抽象类或实现JavaSamplerClient接口。AbstractJavaSamplerClient类可以不重写getDefaultParameters方法。

2、定义

重写下面方法
public Arguments getDefaultParameters()  //设置可用参数及的默认值
public void setupTest(JavaSamplerContext arg0)  //每个线程测试前执行一次,做一些初始化工作
public SampleResult runTest(JavaSamplerContext arg0)   //开始测试,从arg0参数可以获得参数值
public void teardownTest(JavaSamplerContext arg0)   //测试结束时调用

基于Neo4j的案例。

import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import org.neo4j.driver.v1.*;

public class Match extends AbstractJavaSamplerClient{
	private Driver driver = null;
	private Session session = null;
	
	@Override
	public void setupTest(JavaSamplerContext context) {
		driver = GraphDatabase.driver("bolt://IP:7687", AuthTokens.basic("neo4j", "neo4j"));
		session = driver.session();
	}
	
	@Override
	public SampleResult runTest(JavaSamplerContext arg0) {
		SampleResult sampleResult = new SampleResult();
		sampleResult.sampleStart();    //计时开始
		try {
			//执行你的操作
			StatementResult res = session.run("match(n:Person{name:913000}) return n.name as name, n.s1 as s1");
			sampleResult.sampleEnd();  //计时结束
			sampleResult.setSuccessful(true);  //成功
			
			String tmp="";
			tmp = res.toString();
			while(res.hasNext())
			{
				tmp += res.next().toString()+"\n";
			}
			sampleResult.setResponseData(tmp, null);		//返回结果
			sampleResult.setDataType(SampleResult.TEXT);
			
			return sampleResult;
			
		} catch (Exception e) {
			sampleResult.sampleEnd();   //计时结束
			sampleResult.setSuccessful(false);   //失败,Error
			//e.printStackTrace();
			sampleResult.setResponseData(e.getMessage(), null);
			
			return sampleResult;
		}
	}

	@Override
	public void teardownTest(JavaSamplerContext context) {
		// TODO Auto-generated method stub
		session.close();
		driver.close();
	}
}

本例中不需要传参,所以没有重写getDefaultParameters()方法。setupTest()做一些初始化工作,这里连接Neo4j。runTest()是测试主题,定义自己的测试内容,返回结果等。SampleResult类用来计时,返回结果树的内容等。teardownTest()做测试结束的处理工作,这里关闭连接。

如果我们起了10个线程,循环100次,则总共执行10*100 = 1000次。意味着,setupTest()方法执行了10次,runTest()方法执行了1000次,teardownTest方法执行了10次。

3、使用

将编写好的Java工程导出为jar包,放到jmeter的lib/ext目录下。启动jmeter,根据需要添加线程组。右击线程组添加-->取样器-->Java请求。

在类名称选择自定义的类名。如果需要传参,则在下面同请求一起发送参数添加所需参数即可。

依次添加需要的监听器,启动测试即可。如果在Linux下测试,则需要把所有依赖包都copy到Linux的jmeter所在lib对应目录中。对于上述流程不熟悉的同学,可以参考前一篇文章

4、结束语

该系列文章到此结束,在第一篇文章中也说明了本系列文章不适用于系统学习jmeter,主要用于非测试人员快速完成测试任务,在下在此之前也从未接触过jmeter。如果有什么错误的地方,欢迎指正。

猜你喜欢

转载自blog.csdn.net/haveanybody/article/details/89141060
今日推荐