注:本文最早于2009年5月发表于It168.com
5 月, Automated 公司的 TestComplete7 发布了,展现了很多令人激动的新特性, TestComplete7 的口号是:
The Easiest TestComplete Ever.
Script-free testing for new users.
Power-packed features for savvy testers.
Ease of use and low price for all.
誓要改变大众对其一贯的印象,把自己打造成“物美价廉”,功能强大而又简单易用的自动化测试工具形象。
TestComplete 一直缺少像 QTP 一样的关键字测试功能,这让很多初学者感觉其使用的难度较高。现在好了, TestComplete 7 增加了关键字测试功能,实现其“ Script-free testing for new users ”的诺言。
美中不足的是关键字测试与脚本代码不能互相转换,这多少有点让人跌眼镜,看来 Automated 公司还需要努力加强这方面的功能。作为弥补, TestComplete 7 支持在脚本代码中调用关键字测试,例如:
Sub Main
' Enter your code here.
KeywordTests .Test1.Run
End Sub
同时也支持在关键字测试视图中调用脚本里定义的过程,例如,对于如下脚本:
Sub TestCase1
Msgbox "this is TestCase1"
End Sub
可以在关键字视图中通过“ Run Script Routine ”进行调用。
调用函数也是同样的做法,例如对于如下函数:
Function Add(a,b)
c = a + b
Add = c
End Function
同样可以在关键字测试中调用,调用时输入参数值即可。
在关键字视图的左侧,提供了各种通过关键字编写测试脚本的工具,例如插入条件判断、循环等。
对 PDA 测试的支持是 TestComplete 7 的另外一大亮点。在 TestComplete 7 中,有专门的扩展用于支持 PDA 应用程序的测试。
支持的版本包括: Windows Pocket PC 2003, Windows Mobile 5.0 和 Windows Mobile 6.0 。在 Object Browser 中,可以查看远程 PDA 上的进程和对象。
新版本的 TestComplete 对 RIA 应用程序的支持进一步增强,现在,你可以用 TestComplete 测试 Flash 、 Flex 、 Silverlight 的程序。
TestComplete 7 支持运行于 IE ( v5~8 )、 Firefox(v1.5~3.0) 上的 Flash 和 Flex 程序。需要注意的是,对于 Firefox ,要求 Flash Player 插件的版本是 9.0.124.0 或以后的版本。
TestComplete 7 支持 Silverlight 2 的应用程序测试。通过 UI Automation 接口访问 Silverlight 界面控件。
在这方面, TestComplete 比 QTP 等其他自动化测试工具领先不少( QTP 仅支持 Flex 程序的测试,而且是通过 Adobe 的 Flex Builder 提供的插件来完成的)。在 RIA 应用日趋流行的今天,对 RIA 应用程序的支持是自动化测试工具不容忽视的一项内容。
在 TestComplete 7 中,添加了很多第三方控件的支持,例如 Developer Express XtraEditors 和 XtraBars 、 Infragistics NetAdvantage 、 Syncfusion Essential Studio 、 MFC Feature Pack for Visual C++ 2008 、 Telerik RadControls for ASP.NET 等。
第三方控件是自动化测试过程中碰到问题比较多的地方, TestComplete 对众多第三方控件的支持无疑为其增色不少。在 Grid 类型的控件方面, TestComplete 现在又添加了对以下控件的支持:
Borland TStringGrid
Developer Express XtraVerticalGrid 、 PropertyGridControl 和 XtraTreeList
Microsoft MFC PropertyGrid
Rogue Wave Stingray Objective Grid .NET
Syncfusion GridControl 和 ScheduleGrid
Xceed Grid for .NET
尤其值得注意的是, TestComplete 7 现在支持采用 Qt 和 wxWidgets 框架构建的跨平台应用程序。 TestComplete 支持 MinGW 、 Microsoft Visual Studio .NET 2003, Microsoft Visual Studio 2005 和 Microsoft Visual Studio 2008 编译的 Qt4.5 程序。
另外,如果碰到一些自定义的 .NET 和 WPF 控件,还可以使用 TestComplete 提供的 SDK 来开发插件,这些插件可以大大提供 TestComplete 与自定义控件的交互能力。
正当大家在为 TestComplete 对新技术的支持如此神速而惊叹的时候, TestComplete7 还不失时机地添加了对命令行程序的扩展支持。这对于大家测试一些遗留的骨灰级程序,或者是一些后台服务器上的一些应用程序会比较有用。
TestComplete 7 为我们提供了一种比较特别的命令行应用程序测试的方式,可通过类似于如下所示的代码来访问命令行应用程序的窗口:
Set p = Sys.Process("MyApp")
Set w = p.Window("ConsoleWindowClass", "*")
...
然后,可以通过如下方式向命令行应用程序发送字符串,就像在命令行中敲入命令一样:
Set p = Sys.Process("MyApp")
Set w = p.Window("ConsoleWindowClass", "*")
Call w.Keys("MyString [Enter]");
...
下一步就是获取命令行应用程序的响应了,在 TestComplete 中可以通过 wText 来获取,下面代码展示了一个完整的小例子:
Sub MyTest
Dim p, w, txt, cnt, i, s
Set p = Sys.Process("MyApp")
Set w = p.Window("ConsoleWindowClass", "*")
Call w.Keys("MyString [Enter]")
' 获取命令行窗口的文本
txt = w.wText
' 指定分割符
aqString.ListSeparator = vbNewLine
' 获取文本列表的长度
cnt = aqString.GetListLength(txt)
For i = 0 To cnt - 1
' 获取一行文本的字符串
s = aqString.GetListItem(txt, i)
' 把字符串写入日志
Call Log.Message(s)
Next
End Sub
这种方式获取的是所有文本,如果想以一种交互式的方式来测试命令行应用程序的话,还可以利用 WScript.Shell ,例如下面的代码所示:
Sub Main
Dim WshShellObj, WshShellExecObj, out
Set WshShellObj = CreateObject("WScript.Shell")
Set WshShellExecObj = WshShellObj.Exec("cmd.exe")
' Flush the stream
out = readTillChar(WshShellExecObj, ">")
Log.Message(out)
' Send the "ver" command and the new line character
WshShellExecObj.StdIn.Write("ver"+VbCrLf)
out = readTillChar(WshShellExecObj, ">")
Log.Message(out)
End Sub
Function readTillChar(WshShellExecObj, endChar)
Dim out, curChar
Do While Not WshShellExecObj.StdOut.AtEndOfStream
curChar = WshShellExecObj.StdOut.Read(1)
out = out + curChar
If (curChar = endChar) Then
readTillChar = out
Exit Function
End If
Loop
End Function
除了上面一些主要的改进和新特性外, TestComplete 7 还在很多细节的地方做了改进和提高,在 Object Browser 中,添加了一个 GUI Explorer 小工具, GUI Explorer 可以帮助我们查看应用程序 GUI 界面控件的层次结构,例如,下图展现的是 Google 主页的 GUI 界面控件的层次结构:
GUI Explorer 可以让我们观察界面上的对象,不管它是可见的还是隐藏的。在 GUI Explorer 中,窗体控件被画成亮灰色,非窗口控件则画成暗灰色,不可见的控件都是白色的,对于隐藏的控件,则画出其边界。
TestComplete7 引入了一个新类型的变量 – Table ,其实就是一个二维数组。
Table 可以在 Project 、 Project Suites 和 Keyword test 中使用。例如,下面的代码展示了如何访问 Table 中的数据:
Sub getTableData
columnCount = Project .Variables.Var1.ColumnCount
rowCount = Project .Variables.Var1.RowCount
For I=0 to rowCount-1
For J=0 to columnCount-1
Log .Message( Project .Variables.Var1.Item(J,I))
Next
Next
End Sub
TestComplete 7 的亮相给我们带来不少惊喜,例如对关键字测试的支持(虽然还有待改进,但是毕竟迈出了第一步)、对 PDA 、 RIA 应用的支持等。
此外, TestComplete 一如既往地保持对新技术、工具、编译器的及时支持,例如: IE8 被及时地支持了, CodeGear RAD Studio 2009 也被及时地支持了。在 TestComplete 7 中,除了 Microsoft 的 Visual Studio Team System 和 AutomatedQA 自己的 AQdevTeam 外,现在还支持把 bug 录到开源的 Bugzilla (看来金融危机下,开源的东西开始被重视起来了)。