可以用jmeter测试grpc吗

问题描述 投票:0回答:2

想知道是否有人尝试过使用 jmeter 来测试 gRPC 应用程序。

我本来希望如此

  • 我可以编写一个带有非阻塞/异步存根的 gRPC 客户端类,该存根对服务器进行非阻塞调用,
  • 创建上述客户端的 Jar
  • 将 Jar 导入 JMeter
  • 在 Jmeter BeanShell 采样器中使用 Java 方法

在投入时间尝试上述方法之前,我想看看是否有人尝试过类似的方法并且

  • 上述解决方法是否有效?
  • 每个线程会创建一个单独的 TCP 连接吗?

我们已经尝试使用 python 客户端和 locust.io 进行负载测试,但 python gRPC 与 gevent 不兼容,甚至使用异步调用,例如Stub.GetFeature.future,我们遇到了每个进程每秒请求的限制(异步调用似乎不是异步的,GIL 瓶颈,一旦 TCP 流)

解决方案: 看看 github.com/whatalokation/whatalokation-grpc-client Readme.md 应该是不言自明的

jmeter beanshell grpc grpc-java
2个回答
7
投票

上述解决方法是否有效?

您的解决方案将会起作用。但如果您长期需要它,我建议您实现自定义 Java Sampler,而不是使用客户端类和使用 BeanShell 采样器。它非常实用,因为从工作角度来看,它将与实现自定义客户端 + BeanShell 采样器脚本类似/相同,但 Java 采样器通常比 BeanShell 采样器更高效,并且此类解决方案的可维护性会更好(您不会有 2 个 co - 需要维护的依赖组件)。

一个更奇特的选择是创建您自己的JMeter插件(我在这里提供的链接是旧的,并且不是很准确,但它是一个很好的起点)。这是一项相当大的投资,但如果您发现更简单的解决方案通常有效,但有一些主要限制,或者您需要更高级别的可配置性和控制,那么最终可能是值得的。

每个线程会创建一个单独的 TCP 连接吗?

每个线程独立运行,但每个线程是否拥有自己的连接将取决于您如何实现它们。在直接实现中(采样器创建和销毁连接),每个线程将有一个单独的 TCP 连接。但是 JMeter 具有在线程之间共享的“属性”,其中可以包含对象。所以你可以通过这种方式在线程之间共享连接。或者您可以实现配置元素,它可以保存一个由所有线程共享的连接池。


0
投票
grpc-client

java 项目 (maven),它使用 JMeter 采样器创建 gRPC 客户端,以启用 JMeter 压力测试 使用maven构建项目并将生成的jar复制到JMeter lib/ext文件夹(例如/usr/local/apache-jmeter-3.1/lib/ext/),以便采样器位于类路径中

之后,当您启动 JMeter 时,您应该能够在“java request”采样器中看到这些类。

© www.soinside.com 2019 - 2024. All rights reserved.