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,然 ...
一周排行
  • 腾讯面试小结
    一面 一面是第一天的早上九点,记得那天很早就起床了,和同学一起去的酒店,本以为我们已经算来 ...
  •     在Linux系统中,其关机命令就多达六种.分别有shutdown.reboot.halt.poweroff.telinit.init等命令.虽然有些命令相互之间是父子的关系,但是至少可以说明Linux系统关机 ...
  • 利用冗余实现企业局域网的高可用性
    利用冗余实现企业局域网的高可用性一.基础知识:随着Internet的迅猛发展,基于网络的应 ...
  • 虚拟机ping不通主机,但是主机可以ping通虚拟机
    我在Windows7系统安装了虚拟机,通过虚拟机安装了Ubuntu13.04,我设置的主机 ...
  • <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head>    <meta htt ...
  • 今天查看resin4的基于域名的虚拟主机配置,突然发现官方文档的动态虚拟主机字眼,哎,以前还真没注意过还有动态虚拟主机呢,寡闻了啊,学无止境.apache也有它的动态虚拟主机.
  • Here we share to you T-Mobile G1 tips and tricks, how to install apk file. How to install non market apk app ...
  •         open命令的工作类似于模拟鼠标点击对应的程序或者文件,他可以打开文件.程序.url.目录等.用法:        1.打开qq,                open -a qq          ...
  • WindowsServer笔记三:windowsservercore2
       在windows server core中也提供了一些图形界面,其中我们不得不说一下 ...
  • [TT中国原创]VMware如何在日益拥挤的虚拟化领域进行竞争?VMware产品营销高级总监Bogomil Balkansky在接受TechTarget的采访中表示,虚拟架构的成熟性和稳定性是VMwre的竞争优势.B ...