jmeter测试GRPC接口报错,有哪位能帮看下吗?

img

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版本兼容。以下是解决这个问题的步骤:

  1. 确保你已经安装了Java Development Kit(JDK),并将其添加到系统路径中。

  2. 下载最新版本的JMeter,并解压到你的本地机器。

  3. 进入JMeter的bin目录,并运行以下命令来启动JMeter:

./jmeter.sh (Mac/Linux)
jmeter.bat (Windows)
  1. 在JMeter中,选择你的测试计划或创建一个新的测试计划。

  2. 在测试计划中,右键点击"Thread Group"并选择"Add" -> "Sampler" -> "gRPC Request".

  3. 在"gRPC Request"的配置面板中,填写GRPC服务器的IP地址和端口号。

  4. 下载并导入jmeter-grpc-request插件,该插件是用于支持GRPC的JMeter插件。

  5. 重新启动JMeter。

  6. 在项目中引入GRPC相关的依赖项,包括protobuf-java, jmeter-grpc-request, grpc-nettygrpc-protobuf

  7. 如果你在使用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}

  1. 在JMeter配置面板中,填写GRPC服务的消息类。

  2. 确保你的JMeter和GRPC服务器是在同一个网络。

  3. 运行测试计划,查看是否还有错误出现。

请注意,这只是大致的解决方案,具体操作可能因你的实际情况而有所不同。如果问题仍然存在,请查阅相关文档或寻求JMeter和GRPC社区的帮助。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^