Giter VIP home page Giter VIP logo

jmeter-plugins-for-apache-dubbo's Introduction

Apache JMeter Plugin For Apache Dubbo

Introduce

Dubbo Plugin for Apache JMeter, Its main purpose is to perform stress testing on the Dubbo interface visually in Jmeter. It is easy to use.

Plugin Version Support

  • [1.x,1.3.x]: requires Java 1.7
  • 2.7.x: requires Java 1.8

JMeter Version Support

  • [3.0,3.2): requires Java 1.7
  • [3.2,4.x,5.x]: requires Java 1.8

ps. [3.x,4,x,5.x] Tested for normal use

Dubbo Version Support

  • 2.5.x: requires Java 1.7
  • 2.6.x: requires Java 1.7
  • 2.7.x: requires Java 1.8

User Guide

user guide (English, Chinese)

Changelog && FAQ

changelog && FAQ

jmeter-plugins-for-apache-dubbo's People

Contributors

chakra-coder avatar ningyu1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jmeter-plugins-for-apache-dubbo's Issues

部分泛型无法正确转换

如下形式的泛型参数通过插件请求
public class Request 《T extends Serializable 》 implements Serializable {
private String requestSystem;
private String operator;
private T params;
}
参数如下:
{"operator":"2313131313131","params":{"class": "RefundReqDTO","id":"1231313"},"requestSystem":"23131313131","traceLogId":"23131231313"};

服务端会解析成Request(requestSystem=23131313131, operator=2313131313131, traceLogId=23131231313, params={class=RefundReqDTO, id=1231313})服务端无法正常识别params
正常通过dubbo自带的telnet会解析成
Request(requestSystem=2312313, operator=123, traceLogId=sdasadada, params=RefundReqDTO(id=123131313))

jmeter 4.0 ZooKeeper 连接异常

异常信息:
java.lang.IOException: Packet Len1213480860 out of range

Jmeter版本 4.0
Jmeter-plugins-dubbo: 1.3.3-with-dependencies

请问GUI怎么调试呢?

你好,我下载了你的代码,由于项目的一些特殊需求,要在界面上再添加一些输入框。每次通过编译jar再放到jmeter的ext下面,感觉效率非常慢,也不能进行debug.
请问你是怎么进行界面调试的?

调用dubbo http协议的服务问题

我的dubbo服务改成http协议之后,调用遇到些问题
因为不是dubbo协议所以Server Setting没用dubbo的直连方式
Server Setting使用zookeeper协议
异常信息:
{"detailMessage":null,"stackTrace":[{"declaringClass":"cn.tsoft.framework.testing.jmeter.plugin.dubbo.sample.DubboSample","methodName":"callDubbo","fileName":"DubboSample.java","lineNumber":355},{"declaringClass":"cn.tsoft.framework.testing.jmeter.plugin.dubbo.sample.DubboSample","methodName":"sample","fileName":"DubboSample.java","lineNumber":234},{"declaringClass":"org.apache.jmeter.threads.JMeterThread","methodName":"executeSamplePackage","fileName":"JMeterThread.java","lineNumber":498},{"declaringClass":"org.apache.jmeter.threads.JMeterThread","methodName":"processSampler","fileName":"JMeterThread.java","lineNumber":424},{"declaringClass":"org.apache.jmeter.threads.JMeterThread","methodName":"run","fileName":"JMeterThread.java","lineNumber":255},{"declaringClass":"java.lang.Thread","methodName":"run","fileName":null,"lineNumber":-1}],"suppressedExceptions":[]}

1.3.2版本 直连调用dubbo 报错Failed to invoke remote method: $invoke,

你好,请问我在使用1.3.2版本 直连调用dubbo 报错Failed to invoke remote method: $invoke,
Protocol:none
运行报错如下:

{"code":1,"detailMessage":"Failed to invoke remote method: $invoke, provider: dubbo://xxx.xxx.xxx.xxx:xxxx/com.xxx.xxx.xxx.xxxService?application\u003dDubboSample\u0026async\u003dfalse\u0026cluster\u003dfailfast\u0026connections\u003d1000\u0026dubbo\u003d1.3.2-SNAPSHOT-jar-with-dependencies\u0026generic\u003dtrue\u0026interface\u003dcom.xxx.xxx.activity.IActivityService\u0026loadbalance\u003drandom\u0026pid\u003d10876\u0026register.ip\u003d192.168.0.108\u0026retries\u003d0\u0026side\u003dconsumer\u0026timeout\u003d10000\u0026timestamp\u003d1526829223636\u0026version\u003d1.0.0, cause: com.alibaba.dubbo.remoting.RemotingException: Not found exported service: com.xxx.xxx.activity.IActivityService:1.0.0:6666 in [com.xxx.xxx.activity.IActivityService:6666], may be version or group mismatch , channel: consumer: /192.168.75.11:38212 --\u003e provider: /192.168.85.245:6666, message:RpcInvocation [methodName\u003d$invoke, parameterTypes\u003d[class java.lang.String, class [Ljava.lang.String;, class [Ljava.lang.Object;], arguments\u003d[issueSMS, [Ljava.lang.String;@30d74daa, [Ljava.lang.Object;@72becf3], attachments\u003d{generic\u003dtrue, dubbo\u003d1.3.2-SNAPSHOT-jar-with-dependencies, input\u003d685, path\u003dcom.xxx.xxx.activity.IActivityService, interface\u003dcom.xxx.xxx.activity.IActivityService, timeout\u003d10000, version\u003d1.0.0}]\ncom.alibaba.dubbo.remoting.RemotingException: Not found exported service: com.xxx.xxx.activity.IActivityService:1.0.0:6666 in [com.xxx.xxx.activity.IActivityService:6666], may be version or group mismatch , channel: consumer: /192.168.75.11:38212 --\u003e provider: /192.168.85.245:6666, message:RpcInvocation [methodName\u003d$invoke, parameterTypes\u003d[class java.lang.String, class [Ljava.lang.String;, class [Ljava.lang.Object;], arguments\u003d[issueSMS, [Ljava.lang.String;@30d74daa, [Ljava.lang.Object;@72becf3], attachments\u003d{generic\u003dtrue, dubbo\u003d1.3.2-SNAPSHOT-jar-with-dependencies, input\u003d685, path\u003dcom.xxx.xxx.activity.IActivityService, interface\u003dcom.xxx.xxx.activity.IActivityService, timeout\u003d10000, version\u003d1.0.0}]\n\tat com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol.getInvoker(DubboProtocol.java:217)\n\tat com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:86)\n\tat com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:84)\n\tat com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:170)\n\tat com.alibaba.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:52)\n\tat com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:82)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)\n\tat java.lang.Thread.run(Thread.java:745)\n","cause":{"localAddress":{},"remoteAddress":{},"detailMessage":"com.alibaba.dubbo.remoting.RemotingException: Not found exported service: com.xxx.xxx.activity.IActivityService:1.0.0:6666 in [com.xxx.xxx.activity.IActivityService:6666], may be version or group mismatch , channel: consumer: /192.168.75.11:38212 --\u003e provider: /192.168.85.245:6666, message:RpcInvocation [methodName\u003d$invoke, parameterTypes\u003d[class java.lang.String, class [Ljava.lang.String;, class [Ljava.lang.Object;], arguments\u003d[issueSMS, [Ljava.lang.String;@30d74daa, [Ljava.lang.Object;@72becf3], attachments\u003d{generic\u003dtrue, dubbo\u003d1.3.2-SNAPSHOT-jar-with-dependencies, input\u003d685, path\u003dcom.xxx.xxx.activity.IActivityService, interface\u003dcom.xxx.xxx.activity.IActivityService, timeout\u003d10000, version\u003d1.0.0}]\ncom.alibaba.dubbo.remoting.RemotingException: Not found exported service: com.xxx.xxx.activity.IActivityService:1.0.0:6666 in [com.xxx.xxx.activity.IActivityService:6666], may be version or group mismatch , channel: consumer: /192.168.75.11:38212 --\u003e provider: /192.168.85.245:6666, message:RpcInvocation [methodName\u003d$invoke, parameterTypes\u003d[class java.lang.String, class [Ljava.lang.String;, class [Ljava.lang.Object;], arguments\u003d[issueSMS, [Ljava.lang.String;@30d74daa, [Ljava.lang.Object;@72becf3], attachments\u003d{generic\u003dtrue, dubbo\u003d1.3.2-SNAPSHOT-jar-with-dependencies, input\u003d685, path\u003dcom.xxx.xxx.activity.IActivityService, interface\u003dcom.xxx.xxx.activity.IActivityService, timeout\u003d10000, version\u003d1.0.0}]\n\tat com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol.getInvoker(DubboProtocol.java:217)\n\tat com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:86)\n\tat com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:84)\n\tat com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:170)\n\tat com.alibaba.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:52)\n\tat com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:82)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)\n\tat java.lang.Thread.run(Thread.java:745)\n","stackTrace":[{"declaringClass":"com.alibaba.dubbo.remoting.exchange.support.DefaultFuture","methodName":"returnFromResponse","fileName":"DefaultFuture.java","lineNumber":218},{"declaringClass":"com.alibaba.dubbo.remoting.exchange.support.DefaultFuture","methodName":"get","fileName":"DefaultFuture.java","lineNumber":137},{"declaringClass":"com.alibaba.dubbo.remoting.exchange.support.DefaultFuture","methodName":"get","fileName":"DefaultFuture.java","lineNumber":111},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.dubbo.DubboInvoker","methodName":"doInvoke","fileName":"DubboInvoker.java","lineNumber":95},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.AbstractInvoker","methodName":"invoke","fileName":"AbstractInvoker.java","lineNumber":142},{"declaringClass":"com.alibaba.dubbo.rpc.filter.GenericImplFilter","methodName":"invoke","fileName":"GenericImplFilter.java","lineNumber":172},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1","methodName":"invoke","fileName":"ProtocolFilterWrapper.java","lineNumber":68},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.dubbo.filter.FutureFilter","methodName":"invoke","fileName":"FutureFilter.java","lineNumber":53},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1","methodName":"invoke","fileName":"ProtocolFilterWrapper.java","lineNumber":68},{"declaringClass":"com.alibaba.dubbo.monitor.support.MonitorFilter","methodName":"invoke","fileName":"MonitorFilter.java","lineNumber":74},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1","methodName":"invoke","fileName":"ProtocolFilterWrapper.java","lineNumber":68},{"declaringClass":"com.alibaba.dubbo.rpc.filter.ConsumerContextFilter","methodName":"invoke","fileName":"ConsumerContextFilter.java","lineNumber":47},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1","methodName":"invoke","fileName":"ProtocolFilterWrapper.java","lineNumber":68},{"declaringClass":"com.alibaba.dubbo.rpc.listener.ListenerInvokerWrapper","methodName":"invoke","fileName":"ListenerInvokerWrapper.java","lineNumber":73},{"declaringClass":"com.alibaba.dubbo.rpc.proxy.InvokerInvocationHandler","methodName":"invoke","fileName":"InvokerInvocationHandler.java","lineNumber":51},{"declaringClass":"com.alibaba.dubbo.common.bytecode.proxy5","methodName":"$invoke","fileName":"proxy5.java","lineNumber":-1},{"declaringClass":"cn.tsoft.framework.testing.jmeter.plugin.dubbo.sample.DubboSample","methodName":"callDubbo","fileName":"DubboSample.java","lineNumber":463},{"declaringClass":"cn.tsoft.framework.testing.jmeter.plugin.dubbo.sample.DubboSample","methodName":"sample","fileName":"DubboSample.java","lineNumber":321},{"declaringClass":"org.apache.jmeter.threads.JMeterThread","methodName":"executeSamplePackage","fileName":"JMeterThread.java","lineNumber":475},{"declaringClass":"org.apache.jmeter.threads.JMeterThread","methodName":"processSampler","fileName":"JMeterThread.java","lineNumber":418},{"declaringClass":"org.apache.jmeter.threads.JMeterThread","methodName":"run","fileName":"JMeterThread.java","lineNumber":249},{"declaringClass":"java.lang.Thread","methodName":"run","fileName":"Thread.java","lineNumber":745}],"suppressedExceptions":[]},"stackTrace":[{"declaringClass":"com.alibaba.dubbo.rpc.protocol.dubbo.DubboInvoker","methodName":"doInvoke","fileName":"DubboInvoker.java","lineNumber":100},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.AbstractInvoker","methodName":"invoke","fileName":"AbstractInvoker.java","lineNumber":142},{"declaringClass":"com.alibaba.dubbo.rpc.filter.GenericImplFilter","methodName":"invoke","fileName":"GenericImplFilter.java","lineNumber":172},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1","methodName":"invoke","fileName":"ProtocolFilterWrapper.java","lineNumber":68},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.dubbo.filter.FutureFilter","methodName":"invoke","fileName":"FutureFilter.java","lineNumber":53},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1","methodName":"invoke","fileName":"ProtocolFilterWrapper.java","lineNumber":68},{"declaringClass":"com.alibaba.dubbo.monitor.support.MonitorFilter","methodName":"invoke","fileName":"MonitorFilter.java","lineNumber":74},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1","methodName":"invoke","fileName":"ProtocolFilterWrapper.java","lineNumber":68},{"declaringClass":"com.alibaba.dubbo.rpc.filter.ConsumerContextFilter","methodName":"invoke","fileName":"ConsumerContextFilter.java","lineNumber":47},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1","methodName":"invoke","fileName":"ProtocolFilterWrapper.java","lineNumber":68},{"declaringClass":"com.alibaba.dubbo.rpc.listener.ListenerInvokerWrapper","methodName":"invoke","fileName":"ListenerInvokerWrapper.java","lineNumber":73},{"declaringClass":"com.alibaba.dubbo.rpc.proxy.InvokerInvocationHandler","methodName":"invoke","fileName":"InvokerInvocationHandler.java","lineNumber":51},{"declaringClass":"com.alibaba.dubbo.common.bytecode.proxy5","methodName":"$invoke","fileName":"proxy5.java","lineNumber":-1},{"declaringClass":"cn.tsoft.framework.testing.jmeter.plugin.dubbo.sample.DubboSample","methodName":"callDubbo","fileName":"DubboSample.java","lineNumber":463},{"declaringClass":"cn.tsoft.framework.testing.jmeter.plugin.dubbo.sample.DubboSample","methodName":"sample","fileName":"DubboSample.java","lineNumber":321},{"declaringClass":"org.apache.jmeter.threads.JMeterThread","methodName":"executeSamplePackage","fileName":"JMeterThread.java","lineNumber":475},{"declaringClass":"org.apache.jmeter.threads.JMeterThread","methodName":"processSampler","fileName":"JMeterThread.java","lineNumber":418},{"declaringClass":"org.apache.jmeter.threads.JMeterThread","methodName":"run","fileName":"JMeterThread.java","lineNumber":249},{"declaringClass":"java.lang.Thread","methodName":"run","fileName":"Thread.java","lineNumber":745}],"suppressedExceptions":[]}

请教一个泛型问题

dubbo接口参数使用自定义泛型Generic这种,该插件是否支持?(Wiki中只列出了List和Map泛型)

Parameter security check

  1. Parameter non - null check.
  2. The necessary parameter missing returns the exception information to jmeter.

请问如何传递date类型

new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").parse("9999-12-31 23:59:59") 我想传递这样的数值应该如何处理?

出现日志依赖冲突

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/xxx/Documents/performance/apache-jmeter-3.0/lib/ext/ApacheJMeter_core.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/xxx/Documents/performance/apache-jmeter-3.0/lib/ext/jmeter-plugins-dubbo-1.3.7-jar-with-dependencies.jar!/org/slf4j/impl/StaticLoggerBinder.class]

插件性能这么高?!

这是用咱们插件测试的结果:
image
这是用我们自己的jar包方式测试的结果:
image

同样的接口及参数,差距这么大吗??

还想请教下,直接调zk地址,还有调服务的dubbo地址,从性能上来讲有区别吗?

如何支持Google Protobuf?

我的服务的请求对象是用Google CodeGen生成的,也用的是Google的PB,如果按目前只接受key-value的参数是无法支持Google PB的,是否有计划支持?或者,是否有解决的办法?

返回值中存在乱码

返回值中存在乱码
jmeter显示为:
"commodityName":"?????"

后台日志:
"commodityName":"WMNS BLAZER LOW PRINT"

jmeter3.2/3.3版本命令行执行时不能生成jmeter.log

纯净版的jmeter3.2/3.3,只在lib/ext下放了插件包jmeter-plugins-dubbo-1.3.3-jar-with-dependencies.jar,命令行执行./jmeter.sh -n -t test_next.jmx时,提示DubboShutdownHook WARN Unable to register Log4j shutdown hook because JVM is shutting down.
且jmeter.log为空,见下面截图:
image

正常http协议应该生成jmeter.log日志文件,如下:
image

不知道是否有遇到同样问题的同学

git clone下来后打包,扔到jmeter3.0启动报错

mac系统,idea,jdk1.8,jmeter3.0
打包jmeter-plugins-dubbo-1.3.3-jar-with-dependencies.jar后,扔到jmeter3.0的lib/ext下,不能启动jmeter,报如下错误:
FATAL - jmeter.JMeter: An error occurred: java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classre
ading.AbstractRecursiveAnnotationVisitor has interface org.springframework.asm.AnnotationVisitor as super class
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.jorphan.reflect.ClassFinder.isChildOf(ClassFinder.java:377)
at org.apache.jorphan.reflect.ClassFinder.access$000(ClassFinder.java:47)
at org.apache.jorphan.reflect.ClassFinder$ExtendsClassFilter.accept(ClassFinder.java:92)
at org.apache.jorphan.reflect.ClassFinder.findClassesInOnePath(ClassFinder.java:441)
at org.apache.jorphan.reflect.ClassFinder.findClasses(ClassFinder.java:289)
at org.apache.jorphan.reflect.ClassFinder.findClassesThatExtend(ClassFinder.java:264)
at org.apache.jmeter.gui.action.ActionRouter.populateCommandMap(ActionRouter.java:310)

使用jmeter配置扩展做dubbo全局配置模块

大佬,我用这个插件好久了,从还需要代码jar包,到可以通过dubbo泛化调用直接调用dubbo接口。虽然我下载了,但还没看过插件源码,惭愧。想提优化需求,小小建议。
第一个就是,jmeter有个元件,http默认请求,想问下,您有时间的话,能封装个dubbo默认请求就好了,不然每次需要改IP都得手动一个个改很费时间。
第二个,不知道是不是没做转码,现在的dubbo接口返回的中文都是乱码,这个能改善下就好了
大神,小小建议,没有别的意思哈,希望这个插件的功能越来越完善,用的人越来越多,测dubbo接口真的超级方便,膜拜大佬~

咨询报错

感觉像是序列话问题,请大神帮忙看看。

jmeter报错日志

2018-12-18 17:18:31,010 WARN c.a.d.r.e.c.ExchangeCodec: [DUBBO] Skip input stream 1, dubbo version: 1.3.7-jar-with-dependencies, current host: 192.168.0.1
2018-12-18 17:18:31,010 WARN c.a.d.r.e.c.ExchangeCodec: [DUBBO] Skip input stream 1, dubbo version: 1.3.7-jar-with-dependencies, current host: 192.168.0.1
2018-12-18 17:18:31,010 WARN c.a.d.r.e.c.ExchangeCodec: [DUBBO] Skip input stream 1, dubbo version: 1.3.7-jar-with-dependencies, current host: 192.168.0.1
2018-12-18 17:18:31,010 WARN c.a.d.r.p.d.DubboCodec: [DUBBO] Decode request failed: com/esotericsoftware/kryo/KryoException, dubbo version: 1.3.7-jar-with-dependencies, current host: 192.168.0.1
java.lang.NoClassDefFoundError: com/esotericsoftware/kryo/KryoException
at com.alibaba.dubbo.common.serialize.kryo.KryoSerialization.deserialize(KryoSerialization.java:51) ~[jmeter-plugins-dubbo-1.3.7-jar-with-dependencies.jar:?]
at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec.deserialize(DubboCodec.java:154) ~[jmeter-plugins-dubbo-1.3.7-jar-with-dependencies.jar:?]
at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec.decodeBody(DubboCodec.java:123) [jmeter-plugins-dubbo-1.3.7-jar-with-dependencies.jar:?]
at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:125) [jmeter-plugins-dubbo-1.3.7-jar-with-dependencies.jar:?]
at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:85) [jmeter-plugins-dubbo-1.3.7-jar-with-dependencies.jar:?]
at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCountCodec.decode(DubboCountCodec.java:46) [jmeter-plugins-dubbo-1.3.7-jar-with-dependencies.jar:?]
at com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter$InternalDecoder.messageReceived(NettyCodecAdapter.java:133) [jmeter-plugins-dubbo-1.3.7-jar-with-dependencies.jar:?]
at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80) [jmeter-plugins-dubbo-1.3.7-jar-with-dependencies.jar:?]
at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) [jmeter-plugins-dubbo-1.3.7-jar-with-dependencies.jar:?]
at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559) [jmeter-plugins-dubbo-1.3.7-jar-with-dependencies.jar:?]
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274) [jmeter-plugins-dubbo-1.3.7-jar-with-dependencies.jar:?]
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261) [jmeter-plugins-dubbo-1.3.7-jar-with-dependencies.jar:?]
at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:349) [jmeter-plugins-dubbo-1.3.7-jar-with-dependencies.jar:?]
at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:280) [jmeter-plugins-dubbo-1.3.7-jar-with-dependencies.jar:?]
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:200) [jmeter-plugins-dubbo-1.3.7-jar-with-dependencies.jar:?]
at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) [jmeter-plugins-dubbo-1.3.7-jar-with-dependencies.jar:?]
at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44) [jmeter-plugins-dubbo-1.3.7-jar-with-dependencies.jar:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_121]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_121]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_121]
Caused by: java.lang.ClassNotFoundException: com.esotericsoftware.kryo.KryoException
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_121]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_121]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_121]
... 20 more
2018-12-18 17:18:31,010 WARN c.a.d.r.e.c.ExchangeCodec: [DUBBO] Skip input stream 1, dubbo version: 1.3.7-jar-with-dependencies, current host: 192.168.0.1

dubbo sample之后的请求无法获取到参数化变量

目前有个应用场景,dubbo sample之后的请求,提取的上下文变量没有获取到。流程如下:

  1. 调用http请求,登陆某个接口,根据返回值通过正则提取登陆的:token

  2. 调用dubbo sample这个插件执行其他接口调用。

  3. 获取步骤一的${token},进行接口调用。但是没有获取到token的值。

====> 问题在于:由于步骤2的dubbo sample没有中断,导致${token}变量没有获取。

java.lang.NoClassDefFoundError添加参数后就报错,无法保存,保存时也报错。求助

使用
dubbo-2.5.3.jar
javassist-3.15.0-GA.jar
zookeeper-3.4.6.jar
zkclient-0.1.jar
jline-0.9.94.jar
netty-3.7.0-Final.jar
slf4j-api-1.7.5.jar
log4j-over-slf4j-1.7.5.jar
及jmeter-plugins-dubbo-1.3.2-SNAPSHOT.jar版本以上
报错内容Uncaught Exception java.lang.NoClassDefFoundError: org/springframework/util/StringUtils. See log file for details.
error
error1

使用jmeter-plugins-dubbo-${version}-jar-with-dependencies.jar的不会。

强烈感谢

我们公司现在测试Dubbo服务,也是封装的javaSample.
正在考虑怎么进一步优化,无意间看到你的项目,瞬间觉得世界美好了!
特别感谢,希望该项目能长期维护下去!

group 设置错误

group为:dubbo/TEST
这个样的group,会报参数异常
查看源码,group的配置应该放在
case Constants.REGISTRY_ZOOKEEPER:
registry = new RegistryConfig();
registry.setProtocol(Constants.REGISTRY_ZOOKEEPER);
registry.setAddress(getAddress());
String group = getGroup();
registry.setGroup(StringUtils.isBlank(group) ? null : group);

reference.setProtocol(getRpcProtocol().replaceAll("://", ""));
reference.setRegistry(registry);
break;

请教如果传参是ENUM类型如何处理

测试过程中使用到的枚举类代码如下:
public enum SubscribeChannelType {

WE_CHAT(2), MOBILE_APP(5);

private int code;

SubscribeChannelType(int code) {
	this.code = code;
}

public int getCode() {
	return code;
}

public void setValue(int code) {
	this.code = code;
}

public static SubscribeChannelType convert(int value) {
	SubscribeChannelType result = null;
	for (SubscribeChannelType item : SubscribeChannelType.values()) {
		if (item.getCode() == value) {
			result = item;
			break;
		}
	}
	return result;
}

}

rpc.filter.GenericFilter.invoke

自定义类调用异常

_15289726324669

{"code":1,"detailMessage":"Failed to invoke remote method: $invoke, provider: dubbo://172.17.222.109:7001/com.wonhigh.udc.es.service.WechatQryService?application\u003dDubboSample\u0026async\u003dfalse\u0026cluster\u003dfailfast\u0026connections\u003d100\u0026dubbo\u003d1.3.2-SNAPSHOT-jar-with-dependencies\u0026generic\u003dtrue\u0026interface\u003dcom.wonhigh.udc.es.service.WechatQryService\u0026loadbalance\u003drandom\u0026pid\u003d11980\u0026register.ip\u003d172.17.232.32\u0026retries\u003d0\u0026side\u003dconsumer\u0026timeout\u003d10000\u0026timestamp\u003d1528970537174\u0026version\u003d1.0.0, cause: com.alibaba.dubbo.rpc.RpcException: com.wonhigh.udc.es.service.WechatQryService.qryWechats(java.lang.String, com.wonhigh.udc.es.dto.PageDto)\r\ncom.alibaba.dubbo.rpc.RpcException: com.wonhigh.udc.es.service.WechatQryService.qryWechats(java.lang.String, com.wonhigh.udc.es.dto.PageDto)\r\n\tat com.alibaba.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:107)\r\n\tat com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)\r\n\tat com.alibaba.dubbo.rpc.filter.ClassLoaderFilter.invoke(ClassLoaderFilter.java:38)\r\n\tat com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)\r\n\tat com.alibaba.dubbo.rpc.filter.EchoFilter.invoke(EchoFilter.java:38)\r\n\tat com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)\r\n\tat com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:108)\r\n\tat com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:84)\r\n\tat com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:170)\r\n\tat com.alibaba.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:52)\r\n\tat com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:82)\r\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n\tat java.lang.Thread.run(Thread.java:748)\r\nCaused by: java.lang.NoSuchMethodException: com.wonhigh.udc.es.service.WechatQryService.qryWechats(java.lang.String, com.wonhigh.udc.es.dto.PageDto)\r\n\tat java.lang.Class.getMethod(Class.java:1786)\r\n\tat com.alibaba.dubbo.common.utils.ReflectUtils.findMethodByMethodSignature(ReflectUtils.java:816)\r\n\tat com.alibaba.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:57)\r\n\t... 13 more\r\n","cause":{"localAddress":{},"remoteAddress":{},"detailMessage":"com.alibaba.dubbo.rpc.RpcException: com.wonhigh.udc.es.service.WechatQryService.qryWechats(java.lang.String, com.wonhigh.udc.es.dto.PageDto)\r\ncom.alibaba.dubbo.rpc.RpcException: com.wonhigh.udc.es.service.WechatQryService.qryWechats(java.lang.String, com.wonhigh.udc.es.dto.PageDto)\r\n\tat com.alibaba.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:107)\r\n\tat com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)\r\n\tat com.alibaba.dubbo.rpc.filter.ClassLoaderFilter.invoke(ClassLoaderFilter.java:38)\r\n\tat com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)\r\n\tat com.alibaba.dubbo.rpc.filter.EchoFilter.invoke(EchoFilter.java:38)\r\n\tat com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)\r\n\tat com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:108)\r\n\tat com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:84)\r\n\tat com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:170)\r\n\tat com.alibaba.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:52)\r\n\tat com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:82)\r\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n\tat java.lang.Thread.run(Thread.java:748)\r\nCaused by: java.lang.NoSuchMethodException: com.wonhigh.udc.es.service.WechatQryService.qryWechats(java.lang.String, com.wonhigh.udc.es.dto.PageDto)\r\n\tat java.lang.Class.getMethod(Class.java:1786)\r\n\tat com.alibaba.dubbo.common.utils.ReflectUtils.findMethodByMethodSignature(ReflectUtils.java:816)\r\n\tat com.alibaba.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:57)\r\n\t... 13 more\r\n","stackTrace":[{"declaringClass":"com.alibaba.dubbo.remoting.exchange.support.DefaultFuture","methodName":"returnFromResponse","fileName":"DefaultFuture.java","lineNumber":218},{"declaringClass":"com.alibaba.dubbo.remoting.exchange.support.DefaultFuture","methodName":"get","fileName":"DefaultFuture.java","lineNumber":137},{"declaringClass":"com.alibaba.dubbo.remoting.exchange.support.DefaultFuture","methodName":"get","fileName":"DefaultFuture.java","lineNumber":111},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.dubbo.DubboInvoker","methodName":"doInvoke","fileName":"DubboInvoker.java","lineNumber":95},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.AbstractInvoker","methodName":"invoke","fileName":"AbstractInvoker.java","lineNumber":142},{"declaringClass":"com.alibaba.dubbo.rpc.filter.GenericImplFilter","methodName":"invoke","fileName":"GenericImplFilter.java","lineNumber":172},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1","methodName":"invoke","fileName":"ProtocolFilterWrapper.java","lineNumber":68},{"declaringClass":"com.alibaba.dubbo.monitor.support.MonitorFilter","methodName":"invoke","fileName":"MonitorFilter.java","lineNumber":74},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1","methodName":"invoke","fileName":"ProtocolFilterWrapper.java","lineNumber":68},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.dubbo.filter.FutureFilter","methodName":"invoke","fileName":"FutureFilter.java","lineNumber":53},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1","methodName":"invoke","fileName":"ProtocolFilterWrapper.java","lineNumber":68},{"declaringClass":"com.alibaba.dubbo.rpc.filter.ConsumerContextFilter","methodName":"invoke","fileName":"ConsumerContextFilter.java","lineNumber":47},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1","methodName":"invoke","fileName":"ProtocolFilterWrapper.java","lineNumber":68},{"declaringClass":"com.alibaba.dubbo.rpc.listener.ListenerInvokerWrapper","methodName":"invoke","fileName":"ListenerInvokerWrapper.java","lineNumber":73},{"declaringClass":"com.alibaba.dubbo.rpc.proxy.InvokerInvocationHandler","methodName":"invoke","fileName":"InvokerInvocationHandler.java","lineNumber":51},{"declaringClass":"com.alibaba.dubbo.common.bytecode.proxy16","methodName":"$invoke","fileName":"proxy16.java","lineNumber":-1},{"declaringClass":"cn.tsoft.framework.testing.jmeter.plugin.dubbo.sample.DubboSample","methodName":"callDubbo","fileName":"DubboSample.java","lineNumber":463},{"declaringClass":"cn.tsoft.framework.testing.jmeter.plugin.dubbo.sample.DubboSample","methodName":"sample","fileName":"DubboSample.java","lineNumber":321},{"declaringClass":"org.apache.jmeter.threads.JMeterThread","methodName":"executeSamplePackage","fileName":"JMeterThread.java","lineNumber":490},{"declaringClass":"org.apache.jmeter.threads.JMeterThread","methodName":"processSampler","fileName":"JMeterThread.java","lineNumber":416},{"declaringClass":"org.apache.jmeter.threads.JMeterThread","methodName":"run","fileName":"JMeterThread.java","lineNumber":250},{"declaringClass":"java.lang.Thread","methodName":"run","fileName":null,"lineNumber":-1}],"suppressedExceptions":[]},"stackTrace":[{"declaringClass":"com.alibaba.dubbo.rpc.protocol.dubbo.DubboInvoker","methodName":"doInvoke","fileName":"DubboInvoker.java","lineNumber":100},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.AbstractInvoker","methodName":"invoke","fileName":"AbstractInvoker.java","lineNumber":142},{"declaringClass":"com.alibaba.dubbo.rpc.filter.GenericImplFilter","methodName":"invoke","fileName":"GenericImplFilter.java","lineNumber":172},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1","methodName":"invoke","fileName":"ProtocolFilterWrapper.java","lineNumber":68},{"declaringClass":"com.alibaba.dubbo.monitor.support.MonitorFilter","methodName":"invoke","fileName":"MonitorFilter.java","lineNumber":74},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1","methodName":"invoke","fileName":"ProtocolFilterWrapper.java","lineNumber":68},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.dubbo.filter.FutureFilter","methodName":"invoke","fileName":"FutureFilter.java","lineNumber":53},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1","methodName":"invoke","fileName":"ProtocolFilterWrapper.java","lineNumber":68},{"declaringClass":"com.alibaba.dubbo.rpc.filter.ConsumerContextFilter","methodName":"invoke","fileName":"ConsumerContextFilter.java","lineNumber":47},{"declaringClass":"com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1","methodName":"invoke","fileName":"ProtocolFilterWrapper.java","lineNumber":68},{"declaringClass":"com.alibaba.dubbo.rpc.listener.ListenerInvokerWrapper","methodName":"invoke","fileName":"ListenerInvokerWrapper.java","lineNumber":73},{"declaringClass":"com.alibaba.dubbo.rpc.proxy.InvokerInvocationHandler","methodName":"invoke","fileName":"InvokerInvocationHandler.java","lineNumber":51},{"declaringClass":"com.alibaba.dubbo.common.bytecode.proxy16","methodName":"$invoke","fileName":"proxy16.java","lineNumber":-1},{"declaringClass":"cn.tsoft.framework.testing.jmeter.plugin.dubbo.sample.DubboSample","methodName":"callDubbo","fileName":"DubboSample.java","lineNumber":463},{"declaringClass":"cn.tsoft.framework.testing.jmeter.plugin.dubbo.sample.DubboSample","methodName":"sample","fileName":"DubboSample.java","lineNumber":321},{"declaringClass":"org.apache.jmeter.threads.JMeterThread","methodName":"executeSamplePackage","fileName":"JMeterThread.java","lineNumber":490},{"declaringClass":"org.apache.jmeter.threads.JMeterThread","methodName":"processSampler","fileName":"JMeterThread.java","lineNumber":416},{"declaringClass":"org.apache.jmeter.threads.JMeterThread","methodName":"run","fileName":"JMeterThread.java","lineNumber":250},{"declaringClass":"java.lang.Thread","methodName":"run","fileName":null,"lineNumber":-1}],"suppressedExceptions":[]}

【已解决】参数值丢失的问题

感谢您的基于jmeter的dubbo插件,在使用过程中有个特别奇怪的现象,就是当我输入参数类型和值,然后保存,参数值自动变为了空,好奇怪啊。是我的方式不对吗?
jmeter版本3.3
插件版本1.2.4

感谢作者的答复,已经解决了,确实需要在输入完后,鼠标光标需要从输入框中移除后再点击保存。如果没移出来就保存就会丢失。

再次感谢作者开源的好插件!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.