是否可以使用jmeter来测试grpc

时间:2017-03-25 15:50:43

标签: jmeter beanshell grpc grpc-java

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

我希望

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

在投入时间尝试上述之前我想看看是否有任何身体尝试了类似的东西

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

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

1 个答案:

答案 0 :(得分:2)

  

如果以上解决方法有效吗?

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

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

  

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

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