Visual Studio 使用 Json 上下文参数加载 CPU 使用率飙升

Visual Studio Load CPU usage skyrockets with Json Context Parameters

我使用 Visual Studio 2015 记录了负载测试使用的 WebPerformance 测试。在初始记录之后,我可以 运行 20 个同时使用的用户,而使用率只有大约 25% CPU。然而,我正在测试的网站使用 Json,因此为了使测试更真实,我为 Json 添加了自定义提取规则:

[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 属性,并使用上下文参数将它们添加到后续请求中。

在像这样添加多个提取并将一些上下文参数传递给请求后,我的负载测试达到 100% CPU 使用率,同时只有 5 个用户。

上述提取规则在 WebPerformance 测试中使用了大约 20 次,在任何单个响应中使用了 0-5 次。 Json 响应和请求的长度约为 2k 个字符。最大的提取包含大约 500 个字符。

我可以理解响应时间是否会因为更现实的 Json 被通过而增加或类似的东西。但是我不明白为什么 CPU 使用率飙升?请求的响应时间是否会影响 CPU 负载测试的使用?

在请求中实现 Json 的提取 + 上下文参数是一种糟糕的(在 CPU 用法的上下文中)方式吗?有没有更聪明的方法可以节省 CPU 的使用量?

大多数 CPU 用法似乎是由在验证规则中使用上述自定义 Json 提取引起的。我删除了它,因为验证并不重要,而且一切 运行 更顺利。