Jmeter测试java请求的代码问题,求教
初学,照着网上抄了个例子:服务类:
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方法进行调试呢?是要导入什么包吗??代码并没有报错呀。
概念弄混了,你test的那部分是junit的,需要在junit的代码上邮件 run as执行,junit的class是独立的,不能被main调用。你要尝试用jmeter测试java请求,用我昨天给你的那个连接里写的办法。 gaha 发表于 2015-11-16 17:17
概念弄混了,你test的那部分是junit的,需要在junit的代码上邮件 run as执行,junit的class是独立的,不能 ...
好的,我看看,谢谢 gaha 发表于 2015-11-16 17:17
概念弄混了,你test的那部分是junit的,需要在junit的代码上邮件 run as执行,junit的class是独立的,不能 ...
在eclipse里写了一个java方法来调用一个POST接口,类似上面的,打包后在jmeter中添加java请求,执行后,得到了响应数据,而且响应数据也正确了(除了中文显示为乱码)。但是jmeter显示的执行状态是警告,聚合报告中的请求失败率为100%,这是什么情况呢??是因为乱码的影响吗? fireatice 发表于 2015-11-16 18:00
在eclipse里写了一个java方法来调用一个POST接口,类似上面的,打包后在jmeter中添加java请求,执行后, ...
需要具体看警告的内容,实验的话先用字母吧,获取响应需要过滤器处理编码问题,以后再考虑解决,先把业务调通。 gaha 发表于 2015-11-16 21:30
需要具体看警告的内容,实验的话先用字母吧,获取响应需要过滤器处理编码问题,以后再考虑解决,先把业务 ...
是个实际的系统接口,请求响应的数据也是对的,就只有中文乱码了,没有报错,就是聚合报告显示请求失败。
fireatice 发表于 2015-11-17 10:54
是个实际的系统接口,请求响应的数据也是对的,就只有中文乱码了,没有报错,就是聚合报告显示请求失败。 ...
我觉得,看不到业务流和所有的错误提示,还是不好判断。先用一个简单的class测试一下使用方法,然后把你这个获取一个没有中文编码的class。
因为jmeter直接压class,不经过过滤器,所以有编码不一致的问题不好说。 gaha 发表于 2015-11-17 11:10
我觉得,看不到业务流和所有的错误提示,还是不好判断。先用一个简单的class测试一下使用方法,然后把你 ...
请求的响应数据只有中文乱码算不正确,其他完全是正确了的,这应该说明请求发送到了接口并且也获得了正确的响应,但为啥聚合报告还显示请求失败呢?莫非就是因为乱码的问题??我也没加断言啊。 …… 方法已经调通了,你只贴一个响应信息,没有请求状态,怎么知道是提示的什么错误或警告的什么内容啊……你先用简单的尝试,只告诉你在jmeter里压class的方法,这个方法成功了,具体验证出什么结果,就是你的业务内容了。明白否? 写了一个简单的方法,返回两个整数相加的和,利用jmeter的java请求可以成功。图中中间那个java请求就是。
另外,将同一个接口,直接使用http请求进行测试是可以成功的,如图正常数据,而用java请求去测那个接口的时候,取样器结果中没有获取到response信息,莫非是因为这个才提示请求失败的?jmeter并没有错误信息与警告内容。就只是一个叹号。 fireatice 发表于 2015-11-17 14:05
写了一个简单的方法,返回两个整数相加的和,利用jmeter的java请求可以成功。图中中间那个java请求就是。
...
如果两个访问的目标不是一个的话(我想应该不是一个),问题是出在了ajax的那个状态页了。
ajax在实现的时候实际是异步返回了一个页面上的一段内容,出错的那个ajax状态页是GBK编码,正确的那个是UTF-8。
按你的接口地址,打开那个页面,你可以看源代码,看看是不是两个不一样,具体ajax可以再问问你们开发。 gaha 发表于 2015-11-17 19:47
如果两个访问的目标不是一个的话(我想应该不是一个),问题是出在了ajax的那个状态页了。
ajax在实现的 ...
没进展了,完全一样的接口,一样的参数,理应是一样的。能通一个就先用一个吧。感谢回复。 fireatice 发表于 2015-11-19 09:57
没进展了,完全一样的接口,一样的参数,理应是一样的。能通一个就先用一个吧。感谢回复。
只能靠你自己了,还是要仔细研究,究竟有什么不一样的地方。 嗯。多谢及时回复,后面再慢慢分析了。现在有能测试的方法就先用着。 这个是编写java请求实现javaSampler的标准实现方法,那里用到junit,刚开始就进入别人误区
你用main(),执行没问题,问题在于你少加载了依赖包,你可以把jmeterhome/ lib下所有jar加载到eclipse环境变量中试试
java请求,灵活写法看看这个文章
http://blog.csdn.net/musen518/article/details/50237037
希望对你有帮助
页:
[1]