2015-10-20 45 views
0

我已使用Visual Studio 2015錄製負載測試使用的WebPerformance測試。在初始錄製之後,我可以運行20個同時使用的用戶,CPU使用率只有25%左右。不過該網站我測試上使用JSON,所以讓測試我添加對JSON的自定義抽取規則更逼真:Visual Studio使用Json上下文參數加載CPU使用率溢出

[DisplayName("JSON Extraction Rule")] 
[Description("Extracts the specified JSON value from an object.")] 
public class JsonExtractionRule : ExtractionRule 
{ 
    [DisplayName("Name/path of attribute")] 
    [Description("String to fetch the attribute from the Json Object.")] 
    public string Name { get; set; } 

    [DisplayName("Fetch 4 first characters only")] 
    [Description("Set to true if only the first 4 characters of the attribute should be fetched.")] 
    public Boolean fourFirstCharacters { get; set; } 

    public override void Extract(object sender, ExtractionEventArgs e) 
    { 
     if (e.Response.BodyString != null) 
     { 
      var json = e.Response.BodyString; 

      if (json.StartsWith("[")) 
      { 
       json = "{\"array\":" + json + "}"; 
      } 

      var data = JObject.Parse(json); 

      if (data != null) 
      { 
       var attribute = data.SelectToken(Name).ToString(); 
       if (fourFirstCharacters) 
       { 
        e.WebTest.Context.Add(this.ContextParameterName, attribute.Substring(0, 4)); 
       } else 
       { 
        e.WebTest.Context.Add(this.ContextParameterName, attribute); 
       }     
       e.Success = true; 
       return; 
      } 
     } 

     e.Success = false; 
     e.Message = String.Format(CultureInfo.CurrentCulture, "Not Found: {0}", Name); 
    } 
} 

我用這個提取的Json幾個從響應屬性,並將它們加入到後續請求使用上下文參數。

在添加了幾個提取類似並將某些上下文參數傳遞給請求後,我的負載測試只有5個simultanious用戶達到100%的CPU使用率。

上述提取規則在Web性能測試中使用大約20次,在任何單個響應中使用大約0-5次。 Json的回覆和請求大約有2k個字符。最大的提取包含大約500個字符。

我可以理解,如果響應時間增加或類似的東西,作爲一個更現實的Json被傳遞的結果。但我不明白爲什麼CPU使用率高漲?請求的響應時間是否會影響負載測試的CPU使用率?

提取+上下文參數在請求中實現Json的方式不好(在CPU使用情況下)嗎?有沒有更聰明的方法可以節省CPU使用量?

+1

對於20個用戶來說,25%對我來說似乎非常高,除非你的計算機效率低於微軟的建議。也許測試的其他部分需要工作。思考時間如何確定和使用?您可以通過添加一個負載測試圖來獲得一些價值,該圖顯示來自'Overall' =>'Test'計數器的各種'%time in ...'值。 – AdrianHHH

+0

我在每次請求之間使用1秒的靜態思考時間。在「代碼」,「規則」和「LoadTestPlugin」中添加%Time的圖表顯示在規則中花費了近100%的時間。 – EJS

+0

重讀這個問題。每個響應會調用'JObject.Parse'(加上前面的if ...連接3個字符串)幾次。這些操作對我來說顯得非常耗時。也許更改爲一個'ExtractJson'提取規則的調用,將提取的'data'保存爲上下文參數。 (上下文參數的值可以是任何類型。)然後多次調用一個插件來傳遞'name'和'fourFirstCharacters'的各種值作爲屬性。 – AdrianHHH

回答

1

大部分CPU使用率似乎是由驗證規則中使用上述自定義Json提取引起的。我刪除了它,因爲驗證並不重要,一切都運行得更順利。