Python 蝗虫负载测试脚本出错-连接中止。“,RemoteDisconnected
我不熟悉蝗虫负载测试框架,正在将现有的基于Azure云的性能测试C脚本迁移到蝗虫基于Python的脚本。我们的团队几乎完成了脚本的迁移。但是在我们的负载测试期间,我们得到了如下错误,由于CPU利用率高或由于蝗虫上有太多异常,无法从机器创建新请求。我们使用基于网络的蝗虫模式运行-详情如下所示。这些ScritP在50到100个用户的较小负载上运行良好 错误1-“连接中止”。“远程断开连接”“远程端关闭连接而无响应” 错误2:连接池已满,正在放弃连接 ****错误3:urllib3.exceptions.NewConnectionError::未能建立新连接:[Errno 110]连接超时**** 是的,我们在实用程序类上使用UrlLibs。但前两个错误似乎确实是蝗虫造成的 我们的负载测试配置为:3500个用户,孵化率为每秒5个用户。在Azure上的8核16 Gb Linux Ubuntu虚拟机上运行nativelyno docker容器。ulimit在Linux机器上设置为50000 请帮助我们了解您的想法 样本测试如下所示Python 蝗虫负载测试脚本出错-连接中止。“,RemoteDisconnected,python,performance-testing,locust,Python,Performance Testing,Locust,我不熟悉蝗虫负载测试框架,正在将现有的基于Azure云的性能测试C脚本迁移到蝗虫基于Python的脚本。我们的团队几乎完成了脚本的迁移。但是在我们的负载测试期间,我们得到了如下错误,由于CPU利用率高或由于蝗虫上有太多异常,无法从机器创建新请求。我们使用基于网络的蝗虫模式运行-详情如下所示。这些ScritP在50到100个用户的较小负载上运行良好 错误1-“连接中止”。“远程断开连接”“远程端关闭连接而无响应” 错误2:连接池已满,正在放弃连接 ****错误3:urllib3.exception
蝗虫的默认HTTP客户端使用python请求,该请求在内部使用urllib3。 如果您正在进行大规模测试,则应该考虑另一个HTTP客户端。urllib 3 PoolManager的连接池将重用连接,并限制在任何给定时间每个主机允许的连接数,以避免累积太多未使用的套接字。 因此,您可以选择调整池: 或者您可以尝试其他任何高性能HTTP客户端。如: 蝗虫还提供了一个内置的int客户端,它比默认的python请求更快:
在客户端无法处理大负载的情况下,应考虑在群集模式下运行蝗虫。p> Locust的默认HTTP客户端使用python请求,该请求在内部使用urllib3。 如果您正在进行大规模测试,则应该考虑另一个HTTP客户端。urllib 3 PoolManager的连接池将重用连接,并限制在任何给定时间每个主机允许的连接数,以避免累积太多未使用的套接字。 因此,您可以选择调整池:
或者您可以尝试其他任何高性能HTTP客户端。如: 蝗虫还提供了一个内置的int客户端,它比默认的python请求更快:在客户端无法处理大负载的情况下,应考虑在群集模式下运行蝗虫。p> 非常感谢,我将很快尝试并让您知道。我们检查了FastHttpOccast和gevenhttp客户端,但它们在响应对象上都没有帮助响应URL的属性。这意味着我们正在检查默认蝗虫http客户端上http响应的Url,以比较用户在某些操作后到达的位置。你有什么想法吗?我们通过在同一台机器上添加更多的从机来解决这个问题,因为python一次只使用一个内核。因此,我们在同一台机器上打开了新的蝗虫从机,以便它使用其他未使用的内核来创建更多请求/连接非常感谢,我将很快尝试此操作,并让您知道。我们检查了FastHttpOccast和gevenhttp客户端,但它们在响应对象上都没有有助于响应URL的属性。这意味着我们正在检查默认蝗虫http客户端上http响应的Url,以比较用户在某些操作后到达的位置。你有什么想法吗?我们通过在同一台机器上添加更多的从机来解决这个问题,因为python一次只使用一个内核。因此,我们在同一台机器上打开了新的蝗虫从机,以便它使用其他未使用的内核来创建更多请求/连接
import os
import sys
sys.path.append(os.environ.get('WORKDIR', os.getcwd()))
from locust import HttpLocust, TaskSet, task
from locust.wait_time import between
class ContactUsBehavior(TaskSet):
wait_time = AppUtil.get_wait_time_function(2)
@task(1)
def post_load_test_contact(self):
data = { "ContactName" : "Mane"
, "Email" : "someone@someone.com"
, "EmailVerifaction" : "someone@someone.com"
, "TelephoneContact" : ""
, "PhoneNumber" : ""
, "ContactReason" : "Other"
, "OtherComment" : "TEST Comments 2019-12-30"
, "Agree" : "true"
}
self.client.post("app/contactform", self.client, 'Contact us submission', post_data = data)
class UnauthenticatedUser(HttpLocust):
task_set = ContactUsBehavior
# host is override-able
host = 'https://app.devurl.com/'