如何使用Python 3.5加载测试微服务?

时间:2017-01-26 19:26:28

标签: python-3.x python-requests urllib3 locust

我们有一套微服务,我希望以与访问方式一致的方式加载测试。

在确定Locust作为我选择的工具后,我发现TCP连接支持有连接池,因为我一直看到这样的消息:

  

警告/ requests.packages.urllib3.connectionpool:连接池已满,丢弃连接:

据我了解,此消息告诉我它丢弃了它管理的池中的连接。我假设它仍然创建一个新连接,并将其添加到它丢弃的连接的位置。

  • 这是它的作用吗?
  • 如果没有连接失败,它会这样做吗?

我不认为我们的微服务可以保持任何会话开放。从远端到我们的服务进行连接,提供结果,然后关闭连接。因此,测试是以与使用服务不同的方式处理连接。有没有办法让请求lib不使用池,并且每次都要完成设置和拆除通过它进行的所有连接的工作?

  • 我们有什么理由不想这样测试吗?
  • 如果最好使用连接池进行测试,如果在生产中没有这样做,我应该如何预测负载的差异?

1 个答案:

答案 0 :(得分:0)

这是对的。除非您将urllib3池设置为阻止,否则它将根据需要生成比池配置为保留的更多连接,然后在请求完成后将其丢弃。

当您使用池的线程多于池配置存储的连接数时,通常会发生这种情况。 urllib3 采用maxsize参数(默认为1),您可以将其设置为您正在运行的线程数。对于请求,您需要制作自定义适配器才能执行此操作。参见:

那就是说,它只是一个人们忽略的警告,所以这不是失败。但是如果这在生产中发生了很多,那可能意味着你应该调整你的配置,因为创建/丢弃新的连接总是相当昂贵。

一般来说,出于这个原因重新使用连接是个好主意。

我的建议是按此顺序:

  1. 重新使用连接,或
  2. 增加汇总以匹配线程数的连接数,或
  3. 如果您不想处理,请停用警告。