7

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

我希望那

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

在花时间尝试上述方法之前,我想看看是否有人尝试过类似的事情

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

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

4

2 回答 2

6

如果上述解决方法有效?

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

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

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

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

于 2017-03-25T17:35:00.257 回答
0

请参阅使用 JMeter 采样器创建 gRPC 客户端以启用 JMeter 压力测试的grpc-client java 项目 (maven)

使用 maven 构建项目并将生成的 jar 复制到 JMeter lib/ext 文件夹(例如 /usr/local/apache-jmeter-3.1/lib/ext/),以便采样器在类路径中

之后,当您启动 JMeter 时,您应该能够看到“java 请求”采样器中的类。

于 2021-08-14T05:34:06.327 回答