是否可以在ASP.NET负载测试会话中持久保存WebTestContext?

Mik*_*ian 2 asp.net testing webtest load-testing visual-studio

我想使用Visual Studio 2010 Ultimate Load Test加载测试企业Web应用程序(我没有构建).我希望每个虚拟用户在开始时登录,并在他们的随机测试运行结束时注销.我可以正确配置负载测试.但是,有一个复杂的问题.会话密钥被注入URL,如下所示:

http://ProductName/(S(ilv3lp2yhbqdyr2tbcj5mout))/System/Container.aspx
Run Code Online (Sandbox Code Playgroud)

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

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

请分享你的想法!

age*_*ega 10

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

您可以将数据存储在"用户上下文"中,该用户上下文在测试迭代中是持久的.它位于WebTestContext中,名称为"$ LoadTestUserContext".(但请注意,此上下文参数仅出现在负载测试运行中,而不是在独立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"];
Run Code Online (Sandbox Code Playgroud)

您必须将WebTestPlugin(从用户上下文中获取值到Web测试上下文中)添加到所有Web测试中,以使值在所有测试中可用.

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

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

"新用户百分比"设置的一些附加说明

"新用户百分比"设置命名不佳,并不表示其完整行为.

  • 当"新用户"启动测试迭代时,它需要一个新的$ WebTestUserId(并获得一个新的用户上下文,您不需要)
  • 当非"新用户"开始的反复测试,它保持同样的老$ WebTestUserId(和老用户上下文,你不要想)

到现在为止还挺好.但意想不到的部分是这样的:

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

    Initialize > web test iteration > Terminate

  • 非"新用户"在负载测试的整个持续时间内执行以下操作:

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

换句话说,"新用户"不断登录和退出(您不想要).非"新用户"仅在整个负载测试中登录和注销一次,并持续运行测试迭代(您确实需要).