2017-05-26 75 views
-1

的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 

回答

0

因此,它看起來就像你發現在你的應用程序中的瓶頸。然而,很難說可以提供合理的響應時間以及何時發生錯誤的最大用戶數量是多少。

我會建議作如下修正:

  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來獲得緩慢或失敗的原因等)