本周使用jmeter进行一个远程dubbo接口的性能测试,因为没有访问页面,本来开发可以写一个页面,进行http请求的调用,不过已经看到jmeter可以直接对java request进行测试,所以尝试了一下。
记录一下过程,写个demo进行下说明

1、测试脚本的编写
其实这个就是使用jmeter 自己的测试框架,写一个测试用例,实现对被测对象的调用,然后打包即可。
a、引入jmeter框架依赖
使用eclipse的时候,在工程上右键-》properties-》java build path
将jmeter/lib 下的包都进行引入。
b、新建一个测试class JavaTest
c、引入jmeter的框架
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;
d、编写用例
//新建的class必须继承"AbstractJavaSamplerClient"
public class JavaTest extends AbstractJavaSamplerClient {
//定义开始和截止的时间,可以在控制台打印出来时间,看响应情况
    private static long start = 0;
    private static long end = 0;

Param param;

IService<DataModel, Param> service;
//setup 开始
    public void setupTest(JavaSamplerContext arg0) {
        start = System.currentTimeMillis();
       
        try {
          
//try中间是你进行调用的代码           
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }

@SuppressWarnings("unchecked")
    @Override
//jmeter的测试框架
    public SampleResult runTest(JavaSamplerContext arg0) {

SampleResult results = new SampleResult();
       
        try {

results.sampleStart();
          
//对上面方法的调用,jmeter会对sampleStart和sampleEnd之间的行为进行计时,作为响应时间
          
                    
         
            results.sampleEnd();
            results.setSuccessful(true);
        } catch (Throwable e) {
           
            e.printStackTrace();
        }
      
        return results;

}

public void teardownTest(JavaSamplerContext arg0) {
        end = System.currentTimeMillis();
//可以在调试的时候自己打印时间
        System.err.println("cost time:" + (end - start) / 1000);
    }

//在eclipse中自行进行调试,新建一个main函数来完成运行
    public static void main(String[] args) {

JavaSamplerContext arg0 = new JavaSamplerContext(new Arguments());
        PerformenceTest test = new JavaTest();
//这三步可以很清晰的看出框架执行的方式       
        test.setupTest(arg0);
        test.runTest(arg0);
        test.teardownTest(arg0);

}

}

2、jmeter脚本编写
使用jmeter ui客户端,在线程组下添加一个java request,将之前编写的用例放到jmeter的 lib/ext 目录下面,这个时候就可以在类名称下拉菜单中,选择到自己写的用例了。

3、本地和远程调试
在本地调试的时候,将这个脚本依赖到的全部jar包都放到jmeter的 /lib 下面,只有自己实现的测试用例.jar 放到/lib/ext下面,这样jmeter的启动消耗会小一些;放到远程服务上进行压力的时候,和本地环境一样部署即可

写了一个demo,更直观一些
已给被测class为:
public class HelloWorld {

public static int sum = 0;
    public static void sum(int a, int b) {
        sum = a + b;
        // System.out.println(sum);
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        HelloWorld a = new HelloWorld();
        a.sum(1, 2);
    }
}

测试上面这个class的性能,只需要实现一个用例,一直调用他,然后进行结果统计。测试case的实现:
package TestCase;
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;
//import jmeter 的相关外部依赖
import TestCase.HelloWorld;
//import 被测对象

public class PerformenceTest extends AbstractJavaSamplerClient {

private static long start = 0;
    private static long end = 0;

public void setupTest(JavaSamplerContext arg0) {
        start = System.currentTimeMillis();//获取当前系统时间
        // System.out.println(start);
    }

public SampleResult runTest(JavaSamplerContext arg0) {
        SampleResult sr = new SampleResult();
        sr.sampleStart();// jmeter 开始统计响应时间标记
        try {

HelloWorld test = new HelloWorld();
            test.sum(1, 1);
//被测对象调用
        } catch (Throwable e) {
            sr.setSuccessful(false);
        } finally {
            sr.sampleEnd();//jmeter 结束统计响应时间标记
        }
        return sr;
    }

public void teardownTest(JavaSamplerContext arg0) {
        end = System.currentTimeMillis();
        // System.out.println(end);
        // System.out.println("The cost is"+(end-start)/1000);
    }

//测试本地调试
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JavaSamplerContext arg0 = new JavaSamplerContext(new Arguments());
        PerformenceTest test = new PerformenceTest();
        test.setupTest(arg0);
        test.runTest(arg0);
        test.teardownTest(arg0);
    }

}

有了上面的case,打包将jar放到jmeter/lib/ext中,可以在新建的jmeter脚本中获取测试方法,然后配置并发和启动延时,就可以了

【转】jmeter 进行java request测试的更多相关文章

  1. jmeter之Java request报错:java.lang.NoClassDefFoundError: redis/clients/jedis/Jedis

    今天在学习Jmeter的java request,请求内容是连接redis并获取其中的一个字段值.结果在运行时报如下错误: 2018/05/24 13:08:20 ERROR - jmeter.thr ...

  2. 转:JMeter进行Java 请求测试

    本文转自:http://blog.csdn.net/xiazdong/article/details/7873767 向原作者致敬,看了他的文章才让我顺利解决了JMeter测试中的问题,万分感谢! 目 ...

  3. Jmeter 执行java脚本结束时提示:he JVM should have exitted but did not

    使用jmeter执行java协议测试结束时会提示:he JVM should have exitted but did not ,jmeter2.11以后的可以 通过设置:      jmeteren ...

  4. JMeter入门(4):Java Request实例

    目的:对Java程序进行测试: 一.核心步骤 1.创建一个Java工程: 2.将JMeter的lib目录下的jar文件添加进此工程的Build Path: 3.创建一个类并实现JavaSamplerC ...

  5. Jmeter性能测试之进阶Java request的使用

    在IDE中引用Jmeter的安装目录lib/ext中两个文件ApacheJMeter_core.jar和ApacheJMeter_java.jar Java request的类需要继承Abstract ...

  6. JMeter入门:Java Request实例 (转)

    转自:http://blog.csdn.net/czp11210/article/details/26174969 目的:对Java程序进行测试:   一.核心步骤   1.创建一个Java工程: 2 ...

  7. JMeter 压测基础(四)——Java工程测试

    JMeter Java工程测试 1.eclipse中新建工程 2.导入需要的jar包 从JMeter安装目录lib/ext中两个jar包buildPath到Java project中,分别是“Apac ...

  8. 自定义编写jmeter的Java测试代码

    我们在做性能测试时,有时需要自己编写测试脚本,很多测试工具都支持自定义编写测试脚本,比如LoadRunner就有很多自定义脚本的协议,比如"C Vuser","JavaV ...

  9. JMETER通过java代码通过代码/ JMETER API实现示例进行负载测试

    本教程试图解释Jmeter的基本设计,功能和用法,Jmeter是用于在应用程序上执行负载测试的优秀工具.通过使用jmeter GUI,我们可以根据我们的要求为请求创建测试样本并执行具有多个用户负载的样 ...

随机推荐

  1. (剑指Offer)面试题33:把数组排成最小的数

    题目: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 思路: 1.全 ...

  2. php网站的定时事件

    提示信息: 1.crontab    (脚本定时.) 2. php    XXX.php(注:xxx.php页面是具体要做的事情.)

  3. 剖析SSH核心原理(一)

      在我前面的文章中,也试图总结过SSH,见 http://blog.csdn.net/shan9liang/article/details/8803989 ,随着知识的积累,总感觉以前说得比较笼统, ...

  4. Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE]

    在Android studio中想要运行程序,点击运行后程序安装失败,报出如下异常: 原因:在manifest中设置了 .android:sharedUserId="android.uid. ...

  5. C# 实现对网站数据的采集和抓取

    首先大家需要清楚一点的是:任何网站的页面,无论是php.jsp.aspx这些动态页面还是用后台程序生成的静态页面都是可以在浏览器中查看其HTML源文件的. 所以当你要开发数据采集程序的时候,你必须先对 ...

  6. SGU 538. Emoticons 水题

    538. Emoticons 题目连接: http://acm.sgu.ru/problem.php?contest=0&problem=538 Description A berland n ...

  7. Codeforces Round #306 (Div. 2) D. Regular Bridge 构造

    D. Regular Bridge Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/550/pro ...

  8. java整理软件--- Java OCR 图像智能字符识别技术,可识别中文,但是验证码不可以识别...已测识别中文效果很好

    国内最专业的OCR软件只有2家,清华TH-OCR和汉王OCR,看了很多的OCR技术 发现好多对英文与数字的支持都很好,可惜很多都不支持中文字符.Asprise-OCR,Tesseract 3.0以前的 ...

  9. Codeforces #250 (Div. 2) C.The Child and Toy

    之前一直想着建图...遍历 可是推例子都不正确 后来看数据好像看出了点规律 就抱着试一试的心态水了一下 就....过了..... 后来想想我的思路还是对的 先抽象当前仅仅有两个点相连 想要拆分耗费最小 ...

  10. cocos2d-x学习之自动内存管理

    一.自动内存管理 1)概述 C++语言默认是没有提供自动内存管理的.使用者需要自己分配,自己释放.在cocos2d-x里提供了一个自动内存管理的方案.主要是通过CCObject来提供的,用户只要继承了 ...