JMeter学习十八JMeter测试Java二

实例:

服务为:将输入的两个参数通过IO存入文件;

1、打开MyEclipse,编写Java代码
服务:
package test;

import java.io.File;
import java.io.PrintWriter;

public class OutputService {
    public static void output(String filename, int a, int b) throws Exception {
        PrintWriter out = new PrintWriter(new File(filename));
        out.write(a + ":" + b);
        out.close();
    }
}

测试类:

package test;

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;

//服务为:将输入的两个参数通过IO存入文件;
public class PerformenceTest implements JavaSamplerClient {
    private SampleResult results;
    private String a;
    private String b;
    private String filename;

    // 设置传入的参数,可以设置多个,已设置的参数会显示到Jmeter的参数列表中
    public Arguments getDefaultParameters() {
        Arguments params = new Arguments();
        params.addArgument("filename", "0");// 设置参数,并赋予默认值0
        params.addArgument("a", "0");// 设置参数,并赋予默认值0
        params.addArgument("b", "0");// 设置参数,并赋予默认值0
        return params;
    }

    // 初始化方法,实际运行时每个线程仅执行一次,在测试方法运行前执行
    public void setupTest(JavaSamplerContext arg0) {
        results = new SampleResult();
    }

    // 测试执行的循环体,根据线程数和循环次数的不同可执行多次
    public SampleResult runTest(JavaSamplerContext arg0) {
        b = arg0.getParameter("b"); // 获取在Jmeter中设置的参数值
        a = arg0.getParameter("a"); // 获取在Jmeter中设置的参数值
        filename = arg0.getParameter("filename"); // 获取在Jmeter中设置的参数值
        results.sampleStart();// jmeter 开始统计响应时间标记
        try {
            OutputService test = new OutputService();
            test.output(filename, Integer.parseInt(a), Integer.parseInt(b));
            results.setSuccessful(true);
            // 被测对象调用
        } catch (Throwable e) {
            results.setSuccessful(false);
            e.printStackTrace();
        } finally {
            results.sampleEnd();// jmeter 结束统计响应时间标记
        }
        return results;
    }

    // 结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行
    public void teardownTest(JavaSamplerContext arg0) {
    }

    /*
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Arguments params = new Arguments();
        params.addArgument("a", "0");// 设置参数,并赋予默认值0
        params.addArgument("b", "0");// 设置参数,并赋予默认值0
        params.addArgument("filename","abc.txt");
        JavaSamplerContext arg0 = new JavaSamplerContext(params);
        PerformenceTest test = new PerformenceTest();
        test.setupTest(arg0);
        test.runTest(arg0);
        test.teardownTest(arg0);
    }
    */
}

生成jar包,放在JMeter_HOME/lib/ext目录下。

2、设置JMeter
以管理员身份打开JMeter,并创建Java Request后,结构如下图所示:
JMeter学习十八JMeter测试Java二
在Java请求中发现了自己新建的测试类:
JMeter学习十八JMeter测试Java二
我们在JMeter中发现参数有三个:
JMeter学习十八JMeter测试Java二
在这里我们使用到了两个函数:
(1)_Random生成随机整数;
(2)_RandomString生成随机字符串;
在线程组中设置并发线程数为5,保存后即可运行;
JMeter学习十八JMeter测试Java二
聚合报告:
JMeter学习十八JMeter测试Java二

结果成功,成功生成了5个文件:

JMeter学习十八JMeter测试Java二

3、遇到的问题

3.1 Export为Jar File导致Java Request的类名称无法找到;
3.2 JMeter java.lang.OutOfMemoryError: PermGen space问题:
在JMeter.bat 中修改:
set HEAP=-Xms512m -Xmx1024m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m
set SURVIVOR=-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50%
set TENURING=-XX:MaxTenuringThreshold=2
set RMIGC=-Dsun.rmi.dgc.client.gcInterval=600000 -Dsun.rmi.dgc.server.gcInterval=600000
set PERM=-XX:PermSize=256m -XX:MaxPermSize=512m
3.3 JMeter需要以管理员身份打开,否则会出现:
JMeter学习十八JMeter测试Java二
更多相关文章
  • JMeter学习十九JMeter测试MongoDB
    JMeter测试MongoDB性能有两种方式,一种是利用JMeter直接进行测试MongoDB,还有一种是写Java代码方式测试MongoDB性能. 第一种方法 1.编写Java代码,内容如下: package com.test.mongodb; import java.io.File; impor ...
  • JMeter学习十四JMeter监控Tomcat性能
    使用jmeter的tomcat监视器功能,可以通过向tomcat的status页面发送get请求,得到资源使用信息,然后转换为只直观的图像方式,这样的话,就可以监视到服务器的资源使用情况,不过需要注意的是,要使用tomcat监视器功能,就必须在要监视的服务器上装有tomcat. 一.  配置$CAT ...
  • 在我们学习spring之前,根据spring的特性,我们来自己来模拟一个spring出来,也就是说不利用spring来实现spring的效果.本实例主要是实现spring的IOC功能.点击下载源码:用力点首先我们把我们用的dao.service.entity定义出来:Student.java :pa ...
  • 二叉树的三种递归遍历: StudentNode root = root.setName("Name1" StudentNode node2 = node2.setName("Name2" StudentNode node3 = node3.setName(&q ...
  •                                     路由映射实战二本篇博文和上一篇是紧密结合的,只是在上个试验的基础上作了改动,达到其他的试验效果. 试验二:在R1上增加一个网段,并发布路由.这里采用三种方法.如下是第一种,是在试验一的基础上直接增加一个网段,发布路由. A(co ...
  • 什么是Unicode(统一码)? Unicode给每个字符提供了一个唯一的数字, 不论是什么平台, 不论是什么程序, 不论是什么语言. 基本上,计算机只是处理数字.它们指定一个数字,来储存字母或其他字符.在创造Unicode之前,有数百种指定这些数字的编码系统.没有一个编码可以包含足够的字符:例如, ...
  • 白话学习MVC(八)Action的执行二
    ) ?; i < aliasedMethods.Length; i++; i < attributeCount; i++; i < attributeCount; i++; i >= ; i-- <; i < providers.Length; i++; i &g ...
  • Win2008学习十八,ADRMS保护office文档
    在上一篇博文中我们成功的部署的AD RMS服务,那么在本篇博文中我们将通过AD RMS服务来保护我们的office文档,下面我演示保护word,当然我们也可以保护ppt,excel,outlook等. 网络拓扑如下图 实验目标:win701上安装了office2010用户Mark创建一个Word,然 ...
一周排行
  • 解决zabbix图中出现中文乱码问题
    我这周部署了zabbix监控服务器,但是配置过程中发现当有中文时,图中的中文会变成方块如下 ...
  • PDF中添加文本框签名修改文字图章
    PDF中添加图章 PDF中添加文本方法I(不推荐): 1. 工具 -> 注释和标记 ...
  • 同样的代码:public class TestBatch {   public static void main(String[] args) throws SQLException, ClassNotFoundEx ...
  • 2009年3月2日,我正式入职51CTO成为开发频道的一名编辑.从eNet到51CTO,跨度转变是巨大的,之前负责的内容比现在要浅一些,初到一个技术型网站,各种迷茫各种知识盲点一直困扰着我.就算是在一年半后的今天,我 ...
  • 慢查询日志用来优化Query语句,以下是有关的几个参数,5.5版本以后可以到微秒(μs)新版本中还有long_query_io(读取次数) log_queries_not_using_indexes(没有使用索引的S ...
  • 操作系统版本:RHEL 6.1 64位cat /etc/redhat-release FTP服务器 vsftpd-2.2..el6_0.1.x86_64rpm -q vsftpd 由于上传方式的不同,总是存在中 ...
  • 当每次上传文件时,都可以在Tomcat的控制台看见如下所示的输出信息:INFO (org.apache.Struts 2.dispatcher.Dispatcher:624) - Unable to find 'st ...
  • Pretty Login是由chnable开发的一个美化小工具,用来辅助修改Widnows 7登陆界面的背景图片,除此之外,它也能定制欢迎界面上的文本.按钮样式,如设置阴影.半透明效果.由于Windows 7限制登录 ...
  • http://sporto.github.io/blog/2012/12/09/callbacks-listeners-promises/ 或 http://www.ruanyifeng.com/blog/2012/ ...
  • 这里普及一下WebService和cxf的知识.关于webservice和cxf: WebService.各种提供服务的组件     .企业总线.通讯总线(ESB)CXF:是一个SOA框架,Axis和XFire是原生 ...