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,然 ...
一周排行
  • Exchange2010跨林迁移邮箱4
    4. 检查域和林功能级别test.com和contos.com域和林功能级别均设置为Win ...
  • 渗透测试工具Pentoo i686 2009.0 beta下载地址:ftp://mirror.switch.ch/mirror/pentoo/pentoo-i009.0_beta.isohttp://mir ...
  • linux下使用googleAuthenticator加强ssh及自建堡垒机
    本文转载自大神博客:     linux下自建ssh堡垒机:http://www.361w ...
  •  防火墙最重要的任务就是规划出: 1.切割被信任(如子域)与不被信任(如internet)的网段.2.划分出可提供Internet的服务与必须受保护的服务.3.分析出可接受与不可接受的封包状态. linux系统上防火 ...
  • SQL连接出错error:40
     今天准备做数据库迁移,打开SQL Server 2008 的 SQL Server Ma ...
  • (a=b)/2这种方式求平均数时,假如两个数过大的话极易发生溢出现象,所以我们采用以下方法方法一:利用avg=num1-(num1-num2)/2的方式代码如下:#include<stdio.h> #in ...
  •   微软在Windows 2000和Windows XP中,提供了故障恢复控制台.它是微软推出的一种全新的控制模式,用于在安全模式和其他启动选项不起作用时修复系统.      故障恢复控制台的作用:可以启用或禁用服务 ...
  • 过去几年中,我们一直在使用.构建和宣传消息队列,我们认为它们是很令人敬畏的,这也不是什么秘密.我们相信对任何架构或应用来说,消息队列都是一个至关重要的组件,下面是十个理由:1. 解耦在项目启动之初来预测将来项目会碰到 ...
  • 安装VSFTP非常简单,我就不说了.关键是/etc/vsftpd/vsftpd.conf文件的搭建配置 [root@fyb-efwgd7iyaq1 txts]# cat /etc/vsftpd/vsftpd.conf ...
  • ActiveDirectory系列教程之组策略应用周期
    今天跟大家一起来学习一下,Active Directory系列教程之组策略应用周期,继续我 ...