asp.net - 是否可以在 ASP.NET 负载测试 session 中保留 WebTestContext?

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

我想使用 Visual Studio 2010 Ultimate Load Test 对企业 Web 应用程序(我没有构建)进行负载测试。我希望每个虚拟用户在开始时登录,并在随机测试运行结束时注销。我可以正确配置负载测试来这样做。然而,有一个复杂的问题。 session key 被注入(inject)到 URL 中,如下所示:

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

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

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

请分享您的想法!

最佳答案

问题 1:在测试迭代中保留 session 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(以及您确实想要的旧用户上下文)

到目前为止一切顺利。但意想不到的是:

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

    初始化>网络测试迭代>终止

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

    初始化 > 迭代 1 > 迭代 2 > ... > 迭代 N > 终止

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

关于asp.net - 是否可以在 ASP.NET 负载测试 session 中保留 WebTestContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11125385/

相关文章:

asp.net - 在 ASMX Web 服务中对同一 WebMethod 使用 POST 和 GET Ajax 调用

c# - 如何在 ASP.NET 中使用 Response.Redirect 从子文件夹到根目录,防止用户查看目录列表

c# - 提供的行索引超出范围,即使经过检查

c# - 如何在解决方案资源管理器中隐藏 bin 和 obj 文件夹

浏览器中的 Ruby pdf 测试

testing - 测试迫使Webapp抛出错误以揭示黑客攻击信息

asp.net - 用于变量 css 的文字

c# - 如何解析 DateTime 字符串以支持 24 小时计时?

c# - 自动生成类的类修饰符

javascript - (window.beforeEach || window.setup) 不是函数