技术开发 频道

QTP 10抢鲜看:增强脚本 整合QC

【IT168 专稿】

    上个月(2009年1月),HP发布了QTP 10。新版本的QTP在脚本开发方面增强不少,越来越像一款名副其实的自动化测试开发工具了。另外,与QC 10的紧密结合,不仅延续和增强了HP的BPT战略意图,更让自动化脚本的版本控制得以真正实现。

    现在,就让我们来展开一次QTP新特性之旅吧!

    系统需求和环境支持

    在系统需求方面,QTP 10所要求的硬件环境并没有太大的改变,最低512M的内存、PIII以上CPU即可。但是如果使用“Save movie to results”功能的话,则推荐使用1G内存以上,因为该功能会在运行过程中录制界面视频,将占用比较多的内存资源。

    新版本的QTP添加对Windows Server 2008操作系统的支持。浏览器方面,则添加对Firefox 3.0.x和IE8.0 beta 2的支持。另外,对Delphi、Java、.NET的支持都有不同程度的增强。

    增强的QC整合能力

    对于升级安装,只能从QTP9.5升级到QTP10,9.5之前的版本需要先卸载再安装。安装过程与QTP9.5类似,在此就不再赘述了。安装完毕后,可以从“Help->Product Feature Movies”菜单中选取视频,观看对QTP10的新特性的演示。

    其中一项介绍的就是QTP10与QC10的整合。在QTP10中,提出了一个新概念“QuickTest assets”:

    QuickTest assets include tests, components, application areas, and the resources associated with them, such as shared object repositories, function libraries, recovery scenarios, and external data tables.

    QTP通过与QC整合,把测试脚本所涉及的方方面面的资源统一作为“QuickTest assets”管理起来。在QC10中引入了一个新的模块“Test Resources”。在之前的版本,QTP的测试脚本和相关资源文件都是作为附件存储在QC中,而QC10中的“Test Resources”这个模块就可用于独立管理QTP的各项资源以及它们之间的依赖关系。

    版本控制和基线

    需要注意的是,基线(Baselines)功能只有在QC10的Enterprise和Premier版本中才有,在Starter版本中不支持。

    在旧版本的QTP和QC中,只支持有限的版本控制功能,并且需要安装版本控制的插件,通过第三方的版本控制工具来执行版本控制功能。而现在,版本控制功能被完全整合到QC中。

    当QTP通过版本控制连接到QC项目中时,你可以把QTP中的任何“QuickTest asset”签入到版本控制数据库中,相反也可以签出项目中的任何“QuickTest asset”。

    类似于版本控制工具中提供的版本比较工具,新版本的整合环境中提供了“Asset Comparison Tool”,用于比较不同版本的QTP测试脚本、各项“QuickTest Asset”之间的差异。

    可移植性

    QTP的测试和相关资源文件通常会被存储在服务器或QC上,然而,很多时候,我们需要在离线的情况下打开和运行QTP测试脚本,或者出差时把相关测试脚本打包拷走。

    现在,新版本的QTP允许你通过“File->Save Test with Resources”的方式创建一个独立的测试脚本和相关资源的完整拷贝。这种方式保存的测试脚本会把测试脚本相关的资源文件、调用的action都一并保存到本地磁盘。

    本地系统监视器

    在QTP10中引入了一个显著的新功能“Local System Monitoring”。可以从菜单“File->Settings->Local System Monitor”访问该功能。

    “Local System Monitoring”功能让你可以在测试运行的过程中,监视你的应用程序所使用的本地机器的资源。你可以通过监视各项系统计数器来观察和了解你的应用程序在单用户运行的情况下的资源使用情况。而且可以定义计数器的上限,如果计数器的采样值超过了指定的上限,则测试结果会置为"Fail"。

    动态调用Action

    在以前版本,如果你插入一个外部的Action,那么那个Action就成为测试的一部分,每次打开这个测试都会加载那些Action。而在新版本的QTP中,提供“LoadAndRunAction”语句,可用于在测试脚本运行时加载Action。

    这有什么好处呢?举个例子,如果你使用了很多条件语句来调用外部的Action,而你又不想在每次打开测试时都加载那些Action进来,因为并不是每次运行都需要这些Action,那么这个时候“LoadAndRunAction”就很适用了。

    通过“LoadAndRunAction”调用的Action只有在测试运行时才被加载和执行,例如下面的例子在Test1中加载Action1并执行一次迭代:

    CustomerType = DataTable.Value("Customer_Type","dtGlobalSheet")
    NumOfOrder = DataTable.Value("Number_of_items","dtGlobalSheet")
    While NumOfOrder > 0
        NumOfOrder = NumOfOrder - 1
        If CustomerType = "Gold" or CustomerType = "Silver" or CustomerType = "Bronze" Then
            LoadAndRunAction "c:\QTPTest\OrderActions", CustomerType&"Order"
        Else 'Error value
            WrongDataValue CustomerType
        End If
    Wend


    下面的例子同样是动态加载Action1并执行一次迭代,不同的是通过环境变量来存储Action1的路径:

    CustomerType = DataTable.Value("Customer_Type","dtGlobalSheet")
    NumOfOrder = DataTable.Value("Number_of_items","dtGlobalSheet")
    TestPath="c:\QTPTest\"
    While NumOfOrder > 0
    NumOfOrder = NumOfOrder - 1
    If CustomerType = "Gold" Then
    LoadAndRunAction Environment("default_path")&"OrderActions", "GoldOrder",oneiteration, NumOfOrder
    Elseif CustomerType = "Silver" Then
    LoadAndRunAction TestPath&"OrderActions", "SilverOrder", oneiteration, NumOfOrder
    Elseif CustomerType = "Normal" Then
    LoadAndRunAction TestPath&"OrderActions", "NormalOrder", oneiteration, NumOfOrder
    Else 'Error value
    Msgbox "WrongDataValue CustomerType "
    End If
    Wend

    新的Reporter功能

    同样有助于我们更灵活地编写测试脚本的是Reporter对象的ReportEvent功能,新的ReportEvent语法定义如下:

    Reporter.ReportEvent EventStatus, ReportStepName, Details [, ImageFilePath]

    很明显,添加了在测试报告中插入图像的功能。例如下面的代码使用ReportEvent来让测试报告包含运行过程中捕获的图片:

    Browser("Browser").Page("WebPage").Image("MyLogo").CaptureBitmap("MyLogo.bmp")
    Reporter.ReportEvent micDone, "Display Logo", "This is my logo", "MyLogo.bmp"

    而在之前的版本,要实现类似的功能,则需要自己动手编写函数,例如:

    Function CaptureBitmapAndSaveToLog( w_Snder, micStatus, titleMessage )  
        Dim dateTimeNow, fileNameStr, detailsStr
        ' 用时间作为截图的文件名
        dateTimeNow = DotNetFactory.CreateInstance( "System.DateTime" ).Now.ToString( "ddMMyyHHmmss" )   
        fileNameStr = Reporter.ReportPath & "\" & dateTimeNow & ".png"   
        ' 调用CaptureBitmap方法进行截图
        If  w_Snder.Exist  Then  
            w_Snder.CaptureBitmap fileNameStr, True    
        Else       
            Desktop.CaptureBitmap fileNameStr, True   
        End If    
        ' 插入到HTML代码中
        detailsStr = "&lt;" & "<img src='" & fileNameStr & "'>"  
        ' 通过Reporter展现在测试报告中
        Reporter.ReportEvent micStatus, titleMessage, detailsStr
    End Function

    ' Register for WEB
    RegisterUserFunc "Browser","CaptureBitmapAndSaveToLog","CaptureBitmapAndSaveToLog"
    RegisterUserFunc "Page", "CaptureBitmapAndSaveToLog", "CaptureBitmapAndSaveToLog"
    RegisterUserFunc "Frame", "CaptureBitmapAndSaveToLog", "CaptureBitmapAndSaveToLog"
    RegisterUserFunc "Dialog", "CaptureBitmapAndSaveToLog", "CaptureBitmapAndSaveToLog"

    ' Register for Standard Window
    RegisterUserFunc "Window","CaptureBitmapAndSaveToLog","CaptureBitmapAndSaveToLog"

    ' Register for .NET
    RegisterUserFunc "SwfWindow", "CaptureBitmapAndSaveToLog", "CaptureBitmapAndSaveToLog"

    除了新的ReportEvent,QTP在测试报告方面还有不少的增强,例如"Jump to Step"功能可以让我们通过选择测试结果中的节点,右键单击"Jump to step in QucikTest"来跳转到相关的测试步骤,这对于调试测试脚本和查找定位错误非常有帮助。

    在新版本的QTP中,除了HTML格式外,还可以把测试结果导出到Word和PDF。

    自定义位图检查点的比较算法

    在QTP10中,你还可以自己开发和定义位图检查点的比较算法。例如,你可以定义一个自己的位图比较器,允许位图检查点在图像偏移了一定量的情况下,仍然认为是相同的,从而让检查点通过。

    QTP10在安装目录的\dat\BitmapCPCustomization\下附带了一个C++和一个VB写的自定义位图比较器的例子。

    IDE

    在IDE方面也有一些细节上的改进,比较显著的是增加“ToDo”功能。“ToDo”面板让你可以创建和管理自定义的一些任务。例如,你可以在移交脚本编写任务给其他人时,使用“Tasks”页中的文字来提供一些指引和提示,告诉他还有哪些脚本尚未完善,有时候这个功能对于自己而言也是有用的,因为有时候需要提醒自己去完善或修改某段脚本。

    在“Comments”页中,可以查看所有“ToDo”注释,选中其中某项"ToDo",可以直接跳转到所在的脚本行。

    小结

    自动化测试脚本的开发与应用程序的开发其实相差不大,一个专业的自动化测试工具应该包含大部分应用程序开发工具的特性,包括代码版本控制、优秀的代码编辑器、调试器等。

    从初步的试用结果来看,QTP10在与QC的整合极大地加强了版本控制能力(这在大型自动化测试脚本的开发项目中是必不可少的),在IDE的细节上的增强体现了QTP在朝着自动化测试脚本专业开发工具的方向发展,其动态调用Action的能力和新的ReportEvent功能也无疑迎合了大部分自动化测试脚本编写者的感受。

0
相关文章