Django的JMeter的API测试失败的原因HTTP超时连接失败

问题描述:

的JMeter配置:Django的JMeter的API测试失败的原因HTTP超时连接失败

Web服务器:

服务器名:120.0.0.1

端口号:9000

超时

连接:空白

回应:空白

方法:GET

主题的用户:500

斜坡上升:1个

循环计数:1(复选框未选中)

在500用户70用户故障

这里是代码

@api_view(['GET']) 
def country_list(request): 
    #country = cache.get('country') 

    try: 
     countryData = Country.objects.values('country_id','country_name').all().order_by('country_name') 
     #countryData = Country.objects.extra(select={'name': 'country_name','id':'country_id'}).values('id','name').all().order_by('country_name')[:5] 
     serializer = CountrySerializer(countryData,many=True) 
     #cache.set('country', serializer.data, 30) 
     return JsonResponse({'data': serializer.data, 'error': 0 }) 
    except (KeyError, Country.DoesNotExist): 
     return JsonResponse({ 'error': 1 }) 

和响应是这里

Thread Name: country 1-169 
Sample Start: 2017-05-26 15:43:44 IST 
Load time: 21014 
Connect Time: 0 
Latency: 0 
Size in bytes: 2015 
Sent bytes:0 
Headers size in bytes: 0 
Body size in bytes: 2015 
Sample Count: 1 
Error Count: 1 
Data type ("text"|"bin"|""): text 
Response code: Non HTTP response code: java.net.ConnectException 
Response message: Non HTTP response message: Connection timed out: connect 
HTTPSampleResult fields: 
ContentType: 
DataEncoding: null 

因此,它看起来就像你发现在你的应用程序中的瓶颈。然而,很难说可以提供合理的响应时间以及何时发生错误的最大用户数量是多少。

我会建议作如下修正:

  1. 确保您在不同的主机上运行的JMeter和Django应用程序(JMeter是相当耗费资源而这样一来,你会避免相互干扰)
  2. 变化Ramp-up的东西在1秒以上(即让它为500秒,所以JMeter会每秒添加一个用户)。这个想法是通过这种方式逐步增加负载您将能够将增加的响应时间与增加的负载相关联,并且将能够准确地确定饱和度和故障点。有关更多详细信息,请参见JMeter Ramp-Up - The Ultimate Guide
  3. 变化Loop Count-1所以你的请求将永远循环下去
  4. 设置所需的测试时间在Django的服务器级别使用即JMeter PerfMon PluginThread Group
  5. 监视器OS资源消耗的“计划”部分。

所以,当故障发生时,你应该知道至少有以下几点:

  • 多少并发用户在那里当它发生
  • 是否失效(您可以使用Active Threads Over Time听众或HTML Reporting Dashboard查看)是由于缺少即CPU或RAM造成的。如果没有 - 进一步的步骤将检查你的后端配置(即Web /数据库服务器配置是否适用于多个连接,检查日志是否有任何可疑条目,使用Python Profiling Tools来获得缓慢或失败的原因等)