Web Replay 2——自动化 Web 测试






4.20/5 (9投票s)
2005年8月16日
4分钟阅读

91594

1531
本文介绍了一个基于 Internet Explorer 的 Web 应用程序(Internet/Intranet)的自动化软件测试工具。
引言
Web Replay 2 是一个Web 应用程序的自动化软件测试工具。它通过重放场景来测试应用程序,帮助检测 Web 应用程序中的错误和回归。使用 Web Replay 2,您可以自动导航到网页,填写表单字段,点击提交(确定)按钮,然后继续到另一个网页。要使用 Web Replay 2,请构建一个 JavaScript 场景文件(见下文),在编辑框中输入文件名,然后点击 Replay 按钮。
背景
Web Replay 2 基于 Microsoft 的 Internet Explorer 6.0、DHTML behaviors 和 JavaScript(而Web Replay 1 是用 C++/COM 实现的)。
Web Replay 2 使用一个 FRAMESET,并将 DHTML behavior 附加到最底层 frame 的 onload
事件上,以执行一些 JavaScript 代码来回放场景。它仅用脚本实现(在 Internet Explorer 中运行的客户端 JavaScript 和在 ASP 页面中运行的服务器端 JavaScript)。
因此,Web Replay 2 让您在场景文件中可以完全访问 Microsoft Internet Explorer 文档对象模型 (DOM)。由于场景是一个 JavaScript 程序,您可以实现几乎任何测试用例。
使用函数 WebReplay_Navigate(),您可以调用服务器端代码来实现测试用例的先决条件和后置条件(例如,设置数据库或检查创建/修改的记录是否正确)。
使用代码
Web Replay 提供以下功能
- 从 JavaScript 文件重放场景。
- 支持 Microsoft Internet Explorer 支持的全部功能(包括 Windows 集成身份验证)。
- 支持 HTML 表单、HTML 输入元素、HTML 超链接(锚点)。
- 支持JavaScript 中可用的对 HTML 元素的任何操作(更改值、触发事件等)。
- 支持未命名的 HTML 元素:可以使用其关联的值和/或 innerText 和/或 HREF 来查找元素(HTML 元素可以基于任何属性的值来查找)。
- 支持动态生成的网站(客户端):如果您的网站在浏览器中生成 HTML(使用 JavaScript 命令,如“
document.write
”),Web Replay 2 仍然可以回放给定的场景 - 它使用超时机制来查找动态生成的控件。 - 基于 JavaScript 正则表达式模式匹配检测 HTTP 错误和/或应用程序错误。
- 支持简单的对话框(“alert”和“confirm”方法)。Web Replay 会用自定义实现覆盖
window.alert
和window.confirm
方法,以处理场景回放。 - 仅支持同一域上的服务器重放场景(被测网站必须与 Web Replay 应用程序在同一域)。这是由于 Internet Explorer 的安全限制(跨站脚本)。有关此限制的更多信息,请参阅以下 MSDN 文章
JavaScript 场景文件包含一个名为 WebReplayScenario();
的函数定义,看起来像这样
function WebReplayScenario()
{
switch (gintState)
{
case 0:
// Open a web page (LOCALHOST only due
// to cross-site scripting limitations)
"http://perso.wanadoo.fr/replay.grasse/freeware/WebReplay2/WebReplay2/WebReplaySDK.htm#WebReplay_Navigate" target=_blank>WebReplay_Navigate(
"https:///WebReplay2/WebReplay2Scenario1_step1.asp");
break;
case 1:
// Type in some text in a form field
"http://perso.wanadoo.fr/replay.grasse/freeware/WebReplay2/WebReplay2/WebReplaySDK.htm#WebReplay_SimulateTextInput" target=_blank>WebReplay_SimulateTextInput("Text1", "NewValue1");
break;
case 2:
// Submit form by clicking on a submit button
"http://perso.wanadoo.fr/replay.grasse/freeware/WebReplay2/WebReplay2/WebReplaySDK.htm#WebReplay_SimulateHTMLElementClick" target=_blank>WebReplay_SimulateHTMLElementClick("OK");
break;
default:
// Automatically exit from scenario
"http://perso.wanadoo.fr/replay.grasse/freeware/WebReplay2/WebReplay2/WebReplaySDK.htm#WebReplay_SetStateNext" target=_blank>WebReplay_SetStateNext(-1);
break;
}
}
此函数基于全局变量 gintState
实现一个状态机;每次请求的操作成功时(例如,点击按钮),状态会增加 1(状态从 0 开始)。当场景完成时,状态设置为 -1。发生任何错误时,状态设置为 -2。
实用函数 WebReplayScenarioAuto() 可以简化场景构建过程 - 它的输入是一个简单的状态数组(状态机已实现 - 无需管理 switch
和状态编号)
function WebReplayScenario()
{
"http://perso.wanadoo.fr/replay.grasse/freeware/WebReplay2/WebReplay2/WebReplaySDK.htm#WebReplayScenarioAuto" target=_blank>WebReplayScenarioAuto(
[
// State 1: Navigate to the test Page
// (uses an anonymous function definition)
[ null, function () { "http://perso.wanadoo.fr/replay.grasse/freeware/WebReplay2/WebReplay2/WebReplaySDK.htm#WebReplay_Navigate" target=_blank>
WebReplay_Navigate(
"https:///WebReplay2/WebReplay2Scenario1_step1.asp") }],
// State 2: Type in some text in a form field named Text1
[ "Text1", "NewValue1" ],
// State 3: Submit form by clicking on a submit button named "OK"
[ "OK" ],
// State 4: Type in some text in a form field named Text21
[ "Text1", "NewValue2" ],
// State 5: Submit form by clicking on a submit button named "OK"
[ "OK" ],
// State 6: Wait for next page's title:
// <h2>Form Submit Debugger</h2>
// Set state to -1 (end) when the control is found.
[ null, function () { "http://perso.wanadoo.fr/replay.grasse/freeware/WebReplay2/WebReplay2/WebReplaySDK.htm#WebReplay_WaitForHTMLControl" target=_blank>
WebReplay_WaitForHTMLControl("h2", "innerText",
"Form Submit Debugger", -1) } ]
]
);
}
提供了一个完整的 JavaScript SDK 来构建场景文件;当然,您也可以用自己的 JavaScript 代码扩展 SDK...
要构建场景文件,您基本上需要知道 Web 应用程序中 HTML 元素的名称(或 ID)(使用函数 WebReplay_FindHTMLControlWithName)。或者,您可以使用控件的内容(文本)与其进行交互(使用函数 WebReplay_FindAnchorWithText、WebReplay_FindButtonWithText 或 WebReplay_FindHTMLControlFromText)。
您可以使用以下三个函数与 HTML 控件进行交互
- WebReplay_SimulateCheckboxInput:用于勾选或取消勾选
Checkbox
控件。 - WebReplay_SimulateHTMLElementClick:用于点击任何控件。
- WebReplay_SimulateTextInput:用于在文本输入框中输入文本。
关注点
尽管这是完全重写的(v2.1 与Web Replay v1.0 毫无关系),但待办事项列表仍然很长。
Web Replay 2 待办事项列表
- 自动化录制场景文件。
- 多次重放场景(甚至无限循环来压力测试您的 Web 应用程序)。
- 批量重放场景文件。
- 支持身份验证(NTLM、基本身份验证、HTTPS)和多个登录帐户。
- 支持 FRAMES(多框架文档)或顶级 FRAME 网站。一些网站,如CodeProject,会使用一段 JavaScript 来确保它们在顶级框架中查看;Web Replay 2 与这些网站不兼容...
- 使用事件日志文件(CSV 格式?)进行错误/跟踪/调试。
- 支持复杂的对话框(基于方法 window.open、window.showModalDialog 和/或 window.showModelessDialog)。
历史
- 2005-08-19, 08:09:13 +0200 (周五, 2005年8月19日) - V2.1。