在负载测试中使用编码的 UI 测试
若要确定软件响应各种使用级别的程度,可以执行负载测试。 负载测试通过模拟同时访问软件程序的多个用户,对该软件程序的预计使用情况进行建模。 有关更多信息,请参见创建和编辑负载测试。
负载测试主要由一系列 Web 性能测试或单元测试组成,这些测试在存在多个模拟用户的情况下运行一段时间。 负载测试还可以包括自动编码的 UI 测试。 只应在特定情况下包括编码的 UI 测试。 在负载测试中使用编码的 UI 测试的所有方案都使用编码的 UI 测试作为性能测试。 由于编码的 UI 测试允许您在 UI 层捕获性能,因此该测试很有用。 例如,如果一个应用程序向客户端返回数据需要 1 秒,而在浏览器中呈现数据需要 8 秒,则使用 Web 性能测试不能捕获此类型的性能问题。
在负载测试中使用编码的 UI 测试的另一种情况是,难以在协议层编写应用程序脚本。 在这种情况下,您可能需要考虑使用编码的 UI 来临时驱动负载,直到可以正确编写协议层脚本。
要求
- Visual Studio 旗舰版
在编码的 UI 测试中为计时度量值实现代码
默认情况下,由于调用是异步的,因此您不会从负载测试中使用的编码 UI 测试获取准确的计时度量值。 必须正确实现编码的 UI 测试,才能获取准确的计时度量值。 可以通过使用 WaitForControlReady 方法完成此任务。 下面的示例代码段演示如何针对登录页完整此任务。
备注
下面是简化的示例:如果登录失败,则实际测试还必须处理计时。
正确实现在负载测试中使用的编码 UI 测试
对加载登录页的时间计时。
TestContext.BeginTimer("UI Login Page Load");
此调用将加载登录页。
UIMap.LoginPage();
Web 测试中的任何计时都必须使用 WaitForReady。 将一直等到显示窗体。
UIMap.UIHttpteamtestweb1STORWindow1.UIHttpteamtestweb1STORDocument.UIEmailEdit.WaitForControlReady(); TestContext.EndTimer("UI Login Page Load");
警告
确保填写窗体所用的时间不包含在计时器中。在记录期间,将在填写窗体之后、提交窗体之前从记录器生成代码。
此函数将填写登录窗体。
UIMap.FilledInLoginForm();
对登录操作计时
TestContext.BeginTimer("UI Login"); UIMap.LoggedIn();
Web 测试中的任何计时都必须使用 WaitForReady。 将一直等到显示登录确认页。
UIMap.UIHttpteamtestweb1STORWindow.UIHttpteamtestweb1STORDocument.UIWelcomeJamesBondwellPane.WaitForControlReady(); TestContext.EndTimer("UI Login");
负载测试中编码的 UI 测试限制
编码的 UI 测试可驱动鼠标和键盘。 因此,每个代理只有 1 个虚拟用户可以运行编码的 UI 测试。 对此进行控制的最佳方法是在负载测试中设置单独的方案,并将用户负载设置为 1 个用户。 如果存在多个 UI 测试,请将测试组合配置为“顺序”。 有关更多信息,请参见为现有负载测试创建额外方案和编辑测试组合模型以指定运行测试的虚拟用户的概率。
您还需要配置负载代理,以使其作为交互进程(而不是服务)来运行。 有关更多信息,请参见安装和配置测试代理和测试控制器。
外部资源
指南
测试使用Visual Studio进行附带的2012版–第6章:一个测试的工具箱