ERROR o.a.j.JMeter: Uncaught exception in thread Thread[AWT-EventQueue-0,6,main]
java.lang.RuntimeException: Unable to resolve service by invoking protoc
at vn.zalopay.benchmark.core.ClientList.listServices(ClientList.java:20) ~[jmeter-grpc-request-1.1.2.jar:?]
at vn.zalopay.benchmark.GRPCSamplerGui.getMethods(GRPCSamplerGui.java:274) ~[jmeter-grpc-request-1.1.2.jar:?]
at vn.zalopay.benchmark.GRPCSamplerGui.access$100(GRPCSamplerGui.java:35) ~[jmeter-grpc-request-1.1.2.jar:?]
at vn.zalopay.benchmark.GRPCSamplerGui$1.actionPerformed(GRPCSamplerGui.java:244) ~[jmeter-grpc-request-1.1.2.jar:?]
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) ~[?:1.8.0_162]
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) ~[?:1.8.0_162]
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) ~[?:1.8.0_162]
at javax.swing.DefaultButtonModel.setPressed(Unknown Source) ~[?:1.8.0_162]
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) ~[?:1.8.0_162]
at java.awt.Component.processMouseEvent(Unknown Source) ~[?:1.8.0_162]
at javax.swing.JComponent.processMouseEvent(Unknown Source) ~[?:1.8.0_162]
at java.awt.Component.processEvent(Unknown Source) ~[?:1.8.0_162]
at java.awt.Container.processEvent(Unknown Source) ~[?:1.8.0_162]
at java.awt.Component.dispatchEventImpl(Unknown Source) ~[?:1.8.0_162]
at java.awt.Container.dispatchEventImpl(Unknown Source) ~[?:1.8.0_162]
at java.awt.Component.dispatchEvent(Unknown Source) ~[?:1.8.0_162]
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) ~[?:1.8.0_162]
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) ~[?:1.8.0_162]
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) ~[?:1.8.0_162]
at java.awt.Container.dispatchEventImpl(Unknown Source) ~[?:1.8.0_162]
at java.awt.Window.dispatchEventImpl(Unknown Source) ~[?:1.8.0_162]
at java.awt.Component.dispatchEvent(Unknown Source) ~[?:1.8.0_162]
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) ~[?:1.8.0_162]
at java.awt.EventQueue.access$500(Unknown Source) ~[?:1.8.0_162]
at java.awt.EventQueue$3.run(Unknown Source) ~[?:1.8.0_162]
at java.awt.EventQueue$3.run(Unknown Source) ~[?:1.8.0_162]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_162]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) ~[?:1.8.0_162]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) ~[?:1.8.0_162]
at java.awt.EventQueue$4.run(Unknown Source) ~[?:1.8.0_162]
at java.awt.EventQueue$4.run(Unknown Source) ~[?:1.8.0_162]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_162]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) ~[?:1.8.0_162]
at java.awt.EventQueue.dispatchEvent(Unknown Source) ~[?:1.8.0_162]
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) [?:1.8.0_162]
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) [?:1.8.0_162]
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) [?:1.8.0_162]
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) [?:1.8.0_162]
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) [?:1.8.0_162]
at java.awt.EventDispatchThread.run(Unknown Source) [?:1.8.0_162]
Caused by: vn.zalopay.benchmark.core.protobuf.ProtocInvoker$ProtocInvocationException: Unable to execute protoc binary
at vn.zalopay.benchmark.core.protobuf.ProtocInvoker.invokeBinary(ProtocInvoker.java:146) ~[jmeter-grpc-request-1.1.2.jar:?]
at vn.zalopay.benchmark.core.protobuf.ProtocInvoker.invoke(ProtocInvoker.java:104) ~[jmeter-grpc-request-1.1.2.jar:?]
at vn.zalopay.benchmark.core.ClientList.listServices(ClientList.java:18) ~[jmeter-grpc-request-1.1.2.jar:?]
... 39 more
Caused by: java.io.IOException: Cannot run program "C:\Users\24493\protocjar105008431947558750\bin\protoc.exe": CreateProcess error=2, 系统找不到指定的文件。
at java.lang.ProcessBuilder.start(Unknown Source) ~[?:1.8.0_162]
at com.github.os72.protocjar.Protoc.runProtoc(Protoc.java:117) ~[jmeter-grpc-request-1.1.2.jar:?]
at com.github.os72.protocjar.Protoc.runProtoc(Protoc.java:78) ~[jmeter-grpc-request-1.1.2.jar:?]
at com.github.os72.protocjar.Protoc.runProtoc(Protoc.java:55) ~[jmeter-grpc-request-1.1.2.jar:?]
at vn.zalopay.benchmark.core.protobuf.ProtocInvoker.invokeBinary(ProtocInvoker.java:143) ~[jmeter-grpc-request-1.1.2.jar:?]
at vn.zalopay.benchmark.core.protobuf.ProtocInvoker.invoke(ProtocInvoker.java:104) ~[jmeter-grpc-request-1.1.2.jar:?]
at vn.zalopay.benchmark.core.ClientList.listServices(ClientList.java:18) ~[jmeter-grpc-request-1.1.2.jar:?]
... 39 more
Caused by: java.io.IOException: CreateProcess error=2, 系统找不到指定的文件。
at java.lang.ProcessImpl.create(Native Method) ~[?:1.8.0_162]
at java.lang.ProcessImpl.<init>(Unknown Source) ~[?:1.8.0_162]
at java.lang.ProcessImpl.start(Unknown Source) ~[?:1.8.0_162]
at java.lang.ProcessBuilder.start(Unknown Source) ~[?:1.8.0_162]
at com.github.os72.protocjar.Protoc.runProtoc(Protoc.java:117) ~[jmeter-grpc-request-1.1.2.jar:?]
at com.github.os72.protocjar.Protoc.runProtoc(Protoc.java:78) ~[jmeter-grpc-request-1.1.2.jar:?]
at com.github.os72.protocjar.Protoc.runProtoc(Protoc.java:55) ~[jmeter-grpc-request-1.1.2.jar:?]
at vn.zalopay.benchmark.core.protobuf.ProtocInvoker.invokeBinary(ProtocInvoker.java:143) ~[jmeter-grpc-request-1.1.2.jar:?]
at vn.zalopay.benchmark.core.protobuf.ProtocInvoker.invoke(ProtocInvoker.java:104) ~[jmeter-grpc-request-1.1.2.jar:?]
at vn.zalopay.benchmark.core.ClientList.listServices(ClientList.java:18) ~[jmeter-grpc-request-1.1.2.jar:?]
... 39 more
【以下回答由 GPT 生成】
这个问题是由于JMeter无法通过调用protoc来解析GRPC服务而引发的。
要解决这个问题,你需要在JMeter上引入与GRPC相关的依赖项,并确保你的JMeter版本与GRPC版本兼容。以下是解决这个问题的步骤:
确保你已经安装了Java Development Kit(JDK),并将其添加到系统路径中。
下载最新版本的JMeter,并解压到你的本地机器。
进入JMeter的bin目录,并运行以下命令来启动JMeter:
./jmeter.sh (Mac/Linux)
jmeter.bat (Windows)
在JMeter中,选择你的测试计划或创建一个新的测试计划。
在测试计划中,右键点击"Thread Group"并选择"Add" -> "Sampler" -> "gRPC Request".
在"gRPC Request"的配置面板中,填写GRPC服务器的IP地址和端口号。
下载并导入jmeter-grpc-request
插件,该插件是用于支持GRPC的JMeter插件。
重新启动JMeter。
在项目中引入GRPC相关的依赖项,包括protobuf-java
, jmeter-grpc-request
, grpc-netty
和grpc-protobuf
。
如果你在使用maven构建项目,请在pom.xml中添加以下依赖项:
<dependency>
<groupId>vn.zalopay.benchmark</groupId>
<artifactId>jmeter-grpc-request</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty</artifactId>
<version>{grpc-version}</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-protobuf</artifactId>
<version>{grpc-version}</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>{protobuf-version}</version>
</dependency>
请用正确的版本号替换{grpc-version}
和{protobuf-version}
。
在JMeter配置面板中,填写GRPC服务的消息类。
确保你的JMeter和GRPC服务器是在同一个网络。
运行测试计划,查看是否还有错误出现。
请注意,这只是大致的解决方案,具体操作可能因你的实际情况而有所不同。如果问题仍然存在,请查阅相关文档或寻求JMeter和GRPC社区的帮助。
【相关推荐】