请求失败:在测试上下文中找不到上下文参数'$ HIDDEN1 .__ EVENTVALIDATION'

时间:2011-09-30 08:54:42

标签: asp.net visual-studio-2008 c#-3.0 webtest web-testing

我正在寻找这个问题的解决方案:

在运行我的自动网络测试时,我收到了一个请求失败,在这里你是我发现的回复: 请求失败:在测试环境中找不到上下文参数'$ HIDDEN1 .__ EVENTVALIDATION 我想出隐藏字段被假设从哪个请求中提取(在之前的请求中),其中(Hidden1)我在before请求的提取规则中找到它并且提取规则的Context Parameter Name的值是1。 / p>

注意:我目前使用的是静态参数,HTTP状态为200。

在互联网上搜索后,我发现:http://blogs.msdn.com/b/slumley/archive/2007/04/10/how-to-debug-a-web-test.aspx我找不到我的解决方案。

这个问题似乎很复杂,因为我保留了2天而没有任何答案!如果有人想知道更多信息,我24/24在线:)非常感谢...

4 个答案:

答案 0 :(得分:3)

我遇到了类似的问题(我看到这个问题很老了,但我想我会发布一个解决方案,因为这是google针对此问题的第一个结果)。

问题是__EventValidation标记是浏览器呈现的最后一个内容,并且VisualStudio 2008 Web测试在超过一定长度时截断响应对象(我认为限制为1.5MB)。

您有三种选择:

  1. 问问自己为什么你的页面大小超过1.5MB,是否有必要,特别是如果这是一个公共网站?
  2. 将Web测试中的变量ResponseBodyCaptureLimit设置为一个巨大的值,单位是以字节为单位,因此9,000,000(9MB)之类的内容足以获得任何响应对象。请注意,这会对Web测试的内存使用产生影响,如果您将其用于任何负载/性能测试,那么这将意味着您的代理需要更多内存。
  3. 重写OnPreRender方法,将__EventValidation标记从页面底部移动到页面顶部。
  4. 希望能帮助任何面临类似问题的人。

    〜丹

答案 1 :(得分:1)

我遇到了类似的问题,仍然在努力解决这些问题。与此同时,这个链接也可能有所帮助:

http://blogs.msdn.com/b/slumley/archive/2007/04/10/how-to-debug-a-web-test.aspx

答案 2 :(得分:0)

解决方案是将所有EnableEventValidation属性更改为true(这是默认值)。

但我公开的最佳解决方案是使用visualstudio 2010的VSTS,它比2008年更好,两者之间确实发生了很大的变化。

答案 3 :(得分:0)

如果有人遇到此问题并选择覆盖Render方法,则以下是示例代码。

        var stringWriter = new System.IO.StringWriter();
        var htmlWriter = new HtmlTextWriter(stringWriter);
        base.Render(htmlWriter);

        var html = stringWriter.ToString();

        const string validationELement = "<input type=\"hidden\" name=\"__EVENTVALIDATION\"";
        const string hiddenDivName = "<div class=\"aspNetHidden\">";

        // Find event validation element.
        var startIndex = html.IndexOf(validationELement);
        if (startIndex >= 0)
        {
            var endIndex = html.IndexOf("/>", startIndex) + 2;

            // Cut event validation element.
            var input = html.Substring(startIndex, endIndex - startIndex);
            html = html.Remove(startIndex, endIndex - startIndex);

            // Paste element into hidden div.
            var hiddenDivStartIndex = html.IndexOf(hiddenDivName);
            html = html.Insert(hiddenDivStartIndex + hiddenDivName.Length, input);
        }

        writer.Write(html);