51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 4700|回复: 16
打印 上一主题 下一主题

Jmeter测试java请求的代码问题,求教

[复制链接]
  • TA的每日心情
    难过
    2015-12-2 11:05
  • 签到天数: 7 天

    连续签到: 2 天

    [LV.3]测试连长

    跳转到指定楼层
    1#
    发表于 2015-11-16 16:46:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    初学,照着网上抄了个例子:
    服务类:
    package com.test.webservice;

    public class Hello {
        public int sum(int a, int b){
            return a + b;
        }

    }


    测试类:
    package com.test.webservice;

    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;

    public class PerfTest extends AbstractJavaSamplerClient {
        private String a;
        private String b;
        private String resultData;
       
        // 这个方法是用来自定义java方法入参的。
        // params.addArgument("num1","");表示入参名字叫num1,默认值为空。
        //设置可用参数及的默认值;
        //已设置的参数会显示到Jmeter的参数列表中
        public Arguments getDefaultParameters(){
            Arguments params = new Arguments();
            params.addArgument("num1","");
            params.addArgument("num2","");
            return params;
        }
       
        //每个线程测试前执行一次,做一些初始化工作;
        public void setupTest(JavaSamplerContext arg0) {
        }
       
        //开始测试,从arg0参数可以获得参数值;
        public SampleResult runTest(JavaSamplerContext arg0){
            a = arg0.getParameter("num1");
            b = arg0.getParameter("num2");
            SampleResult sr = new SampleResult();
            sr.setSampleLabel("Java请求测试!");
            try{
                sr.sampleStart();
                Hello test = new Hello();
                resultData = String.valueOf(test.sum(Integer.parseInt(a), Integer.parseInt(b)));
                if(resultData != null && resultData.length() > 0){
                    sr.setResponseData("结果是:" + resultData, null);
                    sr.setDataType(SampleResult.TEXT);
                }
                System.out.println(resultData);
                sr.setSuccessful(true);
            }catch (Throwable e){
                sr.setSuccessful(false);
                e.printStackTrace();
            }finally{
                sr.sampleEnd();
            }
            return sr;
        }
       
        //测试结束时调用;
        public void teardownTest(JavaSamplerContext arg0) {
            // System.out.println(end);
            // System.out.println("The cost is"+(end-start)/1000);
        }
       
        // main只是为了调试用,最后打jar包的时候注释掉。
       
          public static void main(String[] args)
          { // TODO Auto-generated method stub
              Arguments params = new Arguments();
              params.addArgument("num1", "1");//设置参数,并赋予默认值1
              params.addArgument("num2", "2");//设置参数,并赋予默认值2
              JavaSamplerContext arg0 = new JavaSamplerContext(params);
              PerfTest test = new PerfTest();
              test.setupTest(arg0);
              test.runTest(arg0);
              test.teardownTest(arg0);
          }
         
    }


    当运行main方法进行调试时报错,报错如下:
    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/jorphan/logging/LoggingManager
        at org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient.<clinit>(AbstractJavaSamplerClient.java:55)
    Caused by: java.lang.ClassNotFoundException: org.apache.jorphan.logging.LoggingManager
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 1 more

    请问为啥在eclipse里面不能用main方法进行调试呢?是要导入什么包吗??代码并没有报错呀。


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

    使用道具 举报

    该用户从未签到

    2#
    发表于 2015-11-16 17:17:43 | 只看该作者
    概念弄混了,你test的那部分是junit的,需要在junit的代码上邮件 run as执行,junit的class是独立的,不能被main调用。你要尝试用jmeter测试java请求,用我昨天给你的那个连接里写的办法。

    评分

    参与人数 1测试积点 +10 收起 理由
    lsekfe + 10 恭喜你获得测试积点10

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2015-12-2 11:05
  • 签到天数: 7 天

    连续签到: 2 天

    [LV.3]测试连长

    3#
     楼主| 发表于 2015-11-16 17:48:06 | 只看该作者
    gaha 发表于 2015-11-16 17:17
    概念弄混了,你test的那部分是junit的,需要在junit的代码上邮件 run as执行,junit的class是独立的,不能 ...

    好的,我看看,谢谢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2015-12-2 11:05
  • 签到天数: 7 天

    连续签到: 2 天

    [LV.3]测试连长

    4#
     楼主| 发表于 2015-11-16 18:00:47 | 只看该作者
    gaha 发表于 2015-11-16 17:17
    概念弄混了,你test的那部分是junit的,需要在junit的代码上邮件 run as执行,junit的class是独立的,不能 ...

    在eclipse里写了一个java方法来调用一个POST接口,类似上面的,打包后在jmeter中添加java请求,执行后,得到了响应数据,而且响应数据也正确了(除了中文显示为乱码)。但是jmeter显示的执行状态是警告,聚合报告中的请求失败率为100%,这是什么情况呢??是因为乱码的影响吗?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2015-11-16 21:30:40 | 只看该作者
    fireatice 发表于 2015-11-16 18:00
    在eclipse里写了一个java方法来调用一个POST接口,类似上面的,打包后在jmeter中添加java请求,执行后, ...

    需要具体看警告的内容,实验的话先用字母吧,获取响应需要过滤器处理编码问题,以后再考虑解决,先把业务调通。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2015-12-2 11:05
  • 签到天数: 7 天

    连续签到: 2 天

    [LV.3]测试连长

    6#
     楼主| 发表于 2015-11-17 10:54:47 | 只看该作者
    gaha 发表于 2015-11-16 21:30
    需要具体看警告的内容,实验的话先用字母吧,获取响应需要过滤器处理编码问题,以后再考虑解决,先把业务 ...

    是个实际的系统接口,请求响应的数据也是对的,就只有中文乱码了,没有报错,就是聚合报告显示请求失败。

    本帖子中包含更多资源

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

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
    发表于 2015-11-17 11:10:48 | 只看该作者
    fireatice 发表于 2015-11-17 10:54
    是个实际的系统接口,请求响应的数据也是对的,就只有中文乱码了,没有报错,就是聚合报告显示请求失败。 ...

    我觉得,看不到业务流和所有的错误提示,还是不好判断。先用一个简单的class测试一下使用方法,然后把你这个获取一个没有中文编码的class。
    因为jmeter直接压class,不经过过滤器,所以有编码不一致的问题不好说。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2015-12-2 11:05
  • 签到天数: 7 天

    连续签到: 2 天

    [LV.3]测试连长

    8#
     楼主| 发表于 2015-11-17 11:42:12 | 只看该作者
    gaha 发表于 2015-11-17 11:10
    我觉得,看不到业务流和所有的错误提示,还是不好判断。先用一个简单的class测试一下使用方法,然后把你 ...

    请求的响应数据只有中文乱码算不正确,其他完全是正确了的,这应该说明请求发送到了接口并且也获得了正确的响应,但为啥聚合报告还显示请求失败呢?莫非就是因为乱码的问题??我也没加断言啊。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2015-11-17 11:45:09 | 只看该作者
    …… 方法已经调通了,你只贴一个响应信息,没有请求状态,怎么知道是提示的什么错误或警告的什么内容啊……你先用简单的尝试,只告诉你在jmeter里压class的方法,这个方法成功了,具体验证出什么结果,就是你的业务内容了。明白否?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2015-12-2 11:05
  • 签到天数: 7 天

    连续签到: 2 天

    [LV.3]测试连长

    10#
     楼主| 发表于 2015-11-17 14:05:24 | 只看该作者
    写了一个简单的方法,返回两个整数相加的和,利用jmeter的java请求可以成功。图中中间那个java请求就是。

    另外,将同一个接口,直接使用http请求进行测试是可以成功的,如图正常数据,而用java请求去测那个接口的时候,取样器结果中没有获取到response信息,莫非是因为这个才提示请求失败的?jmeter并没有错误信息与警告内容。就只是一个叹号。

    本帖子中包含更多资源

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

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
    发表于 2015-11-17 19:47:31 | 只看该作者
    fireatice 发表于 2015-11-17 14:05
    写了一个简单的方法,返回两个整数相加的和,利用jmeter的java请求可以成功。图中中间那个java请求就是。
    ...

    如果两个访问的目标不是一个的话(我想应该不是一个),问题是出在了ajax的那个状态页了。
    ajax在实现的时候实际是异步返回了一个页面上的一段内容,出错的那个ajax状态页是GBK编码,正确的那个是UTF-8。
    按你的接口地址,打开那个页面,你可以看源代码,看看是不是两个不一样,具体ajax可以再问问你们开发。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2015-12-2 11:05
  • 签到天数: 7 天

    连续签到: 2 天

    [LV.3]测试连长

    12#
     楼主| 发表于 2015-11-19 09:57:37 | 只看该作者
    gaha 发表于 2015-11-17 19:47
    如果两个访问的目标不是一个的话(我想应该不是一个),问题是出在了ajax的那个状态页了。
    ajax在实现的 ...

    没进展了,完全一样的接口,一样的参数,理应是一样的。能通一个就先用一个吧。感谢回复。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2015-11-19 10:03:38 | 只看该作者
    fireatice 发表于 2015-11-19 09:57
    没进展了,完全一样的接口,一样的参数,理应是一样的。能通一个就先用一个吧。感谢回复。

    只能靠你自己了,还是要仔细研究,究竟有什么不一样的地方。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2015-12-2 11:05
  • 签到天数: 7 天

    连续签到: 2 天

    [LV.3]测试连长

    14#
     楼主| 发表于 2015-11-19 10:17:23 | 只看该作者
    嗯。多谢及时回复,后面再慢慢分析了。现在有能测试的方法就先用着。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-3-19 21:43
  • 签到天数: 59 天

    连续签到: 1 天

    [LV.5]测试团长

    15#
    发表于 2015-12-26 18:00:28 | 只看该作者
    这个是编写java请求实现javaSampler的标准实现方法,那里用到junit,刚开始就进入别人误区
    你用main(),执行没问题,问题在于你少加载了依赖包,你可以把jmeterhome/ lib下所有jar加载到eclipse环境变量中试试

    java请求,灵活写法看看这个文章
    http://blog.csdn.net/musen518/article/details/50237037

    希望对你有帮助
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-27 06:45 , Processed in 0.081354 second(s), 31 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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