51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1387|回复: 2
打印 上一主题 下一主题

JMeter测试Java

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-4-16 11:50:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目的:对Java程序进行测试



目录

一、核心步骤

二、实例

三、JMeter Java Sampler介绍

四、自带Java Request Sampler




一、核心步骤

1.创建一个Java工程;

2.将JMeter的lib目录下的jar文件添加进此工程的Build Path;

3.创建一个类并实现JavaSamplerClient接口或继承AbstractJavaSamplerClient,并重写;

public Arguments getDefaultParameters();设置可用参数及的默认值;
public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做一些初始化工作;
public SampleResult runTest(JavaSamplerContext arg0):开始测试,从arg0参数可以获得参数值;
public void teardownTest(JavaSamplerContext arg0):测试结束时调用;
4.Export为Runnable Jar File;

5.将此jar包放入JMETER_HOME\lib\ext目录;

6.以管理员身份打开JMeter;

7.创建线程组、Java Request、查看结果树,进行测试;



二、实例

1.在eclipse里面新建一个工程:JavaForJMeter

2.把{Jmeter_home}\lib目录下的所有jar添加进此工程的Build Path;

3.添加类Hello,代码如下:

复制代码
  1. package com.test.webservice;

  2. public class Hello {
  3.     public String sayHello()
  4.     {
  5.         return "Hello";
  6.     }
  7.     public String sayHelloToPerson(String s)
  8.     {
  9.         if(s == null || s.equals(""))
  10.             s = "nobody";
  11.         return (new StringBuilder()).append("Hello ").append(s).toString();
  12.     }
  13.     public int sum(int a,int b)
  14.     {
  15.         return a+b;
  16.     }
  17. }
复制代码

复制代码
4.添加类perftest,并继承AbstractJavaSamplerClient,并添加代码如下:

注意:System.out等的输出会显示在启动JMeter时的命令窗口内,但过多的输出会影响性能的准确性。

复制代码
  1. package com.test.webservice;

  2. import org.apache.jmeter.config.Arguments;
  3. import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
  4. import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
  5. import org.apache.jmeter.samplers.SampleResult;
  6. import com.test.webservice.Hello;

  7. public class perftest extends AbstractJavaSamplerClient {
  8.     private String a;
  9.     private String b;
  10.     /** Holds the result data (shown as Response Data in the Tree display). */
  11.     private String resultData;

  12.     // 这个方法是用来自定义java方法入参的。
  13.     // params.addArgument("num1","");表示入参名字叫num1,默认值为空。
  14.     //设置可用参数及的默认值;
  15.     public Arguments getDefaultParameters() {
  16.         Arguments params = new Arguments();
  17.         params.addArgument("num1", "");
  18.         params.addArgument("num2", "");
  19.         return params;
  20.     }

  21.     //每个线程测试前执行一次,做一些初始化工作;
  22.     public void setupTest(JavaSamplerContext arg0) {
  23.     }

  24.     //开始测试,从arg0参数可以获得参数值;
  25.     public SampleResult runTest(JavaSamplerContext arg0) {
  26.         a = arg0.getParameter("num1");
  27.         b = arg0.getParameter("num2");
  28.         SampleResult sr = new SampleResult();
  29.      sr.setSampleLabel( "Java请求哦");
  30.         try {
  31.             sr.sampleStart();// jmeter 开始统计响应时间标记
  32.             Hello test = new Hello();
  33.             // 通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。
  34.             resultData = String.valueOf(test.sum(Integer.parseInt(a), Integer
  35.                     .parseInt(b)));
  36.             if (resultData != null && resultData.length() > 0) {
  37.                 sr.setResponseData("结果是:"+resultData, null);
  38.                 sr.setDataType(SampleResult.TEXT);
  39.             }
  40.             // System.out.println(resultData);
  41.             sr.setSuccessful(true);
  42.         } catch (Throwable e) {
  43.             sr.setSuccessful(false);
  44.             e.printStackTrace();
  45.         } finally {
  46.             sr.sampleEnd();// jmeter 结束统计响应时间标记
  47.         }
  48.         return sr;
  49.     }

  50.     //测试结束时调用;
  51.     public void teardownTest(JavaSamplerContext arg0) {
  52.         // System.out.println(end);
  53.         // System.out.println("The cost is"+(end-start)/1000);
  54.     }
  55.    
  56.     // main只是为了调试用,最后打jar包的时候注释掉。
  57.     /*
  58.       public static void main(String[] args)
  59.       { // TODO Auto-generated method stub
  60.           Arguments params = new Arguments();
  61.           params.addArgument("num1", "1");//设置参数,并赋予默认值1
  62.           params.addArgument("num2", "2");//设置参数,并赋予默认值2
  63.           JavaSamplerContext arg0 = new JavaSamplerContext(params);
  64.           perftestbbb test = new perftestbbb();
  65.           test.setupTest(arg0);
  66.           test.runTest(arg0);
  67.           test.teardownTest(arg0);
  68.       }
  69.      */
  70. }
复制代码

复制代码


5.Export为Runnable Jar File:hello.jar

6.将此hello.jar包放入JMETER_HOME\lib\ext目录;

7.打开JMeter,添加线程组,添加Java请求,查看结果树。







三、JMeter Java Sampler介绍

  1. Arguments

  2. getDefaultParameters() 用于获取界面的参数

  3. SampleResult

  4. runTest(JavaSamplerContext context) 类似于LR的Action,result.sampleStart()一个事务开始,result.sampleEnd()一个事务 结束

  5. void

  6. setupTest(JavaSamplerContext context) 初始化方法,类似于LR的init和Junit中的setUp()

  7. void

  8. teardownTest(JavaSamplerContext context) 类似于LR的end和Junit中的tearDown()
复制代码


执行的先后顺序为:
getDefaultParameters() --> setupTest(JavaSamplerContext context) --> runTest(JavaSamplerContext context) --> teardownTest(JavaSamplerContext context)

常用的方法:
①、addArgument("name", "value")    定义参数
②、sampleStart()    定义事务的开始,类似于LR的lr_start_transaction,和LR一样事务间不要放无关代码
③、sampleEnd()    定义事务的结束,类似于LR的lr_end_transaction
④、setSuccessful(true、false)    设置运行结果的成功或失败,Jmeter统计成功失败的次数,在聚合报告中能够体现。


四、自带Java Request Sampler
JMeter默认实现了两个Java Request Sampler:SleepTest Sampler和JavaTest Sampler。

JavaTest Sampler不向服务器发送数据请求,一般被用作调试目的使用。





至此,这已讲解完了。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-6 10:01 , Processed in 0.065019 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表