我想负载测试中的企业Web应用程序(我没有建立),使用Visual Studio 2010的极限负载测试。 我想每个虚拟用户在开始登录,并在他们的抽样测试运行结束后注销。 我可以适当配置负载测试这样做。 然而,有一种并发症。 会话密钥注入URL,就像这样:
http://ProductName/(S(ilv3lp2yhbqdyr2tbcj5mout))/System/Container.aspx
我转换的Visual Studio WebTests到编码的测试,然后与使用会话特定的URL代码改造他们。 这工作得很好。 我需要做的就是坚持这届跨各种测试编码的URL特定的虚拟用户运行,从登录WebTest的类,为退出WebTest的类。
各个WebTest的类能够在每次测试开始和结束时登录和注销的。 然而,这是不正常使用的精确表示。 此应用程序模拟一个主机终端,从来没有削减的Web浏览器的请求之间的连接或会话。 每个会话是一个长,交互式的HTTP请求,就像一台主机终端与之进行交互,例如,一台IBM AS400。 Usert通常登录到主机在一天的开始,在一天结束的时候(应该)注销。 同样,这个Web应用程序保持HTTP请求,直到用户注销,或者IIS会话超时。 因此,重要的是我把同一个会话中的网址,所有测试之间,以保证内存泄漏和其他讨厌的错误不累计。
请分享你的想法!
问题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"];
你必须到WebTestPlugin(即从获取用户上下文进入网络测试方面的价值)添加到您的所有网页测试,以在所有可用的测试值。
问题2:登录/注销仅在启动和负荷测试结束
- 提取登录和注销功能集成到自己单独的测试(记住,注销测试还需要一个获取存储的sessionId的WebTestPlugin)
- 在负载测试,编辑测试混合对话框让你指定一个初始化和终止测试:这些设置为登录和注销测试刚刚创建
- 在负载测试场景,设置“新用户的百分比”改为0。
“新用户的百分比”的一些额外的设置说明
“新用户的比例”设置不当命名,并不表示其全部行为。
- 当“新用户”开始的反复测试,它需要一个新的$ WebTestUserId(并得到一个新的新鲜用户上下文,你不希望)
- 当非“新用户”开始的反复测试,它保持同样的老$ WebTestUserId(和老用户上下文,其中你想)
到现在为止还挺好。 但想不到的部分是这样的:
每个“新用户”执行负载测试期间的情况如下:
Initialize > web test iteration > Terminate
阿非“新用户”执行用于负载测试的整个持续时间如下:
Initialize > iteration1 > iteration2 > ... > iterationN > Terminate
换句话说,“新用户”不断地登录和注销(你不想要的)。 非“新用户”仅在登录,并在整个负载测试注销一次 ,并持续运行时间测试迭代(其中你想)。