想知道是否有人尝试过使用 jmeter 来测试 gRPC 应用程序。
我本来希望如此
在投入时间尝试上述方法之前,我想看看是否有人尝试过类似的方法并且
我们已经尝试使用 python 客户端和 locust.io 进行负载测试,但 python gRPC 与 gevent 不兼容,甚至使用异步调用,例如Stub.GetFeature.future,我们遇到了每个进程每秒请求的限制(异步调用似乎不是异步的,GIL 瓶颈,一旦 TCP 流)
解决方案: 看看 github.com/whatalokation/whatalokation-grpc-client Readme.md 应该是不言自明的
上述解决方法是否有效?
您的解决方案将会起作用。但如果您长期需要它,我建议您实现自定义 Java Sampler,而不是使用客户端类和使用 BeanShell 采样器。它非常实用,因为从工作角度来看,它将与实现自定义客户端 + BeanShell 采样器脚本类似/相同,但 Java 采样器通常比 BeanShell 采样器更高效,并且此类解决方案的可维护性会更好(您不会有 2 个 co - 需要维护的依赖组件)。
一个更奇特的选择是创建您自己的JMeter插件(我在这里提供的链接是旧的,并且不是很准确,但它是一个很好的起点)。这是一项相当大的投资,但如果您发现更简单的解决方案通常有效,但有一些主要限制,或者您需要更高级别的可配置性和控制,那么最终可能是值得的。
每个线程会创建一个单独的 TCP 连接吗?
每个线程独立运行,但每个线程是否拥有自己的连接将取决于您如何实现它们。在直接实现中(采样器创建和销毁连接),每个线程将有一个单独的 TCP 连接。但是 JMeter 具有在线程之间共享的“属性”,其中可以包含对象。所以你可以通过这种方式在线程之间共享连接。或者您可以实现配置元素,它可以保存一个由所有线程共享的连接池。