【问题标题】:Is it possible to persist WebTestContext across ASP.NET load test session?是否可以在 ASP.NET 负载测试会话中保留 WebTestContext?
【发布时间】:2012-06-22 22:24:31
【问题描述】:

我想使用 Visual Studio 2010 Ultimate Load Test 对企业 Web 应用程序(我没有构建)进行负载测试。我希望每个虚拟用户在开始时登录,并在随机测试运行结束时注销。我可以正确配置负载测试来做到这一点。但是,有一个并发症。会话密钥被注入到 URL 中,如下所示:

http://ProductName/(S(ilv3lp2yhbqdyr2tbcj5mout))/System/Container.aspx

我将 Visual Studio WebTest 转换为编码测试,然后使用使用会话特定 URL 的代码对其进行改进。这工作正常。我需要做的是在特定虚拟用户运行的各种测试中保留这个会话编码的 URL,从登录 WebTest 类开始,到注销 WebTest 类。

各个 WebTest 类能够在每个测试的开始和结束时登录和退出。但是,这并不是正常使用的准确表示。此应用程序模拟大型机终端,从不切断 Web 浏览器请求之间的连接或会话。每个会话都是一个长的交互式 HTTP 请求,就像大型机终端与 IBM AS400 等交互一样。用户通常在一天开始时登录大型机,并且(应该)在一天结束时注销。同样,此 Web 应用程序会维护 HTTP 请求,直到用户注销或 IIS 会话超时发生。因此,重要的是我在所有测试之间在 URL 中保持相同的会话,以确保不会累积内存泄漏和其他讨厌的错误。

请分享你的想法!

【问题讨论】:

    标签: asp.net visual-studio testing load-testing webtest


    【解决方案1】:

    问题 1:在测试迭代中保持会话 ID

    您可以将数据存储在“用户上下文”中,该“用户上下文”在测试迭代中是持久的。它位于名称为“$LoadTestUserContext”的 WebTestContext 中。 (但请注意,此上下文参数仅出现在负载测试运行中,而不出现在独立 Web 测试运行中)

    // within WebTestPlugin.PreRequest() or MyExtractionRule.Extract()
    // e is the corresponding eventargs object...
    LoadTestUserContext userContext = (LoadTestUserContext)e.WebTest.Context["$LoadTestUserContext"];
    ...
    // setting the value in the user context (i.e. in the extraction rule)
    userContext["sessionId"] = "(extracted session id)";
    ...
    // getting the value from the user context (i.e. in WebTestPlugin PreWebTest event)
    e.WebTest.Context["sessionId"] = userContext["sessionId"];
    

    您必须向所有 Web 测试添加一个 WebTestPlugin(从用户上下文中获取值到 Web 测试上下文中),以使该值在所有测试中都可用。

    问题 2:仅在负载测试开始和结束时登录/注销

    • 将登录和注销功能提取到它们自己的单独测试中(请记住,注销测试还需要获取存储的 sessionId 的 WebTestPlugin)
    • 在负载测试中,编辑测试组合对话框允许您指定初始化和终止测试:将这些设置为您刚刚创建的登录和注销测试
    • 在负载测试场景中,将“新用户百分比”设置为 0。

    对“新用户百分比”设置的一些补充说明

    “新用户百分比”设置命名不当,并不能说明其全部行为。

    • 当“新用户”开始测试迭代时,它需要一个新的 $WebTestUserId(并获得一个新的用户上下文,您想要)
    • 当非“新用户”开始测试迭代时,它会保留相同的旧 $WebTestUserId(以及您确实想要的旧用户上下文)

    到目前为止一切顺利。但出乎意料的是:

    • 每个“新用户”在负载测试期间执行以下操作:

      Initialize > web test iteration > Terminate

    • 非“新用户”在整个负载测试期间执行以下操作:

      Initialize > iteration1 > iteration2 > ... > iterationN > Terminate

    换句话说,“新用户”不断地登录和退出(这是您不希望的)。非“新用户”在整个负载测试中仅登录和注销一次,并在持续时间内持续运行测试迭代(您确实想要)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 2020-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-02
      相关资源
      最近更新 更多