可以使用jmeter测试grpc吗

e3bfsja2  于 2023-10-20  发布在  其他
关注(0)|答案(2)|浏览(134)

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

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

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

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

我们已经尝试过使用python客户端和www.example.com进行负载测试locust.io,但python gRPC不兼容gevent,甚至不兼容python call.com。stub.GetFeature.future,我们正在达到每个进程每秒请求的限制(TCP流一次,GIL调用似乎不是GIL调用)
解决方案:请访问https://github.com/whatalokation/whatalokation-grpc-client Readme.md,它应该是不言自明的。

arknldoa

arknldoa1#

如果上述变通方法有效?
你的解决方案会奏效的。但如果你需要长期使用它,我建议你实现custom Java Sampler,而不是使用客户端类和BeanShell采样器。这是非常实用的,因为它在工作方面与实现自定义客户端+ BeanShell采样器脚本类似/相同,但Java采样器通常比BeanShell采样器更有效,并且这种解决方案的可维护性更好(您不会有2个相互依赖的组件需要维护)。
一个更好的选择是创建您自己的JMeter Plug-in(我在这里提供的链接是旧的,不是很准确,但它是一个很好的起点)。这是一项相当大的投资,但如果您发现一个更简单的解决方案通常可以工作,但有一些主要的限制,或者您需要更高级别的可配置性和控制,那么最终可能是值得的。
每个线程会创建一个单独的TCP连接吗?
每个线程独立运行,但每个线程是否有自己的连接将取决于您如何实现它们。在直接实现中(采样器创建和销毁连接),每个线程将有一个单独的TCP连接。但是JMeter在线程之间共享properties,其中可以包含对象。所以你可以通过这种方式在线程之间共享连接。或者你可以实现configuration element,它可以保存一个连接池,由所有线程共享。

pvcm50d1

pvcm50d12#

请参阅grpc-client java项目(maven),该项目创建了一个带有JMeter采样器的gRPC客户端,以便使用JMeter进行压力测试
使用maven构建项目,并将生成的jar复制到JMeter lib/ext文件夹(例如:/usr/local/apache-jmeter-3.1/lib/ext/),以便采样器位于类路径中
之后,当您启动JMeter时,您应该能够看到“java request”采样器中的类。

相关问题