jmeter之java代码性能测试

一、环境准备

1、新建一个java工程

2、导入jar包:ApacheJMeter_core.jar     ApacheJMeter_java.jar

这两个jar是使用jmeter最基础的jar,能够让你的代码在jmeter中运行起来,如果在写代码的过程中需要其他的jar,自行导入。

二、写代码前该知道的

1、如果想要让你的代码在jmeter中运行起来,在创建类的时候需要去继承AbstractJavaSamplerClient抽象类或者是实现JavaSamplerClient接口

AbstractJavaSamplerClient抽象类是JavaSamplerClient接口的子类,当你不需要复写所有的需要复写的方法时,那么你只需要去继承AbstractJavaSamplerClient抽象类即可。

如果你选择了实现JavaSamplerClient接口,那么你需要复写的方法有:

public SampleResult runTest(JavaSamplerContext context) {}

public void setupTest(JavaSamplerContext context) {}

public void teardownTest(JavaSamplerContext context) {}

public Arguments getDefaultParameters() {}

这4个方法就必须要复写,但是如果选择继承AbstractJavaSamplerClient这个抽象类,那么只需要复写你需要的方法即可。

2、方法说明:

public Arguments getDefaultParameters() {}

这个方法由Jmeter在进行添加javaRequest时第一个运行,它决定了你要在GUI中默认显示出哪些属性。

public void setupTest(JavaSamplerContext context) {}

这个方法相当于loadrunner中的init,我们可以用它来进行一些初始化的动作。

public SampleResult runTest(JavaSamplerContext context) {}

这个方法相当于loadrunner中的action,我们的核心测试代码就在这里了。

public void teardownTest(JavaSamplerContext context) {}

这个方法相当于loadrunner中的end,收尾的工作可以由它来做。

3、除了以上2点,我们一般还需要去实现Serializable,序列化标记接口,这样可以让我们的类去实现序列化。

三、代码书写

package com.lingfeng.jmeter.practice;

import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

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;

public class MyJavaRequest extends AbstractJavaSamplerClient implements Serializable  {

	private static final long serialVersionUID = 1L;

	private String sUrl;//存储用户输出的url

	private static final String URL_NAME="URL" ;//设置GUI页面显示的变量名称
	//设置GUI页面默认显示的变量值,默认值就是访问百度
	private static final String URLVALUE_DEFAULT="http://www.baidu.com";
	//resultData变量用来存储响应的数据,目的是显示到查看结果树中。
	private String resultData;

	StringBuilder sbResultData = new StringBuilder();

	/*
	 * 这个方法用来控制显示在GUI页面的属性,由用户来进行设置。
	 * 此方法不用调用,是一个与生命周期相关的方法,类加载则运行。
	 * (non-Javadoc)
	 * @see org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient#getDefaultParameters()
	 */
	@Override
	public Arguments getDefaultParameters() {
		Arguments arguments = new Arguments();
		arguments.addArgument(URL_NAME, String.valueOf(URLVALUE_DEFAULT));
		return arguments;
	}

	@Override
	public void setupTest(JavaSamplerContext context) {
		sUrl = context.getParameter(URL_NAME, URLVALUE_DEFAULT);
		if(sUrl.length()==0){
			sUrl="http://www.baidu.com";//假如用户没有设置url,那么就让他访问百度,哈哈。
		}

	}

	@Override
    public SampleResult runTest(JavaSamplerContext context) {

		/*
    	 * SampleResult这个类是用来将测试结果输出到查看结果树中的。
    	 * 并且也是用来控制事务的开始和结束的。
    	 */
        SampleResult results = new SampleResult();
        results.setSampleLabel("测试"+sUrl+"网站访问速度了啊!!");

        try{

			URL url = new URL(sUrl);
			URLConnection conn = url.openConnection();
			InputStream in = conn.getInputStream();

			byte[] buffer = new byte[1024];
			int len;
            //事务开始标记
			results.sampleStart();
			while((len=in.read(buffer))!=-1){
				resultData =  new String(buffer,"UTF-8");//将每次读到的页面返回信息存储到resultData中
				sbResultData.append(resultData);//每读到一次,添加到sb中。

			}
	        in.close();

        }catch (MalformedURLException e) {
			results.setSuccessful(false);
			e.printStackTrace();
		}catch (IOException e) {
			results.setSuccessful(false);
			e.printStackTrace();
		}catch(Exception e){//如果发生异常,则捕捉,并且发送事务失败的消息。
        	results.setSuccessful(false);
        	e.printStackTrace();
        }finally{
        	//标记事务结束
        results.sampleEnd();
        }

        results.setSuccessful(true);
		resultData = sbResultData.toString();//将所有读到的数据转换为字符串
		results.setResponseData(resultData,null);//将数据打印到查看结果树当中
    	results.setDataType(SampleResult.TEXT);
        return results;
    }

}

四、jmeter运行java代码

1、将代码打包成jar

2、把打包成的jar放在\apache-jmeter-2.12\lib\ext路径下

3、打开jmeter GUI,添加线程组,再添加一个java请求,如下图:

4、添加查看结果树,运行后结果如下:

五、补充事项

当我们的代码在运行时发生异常,就会被打印在doc窗口中

我这里没有发生异常,所以没有数据,当发生异常时就会打印在这里。注意观察,有助于调试代码

六、最后的话

  其实由以上的代码可以看出,这一段测试代码其实没有太大的测试意义,就是模拟了一个HTTP请求访问一个网站。

  但是当我们需要进行一段代码的性能测试的时候,这样来进行书写,并且在runTest方法中进行调用后,那么就可以测试出这段代码的性能如何。

  经常总结,互相学习!!

时间: 2024-09-30 16:51:23

jmeter之java代码性能测试的相关文章

jmeter测试java代码

有时候总是要写代码的,不得不说你也得会,这不往下看 java请求了,就的写代码,那么先来实现一个类, package com.company.jemeters; public class Hello { public int sum(int a,int b) { return a+b; } } 实现了一个加法,那么我们去写测试类 这里需要吧jemter 的库添加到lib里面去 package com.company.jemeters; import org.apache.jmeter.confi

jmeter之自定义java请求性能测试

写在前面 最近个人情绪不稳定.心情很不美丽,特别懒,没有博客和技术文章更新,这个文章也是迟到了周多的时间,啰嗦完了,开始正题吧. 我们在实际做性能测试的时候,一般会采用jmeter.Lr进行测试,但是很少有同学用jmeter的测试Java请求,也可以这么说,一般是开发自己搞的多一些. 准备工作 自己编写一个接口(我用springboot随便写了一个,需要的可以加我好友) 新建一个maven工程 pom文件引用ApacheJMeter_core.jar     ApacheJMeter_java.

jmeter 的java请求代码在main方法里面执行

1.新建一个java请求执行加法类 public class TestDemo { public int Tdemo(int a,int b){ int sum = 0; sum = a+b; return sum; } } 2.再建一个jmeter的java请求类 import org.apache.jmeter.config.Arguments; import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;

JMeter在Web Services性能测试中的应用

性能测试是任何分布式或Web应用程序测试计划的重要组成部分.在计划和开发周期中进行性能评价,可以保证交付给客户的应用程序满足客户对于高负 载.可用性和可伸缩性的要求.提前确定软件的负载限制可以为适当地进行系统配置提供帮助,从而避免出现意料之外的故障.系统性能分析中要处理的几个问题 是:系统或服务器能否处理数百个或数千个客户端的同时请求,以及系统可以处理请求的频率.这种类型的测试不但提供了系统响应时间的绝对度量值,而且针对服 务器的回归测试和应用程序代码,检查服务器的响应是否和预期结果相匹配,并为

jmeter添加java请求和if控制器

新项目用jmeter做性能测试,导入别人写好的jar包,发现有if控制器和java请求,可是我看不懂这个脚本到底在干嘛,只好自己摸索. java请求要自己写一个runable的jar包,继承jmeter的AbstractJavaSamplerContext类,然后改写runtest方法.具体代码如下. 步骤如下: 1. 打开eclipse,把代码写好,并export为runnable jar file (切记,jar file在jmeter里是找不到的) 默认导入代码会找不到命名空间,记得要在属

使用Jmeter测试java请求

1.性能测试过程中,有时候开发想对JAVA代码进行性能测试,Jmeter是支持对Java请求进行性能测试,但是需要自己开发.打包好要测试的代码,就能在Java请求中对该java方法进行性能测试2.本文举的例子是Java实现通过传入两个参数,将值写入到文件中 开发思路1.使用Eclipse创建Maven 项目,配置Pom文件,引入Jmeter开发Java请求所需的依赖包:2.创建输入参数类,和测试类,然后继承JavaSamplerClient,实现四个主方法:3.对编写好的项目进行编译.打包4.把

JMeter学习(十七)JMeter测试Java

目的:对Java程序进行测试: 一.核心步骤1.创建一个Java工程:2.将JMeter的lib目录下的jar文件添加进此工程的Build Path:3.创建一个类并实现JavaSamplerClient接口或继承AbstractJavaSamplerClient,并重写: public Arguments getDefaultParameters();设置可用参数及的默认值: public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,

JMeter远程分布式联机性能测试

测试环境 apache-jmeter-2.13 Java JDK版本:1.8 1.  JMeter分布式测试简介 当一个JMeter客户端因网络限制等因素,无法模拟足够的用户对服务器施压时,需要用到JMeter分布式测试:用一台控制机,控制多台远程负载机,同时对服务器施压. 2.  配置与实操 步骤1 选定客户端 选择一台本地机器,当作JMeter客户端(控制器),用于控制远程JMeter实例(也叫JMeter 引擎),即远程负载生成机,并收集来自从这些远程负载机的数据. 在本机上创建并调试脚本

不使用spring的情况下原生java代码两种方式操作mongodb数据库

由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置文件的密码,而实际上这个密码在代码中根本就没有使用,他们在代码中已经把用户验证信息写死.   在协助他们解决这个问题的时候,我看到他们代码中在和mongodb数据库交互时使用了已经不被建议使用的方法,于是便抽时间尝试了一下另一种被建议的方式实现各功能.   当然了,生产环境中用的是mongodb集群