字号: 小 中 大 |
推荐给好友
上一篇 |
下一篇
AJAX 技术下软件测试自动化的实现方法
发布: 2009-4-17 15:20 |
作者: James McCaffrey |
来源:
测试时代采编 |
查看: 94次 | 进入软件测试论坛讨论
ant: normal; text-transform: none; padding-bottom: 7px; line-height: 16px; color: rgb(51, 51, 51); ">顺便提一下,人们通常认为将 try/catch 用作标准函数逻辑的一部分是很糟糕的编码样式,但在本例中,由于将 try/catch 用于标准逻辑流程可简化代码,因而我认为这是可以接受的。
我的
测试方案脚本定义了一些与 step1 函数极其类似的函数 step2、step3、step4 和 step5。step2 函数可调用函数 clickEast,等到映射显示区域中出现“3”后,便紧接着调用 step3。step3 函数可调用函数 clickSouth,并等到“6”出现后,便紧接着调用 step4,依此类推。step5 函数可调用暂作过渡之用的 finish 函数 step6:
function step6()
{
finish();
}
在这里,我只需将控制权转至真正的 finish 函数(如图 6 所示)。我们知道,finish 函数还可处理对 delay 函数的调用次数超过了最大允许次数的情况。
Figure 6 Finish 函数
首先,我将处理全局计数器 numTries 的读数超过了全局常量 maxTries 的情况。在下列两种情况中都可能发生这种情况:第一种情况是 AJAX 应用程序的逻辑正确,但应用程序更新页面状态超时;第二种情况是应用程序的逻辑不正确,并且 check 函数无法找到正确的状态。在这里,我随意选择了一种导致测试方案失败的简单
解决方案。
finish 中的第二个逻辑分支会检查应用程序的最终状态以确定“pass/fail”(通过/失败)结果。在本例中,如果我从“5”开始逐个单击“北”、“东”、“南”和“西”这几个控件,便可检查最终映射图像是否为“8”(正常情况下应为“8”)。
我在本文中介绍的
测试自动化系统规模很小,专为便于您进行修改而设计。对于杂志文章,我通常会删除其中大多数错误检查以保持主要观点的鲜明性。但您可能希望随意添加一些错误陷阱 - 但测试自动化软件机敏睿智,并且错误是常事而非例外。
请注意,测试工具并不是完全自动化的:您必须手动单击“进行测试”按钮来启动自动化软件。您可通过各种方法使该工具实现完全自动化。一种简单的方法就是将 onload 处理程序添加到测试工具框架中:
<frame src="http://localhost/AjaxApplication/Default.aspx"
name="rightFrame"
onload="leftFrame.launch();" >
在本例中,测试方案代码中的 launch 函数定义如下:
var started = false;
function launch()
{
if (!started) runTest();
}
此外,还需编辑本专栏中介绍的 runTest 函数,使其以下列语句开头:
当加载包含待测试的 AJAX Web 应用程序的右侧框架时,系统会调用 launch 函数。首次执行 launch 时,处于启用状态的全局变量为 false,并且将控制权转至 runTest 函数,该函数将处于启用状态的变量设置为 true,然后执行自动化软件。加载(发生于定期 HTTP 请求/响应操作时)Web 应用程序的后续页面时,系统将调用 launch 函数,但由于处于启用状态的全局变量为 true,因而不会再次将控制权转至 runTest。借助完全自动化版本的测试工具,您便可创建多个工具页面和方案页面,然后通过将下列语句添加到 BAT 文件中并紧接着使用 Windows Task Scheduler 来启动自动化软件,以执行多个方案:
iexplore http://localhost/AjaxTest/TestHarness01.aspx
iexplore http://localhost/AjaxTest/TestHarness02.aspx
请注意,小型系统的缺点是您无法方便地对该系统进行参数化。尽管您可轻松地将测试方案页面中的公共
JavaScript 代码添加到独立的单个 .js 文件中,但要协调单个测试工具页面中的多个测试方案的执行却无简便方法可循。这并意味着您无法实现该操作,我只是要告诉您这并非易事。
AJAX 测试自动化软件的另一个扩展是使保存测试方案结果的过程实现自动化。本文中介绍的系统不会记录结果,但您可通过下列几种方法来实现该操作。一种方法是将“窗体”元素添加到测试方案页面中,在该窗体内部放置一个用来存放测试方案结果的文本字段,然后将结果 POST 到
服务器,如下所示:
<form name="resultForm" method="Post" action="saveResults.aspx">
<p>Result: <input type="text" name="result"></p>
<p><input type="submit" name="saver" value="Save Results"></p>
</form>
您可根据下列代码行向 finish 函数内部的结果字段提供“pass/fail”(通过/失败)值:
if (is.indexOf("8") >= 0)
{
logRemark("\n*通过*");
theForm.result.value = "Pass";
}
else
{
logRemark("\n*失败*");
theForm.result.value = "Fail";
}
现在,您可通过单击“保存结果”按钮来手动保存方案结果,或者您也可通过将下列代码添加到方案代码中来自动进行保存:
document.all["theForm"].submit();
结束语
我在本文中介绍的测试工具只是可用来测试 AJAX Web 应用程序的众多方法中的一种。阅读本专栏后,您应当能够使用我介绍的小型方法和更为复杂的工具来测试 AJAX Web 应用程序。随着 ASP.NET AJAX 框架的发布,AJAX Web 应用程序也会随之很快普及。编写小型测试自动化软件的能力会变得越来越重要,它是对您个人技能集的重要补充。