Be Myself !

发布新日志

  • QTP中DataTable对象的方法

    2013-05-27 14:27:41

    1: AddSheet 方法

    描述 

    向运行数据表中添加指定工作表并返回工作表,以便可以直接在同一句中置新工作表的属性。 

     

    DataTable.AddSheet(SheetName)

    示例 

    以下示例先使用 AddSheet 方法在运行数据表中新建工作表"MySheet",然后向新工作表中添加参数。 

    Dim Variable

    Variable=DataTable.AddSheet ("MySheet").AddParameter("Time", "8:00") 

     

    2DeleteSheet方法

    描述 

    从运行数据表中除指定工作表 

     

    DataTable.DeleteSheet SheetID

    示例 

    以下示例使用 DeleteSheet 方法从运行数据表中除工作表"MySheet" 

    DataTable.DeleteSheet "MySheet"

     

    3Export方法

    描述 

    在指定位置保存运行数据表的副本。 

     

    DataTable.Export(FileName)

    示例 

    以下示例使用 Export 方法将测试的数据表副本保存在 C:\flights.xls 中。 

    DataTable.Export ("C:\flights.xls") 

    flights.xls内容

     

    4ExportSheet方法

    描述 

    将运行数据表的指定工作表出到指定文件中。 

    如果指定文件不存在,建一个新文件并保存指定工作表。

    如果当前文件存在,但是文件不包含具有指定工作表名称的工作表,将插入工作表作文件的最后一个工作表。

    如果当前文件存在且包含指定工作表,则导出的工作表将覆盖有工作表。

     

    DataTable.ExportSheet(FileName, DTSheet)

    DTSheet  变量  要导出的运行时数据表工作表的名称或索引。索引值从 1 开始。  

    示例 

    以下示例使用 ExportSheet 方法将运行数据表的第一个工作表保存到 name.xls 文件中。 

    DataTable.ExportSheet "C:\name.xls" ,1

    DataTable.ExportSheet "C:\name.xls" , " MySheet "

    name.xls表内容

     

    5GetCurrentRow方法

    描述 

    返回运行时数据表的第一个工作表(用于测试的全局表或用于业务组件的业务组件表)中的当前(活动)行。 

    语法 

    DataTable.GetCurrentRow 

    返回值 

    数字 

    示例 

    以下示例使用 GetCurrentRow 方法检索当前在运行时数据表中使用的行,并将其写入报告。 

    row = DataTable.GetCurrentRow 

    Reporter.ReportEvent 1, "行号", row 

    6:GetRowCount方法

    描述 

    返回运行时数据表的第一个工作表(用于测试的全局表或用于业务组件的业务组件表)中最长的列中的总行数。 

    语法 

    DataTable.GetRowCount 

    返回值 

    数字 

    示例 

    以下示例使用 GetRowCount 方法查找 MySheet 运行时数据表中最长的列中的总行数,并将其写入报告。 

    rowcount = DataTable.GetSheet("MySheet").GetRowCount 

    Reporter.ReportEvent 2, "数据工作表中有 " &rowcount, "行。" 

     

    7:GetSheet方法

    描述 :返回运行时数据表中的指定工作表。 

    语法 DataTable.GetSheet(SheetID)

    SheetID  变量  标识要返回的工作表。SheetID 可以是工作表名称或索引。索引值从 1 开始。  

    示例 

    返回值 

    DTSheet 对象 

    以下示例使用 GetSheet 方法返回运行时数据表的"MySheet"工作表,以便向其中添加参数。 

    MyParam=DataTable.GetSheet ("MySheet").AddParameter("Time", "8:00") 

    您还可以使用该方法向"MySheet"本地表中添加参数(注意,不会返回值)。 

    DataTable.GetSheet ("MySheet").AddParameter "Time", "8:00" 

     

    8:GetSheetCount方法

    描述 

    返回运行时数据表中的总工作表数。 

    语法 

    DataTable.GetSheetCount 

    返回值 

    数字 

    示例 

    以下示例使用 GetSheetCount 方法查找运行时数据表中的总工作表数,并将其写入报告。 

    sheetcount = DataTable.GetSheetCount 

    Reporter.ReportEvent 0, "工作表编号", "数据表中有 " & sheetcount & " 个工作表。"

     

    9:Import方法

    描述 

    将指定的 Microsoft Excel 文件导入运行时数据表。 

    注意:

  • QuickTest Professional 自动化对象模型

    2013-05-27 14:26:55

     正如使用 QuickTest 实现应用程序测试自动化一样,也可以使用 QuickTest Professional 自动化对象模型实现 QuickTest 操作自动化。 可以使用由 QuickTest 自动化对象模型公开的对象、方法和属性来编写程序,用以配置 QuickTest 选项和运行测试或业务组件,而不必使用 QuickTest 界面手动执行这些操作。

       自动化程序在以下情形特别有用:多次执行相同任务或就多个测试或组件执行相同任务;根据特定环境或应用程序的需要快速配置QuickTest。

       其实要自动化运行QuickTest 相当简单,只需自己在电脑上建个vbs文件,完成后双击运行就可以实现了.下面给个最简单的配置QuickTest自动化启动,打开测试脚本,然后保存测试结果,然后自己关闭QuickTest程序的例子脚本.

    dim qtApp  

    dim qttest

    set qtApp = Createobject("QuickTest.Application")   '创建 Application 对象

    qtApp.launch   ' 启动

    qtApp.Options.Run.ViewResults = true

    qtApp.Visible = True  '可见

    qtApp.open "E:\Test1",true   '用只读的方法打开测试脚本

    Set qtTest = qtApp.Test   '创建 Test 对象

    Set qtResultsOpt = CreateObject("QuickTest.RunResultsOptions") ' 创建 Run Results Options 对象

    qtResultsOpt.ResultsLocation = "E:\Test1\Res1" ' 设置测试结果保存位置

    qtTest.run qtResultsOpt   '   执行测试

    qtTest.close   ' 关闭测试

    qtApp.quit    '关闭QTP

    Set qtTest = Nothing ' 释放 Test 对象

    set qtApp =nothing   '释放


  • QTP中设置共享对象库

    2012-07-03 14:23:36

       很多时候我们总是觉得管理QTP脚本比较烦.因为除了要对代码的管理之外,还要保证QTP对象库的完整.每一个用例脚本的生成,同时又都会生成一个对象库.那么是不是可以做一个公共的对象库来给各个用例脚本调用呢?接下来,我们就来实现共享对象库的应用.

      第一步:把需要加到共享对象库中的各个用例脚本的对象库,分别导出成.tsr文件.

      操作方法:先用QTP打开已经录制完毕的脚本后,选择Resources--> Object Repository .

      然后file-->export....取名导出文件.如下图:

               

      第二步:把需要加入到共享对象库中的各个用例脚本的对象库,合并对象及对象属性,形成一个大的共享对象库.

      操作方法:打开Resources-->Object Repository Manager.找到Tools菜单,然后选择打开Object Repository merge tool.选择两个要合并的对象库文件,进行对象合并.一次只能合并两个.所以如果这里你要合并多个对象库文件的话,先合并两个后,保存成一个新的.tsr文件.然后再重复上面的操作,选择这个新的.tsr文件和另一个准备好的对象库合并.

    合并的时候,你会发现,在两个对象库文件中,相同的对象合并成一个,不同的对象,全部被完整增加进去.然后形成一个大的对象库.现在只要保存这个共享对象库.如果以后有新增的对象,可以重复上述操作.

      第三步:调用上面保存好的共享对象库.给新的脚本使用.

      操作步骤:Resources-->Associate Repository.选择上面保存好的共享对象库的.tsr文件.加入到Associate Repository中.

    完成这一步后,其实整个共享对象库的操作已经完成.你在对象库中可以看到以后的对象.在录制新脚本的时候,如果对象已经存在,就不会再被记录,只有在这个对象库中没有的对象才会被记录进去.回放脚本,对象识别成功.

    (注:此操作只适合与装有QTP9.0的版本.对于8.2版本不适合)

    附:8.2版本中的共享对象库操作

    QTP8.2的共享方法
    1. 选择“测试”>“设置”>“资源”选项卡。
    2. 在“对象库类型”区域,“共享”。
    请指定要用作对象库文件的共享对象库文件。要指定文件,请输入对象库文件名,或单击浏览按钮并从“打开”对话框中选择资源文件。要新建共享对象库文件,请在“共享”框中输入新文件名。
    对象库文件的默认文件扩展名是 .tsr,但是文件可能使用任何扩展名。在“打开”对话框中浏览现有对象库文件时,在“文件类型”框中选择“所有文件”。
    3. 注:请在新测试开始录制前进行设置,已有测试的对象库模式不能进行修改。

  • QTP实例-测试报告代码

    2011-09-15 14:28:03

    自动化测试实际是将测试人员手工进行的工作脚本化,这就需要在测试脚本运行完成后,展示一个明了的测试报告,供相关人员查看测试结果,判断系统的正确性,以下代码实现的是一个EXCEL格式的测试报告,以Function为单位记录脚本的执行情况,若完成则显示Complete,在Comment中显示验证点检查结果情况,以此来判断系统运行的正确行;若由于一些突发的异常情况导致脚本未执行完成,则显示Fail,在Comment中显示Err.Descrīption信息

    当然,要达到以上效果,要求在业务脚本的检查点按照指定的格式书写,我的做法是设置一个全局变量记录所有检查点信息,然后传入给日志函数

    以下是代码,希望对有需要的朋友有所帮助:)

    Function ExcelReport(ReportExcelFile,sStatus,sDetails)
      '定义变量
      Dim fso
      Dim oExcel
      Dim ExcelFile
      Dim TestcaseName
      Dim objWorkBook
      Dim objSheet
    '  Dim Environment("Row"), Environment("TCRow"), NewTC
      
      Set fso = CreateObject("scrīpting.FileSystemObject")
      Set ōExcel = CreateObject("Excel.Application")
    '   oExcel.Visible = True
      
      '设置Excel报告样式
      If  Not fso.FileExists(ReportExcelFile) Then
       oExcel.Workbooks.Add
       
       '获取工作簿的第一个Sheet页
       Set ōbjSheet = oExcel.Sheets.Item(1)
       oExcel.Sheets.Item(1).Select
       
       With objSheet
        '更改sheet名
        .Name = "Test_Summary"
        
        '设置列宽
        .Columns("A:A").ColumnWidth = 5
        .Columns("B:B").ColumnWidth = 35
        .Columns("C:C").ColumnWidth = 10
        .Columns("D:D").ColumnWidth = 60
        .Columns("A:D").HorizontalAlignment = -4131
        .Columns("A:D").WrapText = True
        
        '设置显示区域的字体类型和大小
        .Range("A:D").Font.Name = "Arial"
        .Range("A:D").Font.Size = 10
        
        '设置文件头格式
        .Range("B1").Value = "Test Result"
        .Range("B1:C1").Merge 
         
        '设置文件头格式字体和颜色
        .Range("B1:C1").Interior.ColorIndex = 53
        .Range("B1:C1").Font.ColorIndex = 19
        .Range("B1:C1").Font.Bold = True
        
        '设置执行的日期和时间
        .Range("B3").Value = "Test Data:"
        .Range("B4").Value = "Test Start Time:"
        .Range("B5").Value = "Test End Time:"
        .Range("B6").Value = "Test Duration: "   
        .Range("C3").Value = Date
        .Range("C4").Value = Time
        .Range("C5").Value = Time
        .Range("C6").Value = "=R[-1]C-R[-2]C"
        .Range("C6").NumberFormat = "[h]:mm:ss;@"
        
        '设置日期和时间cell的边界
        .Range("C3:C8").HorizontalAlignment = 4 '右边对齐
    '     .Range("C3:C8").Font.Bold = True
    '     .Range("C3:C8").Font.ColorIndex = 7
        .Range("B3:C8").Borders(1).LineStyle. = 1
        .Range("B3:C8").Borders(2).LineStyle. = 1
        .Range("B3:C8").Borders(3).LineStyle. = 1
        .Range("B3:C8").Borders(4).LineStyle. = 1
        
        '设置日期和时间Cell的样式
        .Range("B3:C8").Interior.ColorIndex = 40
        .Range("B3:C8").Font.ColorIndex = 12
        .Range("C3:C8").Font.ColorIndex = 7
        .Range("B3:A8").Font.Bold = True
        
        .Range("B7").Value = "No Of Function:"
        .Range("C7").Value = "0"

        .Range("B8").Value = "Test Machine"
        .Range("C8").Value = GetIP()
        .Range("B10").Value = "TestCase"
        .Range("C10").Value = "Finish"
        .Range("D10").Value = "Comment"
        
        '为Result Summery设置格式
        .Range("B10:D10").Interior.ColorIndex = 53
        .Range("B10:D10").Font.ColorIndex = 19
        .Range("B10:D10").Font.Bold = True
      
        '为Result Summery设置边界
        .Range("B10:D10").Borders(1).LineStyle. = 1
        .Range("B10:D10").Borders(2).LineStyle. = 1
        .Range("B10:D10").Borders(3).LineStyle. = 1
        .Range("B10:D10").Borders(4).LineStyle. = 1
        .Range("B10:D10").HorizontalAlignment = 3
        .Range("C11:C1000").HorizontalAlignment = 3
     
        .Columns("B:D").Select
    '     .Columns("B:D").Autofit
        .Range("B11").Select  
       End With
       oExcel.ActiveWindow.FreezePanes = True
       oExcel.ActiveWorkbook.SaveAs ReportExcelFile
       oExcel.Quit
       
       Set ōbjSheet = Nothing
      End If
      
      TestcaseName = Environment("TCase")
    '   MsgBox TestcaseName
      Set ōbjWorkBook = oExcel.Workbooks.Open(ReportExcelFile)
      Set ōbjSheet = oExcel.Sheets("Test_Summary")
      
      With objSheet
       '设置行数和是否NewTc标识
       Environment("Row") = .Range("C7").Value + 11
       'NewTC = False
       
       If TestcaseName <> objSheet.Cells(Environment("Row")-1,2).value Then
        .Cells(Environment("Row"),2).value = TestcaseName
        .Cells(Environment("Row"), 3).Value = sStatus
        .Cells(Environment("Row"), 4).value = sDetails
        
        Select Case sStatus
         Case "Fail"
          .Range("C" & Environment("Row")).Font.ColorIndex = 3
         Case "Complete"
          .Range("C" & Environment("Row")).Font.ColorIndex = 50
        End Select
        
        'NewTC = True
        .Range("C7").Value = .Range("C7").Value + 1
        '设置边界
        .Range("B" & Environment("Row") & ":D" & Environment("Row")).Borders(1).LineStyle. = 1
        .Range("B" & Environment("Row") & ":D" & Environment("Row")).Borders(2).LineStyle. = 1
        .Range("B" & Environment("Row") & ":D" & Environment("Row")).Borders(3).LineStyle. = 1
        .Range("B" & Environment("Row") & ":D" & Environment("Row")).Borders(4).LineStyle. = 1
        '设置字体和颜色?
        .Range("B" & Environment("Row") & ":D" & Environment("Row")).Interior.ColorIndex = 19
        .Range("B" & Environment("Row")).Font.ColorIndex = 53
        .Range("D" & Environment("Row")).Font.ColorIndex = 41
        .Range("B" & Environment("Row") & ":D" & Environment("Row")).Font.Bold = True
       End If
       
       If (Not NewTC) And (sStatus = "Fail") Then
        .Cells(Environment("Row"), 3).Value = "Fail"
        .Range("C" & Environment("Row")).Font.ColorIndex = 3
       End If
       
       '更新结束时间
       .Range("C5").Value = Time
       
       .Columns("B:D").Select
    '    .Columns("B:D").Autofit
      End With
      oExcel.ActiveWindow.FreezePanes = True
      
      '保存结果
      objWorkBook.Save
      oExcel.Quit
      
      Set ōbjSheet = Nothing
      Set ōbjWorkBook = Nothing
      Set ōExcel = Nothing
      Set fso = Nothing
    End Function

    运行结果如图显示:


    本文为zte_boy原创,转载请注明出处:http://www.51testing.com/?161787

  • QC使用中问题点汇总

    2010-08-26 16:08:41

    QC 使用中问题点汇总,包括以下四个方面:

      1、不兼容IE7,IE8的问题(服务器端设置)

      2、无法在Win 7下正常下载页面(客户端设置)

      3、在QC中填写中文内容后无法正常提交到数据库(客户端设置)

      4、在QC中填写中文内容出现乱码的现象(待修改)

           5、Win 7 IE下QC无法访问

           6、QC中文版本改英文版本需修改

           7.QCMSExcelAddin这个插件安装完了后,打开EXCEL,找不到那export to QC的那个选项

           8.QC9.0默认支持IE 6,不支持IE 7、IE8和IE9.0的

           9.在excel中向QC导入数据时,用户密码不能输入

           10. 在excel中向QC导入数据时,选择要导入的部分(需求,用例...),系统提示:不允许用户做如下操作

           11.修改QC 8080端口

           12.使用QC远程启动QTP

           13.修改MSDE默认sa密码

           14.修改SQLserver密码

           15.卸载QC



    1.解决QC兼容(支持)IE 7,IE 8的问题

      QC9.0默认支持IE 6,不支持IE 7和IE 8的,一打开IE 7和IE 8的浏览器,输入qc网址,这里以我的网址为例:http://192.168.1.122:8080/qcbin,会出现提示:“Microsoft Internet Explorer : 4.0(compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)不受支持!”

      解决QC对IE7,IE8的支持现在普遍的做法是直接在服务端安装目录下修改start_a.htm这个文件,方法如下:

      1.在服务端QC的安装目录下jboss\server\default\deploy目录下(文件默认路径是: C:\Program Files\Mercury\QualityCenter\jboss\server\default\deploy)找到20qcbin.war这个war包。

      2.用winrar打开这个目录,可以看到start_a.htm这个文件。

      3.把start_a.htm这个文件copy出来,然后用Notepad打开,然后在该页面搜索msie,并且在“(ua.lastIndexOf('MSIE 6.0') != -1)”后修改添加|| (ua.lastIndexOf(’MSIE 7.0′) != -1)|| (ua.lastIndexOf(’MSIE 8.0′) != -1)后替换  war包中的start_a.htm文件。这里也可以直接在原文件修改。

      4.修改配置完成后,重新启动QC的服务器就可以了。原因是重启服务器的过程中会把20qcbin.war中的内容解压出来到临时目录下的。

      这里注意:

      改完上面的配置如果不想重启服务器,就需要把temp中的start_a.htm这个文件也增加ie7,ie8的支持。只改系统文件是需要重启QC服务的~

      参照这个方法服务器端就改好了,但是我在用IE 7和IE 8的客户端浏览器打开qc的时候却发现仍然无法正常显示,页面出现提示信息,这是因为IE 7和IE 8的安全性设置造成的,稍微改一下就好了:

      A.IE 7

      IE 7的安全级别比较高,需要修改一下IE的选项设置:

      一打开浏览器,输入qc的网址,提示:“您的浏览器中未安装JavaScript,或已将其禁用。”

      于是回到浏览器,点开工具菜单->INTERNET选项->安全->自定级别中,找到脚本scripting,把“Active scripting”和“Script. of Java applets”勾选"启用"并点击"确定"

      刷新页面,之前的提示终于没有了,但是又有IE的信息提示条弹出来:

      看来activeX插件还需要enable一下,在自定义选项中找到Active Controls and Plug-ins,把”Run ActiveX controls and plug-ins”勾选“enable”,再刷新页面,客户端就可以正常下载了:

      B. IE 8

      IE8比较简单,只要activeX插件enable一下就可以了:

      到这里,服务器端和客户端都修改好了,qc 9.0在IE 7和IE 8下都能正常使用了!:)

     先改用户账户控制----再重启----再去修改IE属性

    在IE8/9中(要以管理员的身份运行),设置IE属性工具->Internet选项->高级启用内存保存减少内存攻击选项取消选中。



    2.无法在Win 7下正常下载页面(客户端设置)

      同样的问题也会出现在SiteAdmin界面,一打开IE 7和IE 8的浏览器,输入qc网址,这里以我的网址为例:http://192.168.1.23:8080/sabin/SiteAdmin.htm,会出现同Start_a.htm一样的问题,此时也需要在服务器安装目录下修改SiteAdmin.htm这个文件。这里的解决办法和修改Start_a.htm文件时一样的,只是修改的路径会不一致,具体方法如下所示:

      1.在服务端QC的安装目录下jboss\server\default\deploy目录下(文件默认路径是: C:\Program Files\Mercury\QualityCenter\jboss\server\default\deploy)找到10sabin.war这个war包。

      2.用winrar打开这个目录,可以看到SiteAdmin.htm这个文件。

      3.把SiteAdmin.htm这个文件copy出来,然后用Notepad打开,然后在该页面搜索msie,并且在“(ua.lastIndexOf('MSIE 6.0') != -1)”后修改添加|| (ua.lastIndexOf(’MSIE 7.0′) != -1)|| (ua.lastIndexOf(’MSIE 8.0′) != -1)后替换  war包中的SiteAdmin.htm文件。这里也可以直接在原文件修改。

      4.修改配置完成后,重新启动QC的服务器就可以了。原因是重启服务器的过程中会把10sabin.war中的内容解压出来到临时目录下的。

      5.其他的设置如果在修改Start_a.htm中已经设置过了,此处就不需再重复设置了。


    3.解决QC在Win7下不能正常工作的问题

      在Windows7中,发现登录到QC Server的Addin页面,很多客户端组件不能正常下载,从而导致整个QC无法使用,解决办法如下:

      第一步:关闭UAC (User AccountControl)

      通过开始菜单搜索框,输入UAC,会出现“更改用户账户控制设置”(Change User Account Control菜单项。点击打开后,菜单弹出如下一个用户账户控制设置对话框。通过滚动条选择“从不通知”。然后重启机器,这步其实就是让当前用户获得完全管理员权限。

      第二步:关闭DEP (DataExtension Prevention)

      以管理员的身份打开命令行(通过开始菜单搜索框,输入CMD,右击CMD选项并选择以管理员身份运行,然后运行如下命令行,然后重启机器。

    bcdedit /set{current} nx AlwaysOff

      第三步:重新下载客户端组件

      开启HP QCEXPlore,或者直接利用IE,在地址栏输入QC Server的地址,确定后组件下载将会顺利进行:

      第四步:访问HP QC Server

      等下载工作完成,你将能够正常使用HP QCExplore,或者直接利用IE浏览器,正常访问QC Server了。

      第五步:恢复UAC设置

      为了确保安全,最好将UAC回复到原来的设置,并重启机器。但是DEP需要处于Disabled状态。

      

    4.解决QC中填写中文内容无法提交到数据库的问题

      QC安装后并且能成功打开网址后,进入系统在QC中填写中文内容,弹出报错信息,如下图所示:

      解决此类问题的方法如下图所示(该方法是针对Windows 7的客户端设置,其他的系统可以做类似的修改):

      第一步:打开Control Panel,进入如下界面:

      第二步:选择上图红色区域部分,即Change displaylanguage项,进入如下界面:

      第三步:选择上图红色区域部分,即Formats项,进入如下界面:

      第四步:在Formats界面,将红色区域的选项改为“Chinese (Simplified, PRC)”,然后点击“OK”按钮,自动关闭上图界面。

      第五步:重新打开输入QC的网址,在QC中填写中文内容并且提交,能成功提交中文内容。


     5.Win 7 IE下无法访问QC问题

          1.需求有其它的IE内核浏览器输入地址访问下载插件(注意后台前的都要下载)

            2.再用IE浏览器设置IE属性工具->Internet选项->高级启用内存保存减少内存攻击选项取消选中(用管理员运行)

            3.直接访问即可(用管理员运行)


     6、QC中文版本改英文版本需修改

             1.在服务端QC的安装目录下jboss\server\default\deploy目录下找到20qcbin.war这个war包,可以看到start_a.htm修改这个文件

                    添加|| (ua.lastIndexOf(’MSIE 7.0′)!= -1)|| (ua.lastIndexOf(’MSIE 8.0′) != -1)后替换  war包中的start_a.htm文件

              2.同样方法修改10sabin.war包中的SiteAdmin.htm文件

              3.清除此目录下文件:C:\Program Files (x86)\Common Files\Mercury Interactive  ,一样有三个文件夹      (笔者为System:Win7 64位)

                     1. License Manager        2.  Quality Center   3. TDAPIClient  

              重新启动即可


     7.QCMSExcelAddin这个插件安装完了后,打开EXCEL,找不到那export to QC的那个选项

               解决办法:打开Excel,在菜单栏“工具”下打开“加载宏”,浏览Office的目录"C:ProgramFilesMicrosoft OfficeOFFICE11XLSTART",选择         “TDExcelAddin.xla”,确定后就可以看到了


     8.QC9.0默认支持IE 6,不支持IE 7、IE8和IE9.0的

             一打开IE7IE 8的浏览器,输入qc网址,会出现提示:“MicrosoftInternet Explorer : 4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0;.NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR3.5.30729)不受支持!”

    但是现在碰到的问题是每次重启QC服务器,会发现之前的设置没有生效,这是因为我们修改的是临时文件夹下的文件配置导致的。所以要一次性解决QC对ie7和ie8的支持,我们需要修改系统文件。方法如下:

                 1.在服务端QC的安装目录下jboss\server\default\deploy目录下找到20qcbin.war这个war包。

                 2.用winrar打开这个目录,可以看到start_a.htm这个文件。

                 3.把start_a.htm这个文件copy出来修改添加|| (ua.lastIndexOf(’MSIE 7.0′)!= -1)|| (ua.lastIndexOf(’MSIE 8.0′) != -1)后替换  war包中的start_a.htm文件。

                           这 里也可以直接在原文件修改。

                4. 同样方法修改10sabin.war包中的SiteAdmin.htm文件


     9.在excel中向QC导入数据时,用户密码不能输入

    解决办法:将输入法切换到英文状态


    10. 在excel中向QC导入数据时,选择要导入的部分(需求,用例...),系统提示:不允许用户做如下操作

    解决办法:这里不能用站点管理员账号导入数据,换成admin用户就OK


    11.修改QC 8080端口

    QC安装时使用IIS+JBoss的方式,但在使用过程中你的服务器8080端口可能被占用,所以需要修改QC中JBoss的端口,具体修改步骤如下,并且该修改方法已经在本机测试通过,后台以及前台使用新端口号都能正常登录:

        1、修改\Quality Center\jboss\server\default\deploy\jbossweb-tomcat55.sar\Server.xml文件中的port="8080".

        2、修改\QualityCenter\jboss\server\default\deploy\http-invoker.sar\META-INF\jboss-service.xml 文件中以下三个URL端口号。

                    <attributename="InvokerURLSuffix">:8080/invoker/EJBInvokerServlet</attribute>

                    <attributename="InvokerURLSuffix">:8080/invoker/JMXInvokerServlet</attribute>

                    <attributename="InvokerURLSuffix">:8080/invoker/readonly/JMXInvokerServlet</attribute>


     12.使用QC远程启动QTP

    随着测试团队不断扩大,QTP测试脚本不断增多,我们需要用多台电脑来运行QTP脚本,如果大家要登录到每台机器上去跑脚本,就太不方便了,而且各个机器上的脚本版本还有是否统一的问题。

            如果我们能用一台电脑,指挥多台装了QTP的电脑运行脚本,岂不爽哉。

            Mercury公司开发的Quanlity Center(简称QC),就可以实现这个功能。

            要使用QC远程调用QTP,需要进行一系列的设置才能实现。在这篇文章里,我们把部署了QTP的电脑叫做“测试机”,把远程控制测试机的电脑叫做“控制台”,方便说明。

            在测试机装完QTP后,还要安装一个插件:TDPlugin。这个插件的安装程序在安装盘的TDPlugin目录下面,安装后重启。

            下面的设置非常重要,在QTP的安装指南中有详细的描述,我这里把几个重点说明一下。安装指南文件名是:QT_Install_Guide.pdf。具体内容在“ModifyingDCOM Permissions Manually to Enable Remote QuickTest Execution”这一章。

           先要设置windows登录用户的权限,指南文件的说明是假定测试机和控制台都已经加入域,其实不加入域也一样可行,只是设置有些不同。我们这里先讲没有加入域的情况。比如我们用ctrlUser这个用户登录控制台的windows,那么,就必须在测试机里也增加一个同名并且密码也相同的ctrlUser用户,并且把这个用户添加到系统管理员组。

           如果两台机器都加入域,就更好办了,比如控制台的登录域用户是ctrlDomainUser,那么只要在测试机的系统管理员组里,添加这个用户即可,也就是说,登录控制台的用户拥有测试机的管理员权限。

           下一步是设置测试机的防火墙,主要是开放135端口和添加AQTRmtAgent.exe代理程序到防火墙的例外列表中。

           然后是设置DCOM的权限,这里的设置步骤比较多,在安装指南文档里面说的比较清楚,主要是把一些用户和组添加到允许访问的列表中。

           设置完DCOM以后,我们打开QTP,在option中的Run分页,把“Allowother Mercury products to run tests and components”选中。

           好,现在打开一个Test,然后将QTP和QC连接,把这个Test保存到QC上面。在控制台上登录QC,新建一个测试集,把刚才那个Test加入这个测试集。然后在“主机管理器”里面,把测试机的ip添加进来。回到测试集窗口,把这个Test的“计划主机名”指定为测试机的IP,好,现在运行测试集就大功告成了。

           这时测试机的QTP会自动启动,run这个Test,run结束以后,测试结果会自动保存在QC服务器上,我们可以在任意电脑上查看测试结果。


     13.修改MSDE默认sa密码

        1. 在正在连接到的 MSDE 实例的宿主计算机中,打开命令提示符窗口。

       2. 键入下面的命令,然后按 Enter 键: osql -U sa

                    在 Password:提示符下,按 Enter 键(如果密码为空)或键入当前密码。这样可以使用 sa 帐户连接到 MSDE 的本地默认实例。

                   要使用 Windows 身份验证进行连接,请键入此命令:osql -E(如果不知道sa密码可以用这种方式)

       3. 在各个单独的行内键入下列命令,然后按 Enter 键:

               sp_password @old = null, @new = 'password',@loginame ='sa'

               go

              注意:确保将“password”替换为你的密码。您将收到以下提示信息,表示已成功更改密码:

                          Password changed.

             注意:修改了MSDE密码之后,要到QC的站点管理——DB Server中把DB Admin Password修改成与MSDE新密码一致


     14.修改SQLserver密码

             先把SQL Server卸载,再把安装时产生的“Microsoft SQL Server”文件夹删掉,在运行注册表,把HKEY_CURRENT_USER\Software\Microsoft\MicrosoftSQL Server,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MicrosoftSQL Server全部删掉,(注意要把Microsoft SQL Server文件夹整个删掉)


     15.卸载QC

    如果你不能正常使用添加删除程序卸载QC,请按照如下的步骤进行:

        1、删除c:\program files\hp\quality center目录。

        2、再次去添加删除程序中卸载quality center,将删除列表中的图标,但是并没有完全删除,还需要下一步:

        3、删除文件 c:\windows\vpd.perperties。

        4、ALL Rights!

  • QTP中的数据库检查点

    2010-08-01 14:22:42

    要创建数据库检查点或输出值,请执行下列操作:

    1. 选择“插入”>“检查点”>“数据库检查点”或“插入”>“输出值”>“数据库输出值”。将打开“数据库查询向导”。


    2. 选择数据库选择首选项,然后单击“下一步”。可从下列选项中进行选择:
      • 使用 Microsoft Query 创建查询-打开 Microsoft Query,使您可以新建查询。完成定义查询的工作之后,返回到 QuickTest。只有在您的计算机上安装 Microsoft Query 之后,该选项才可用。
      • 手动指定 SQL 语句-在向导中打开“指定 SQL 语句”屏幕,使您可以指定连接字符串和 SQL 语句。有关详细信息,请参阅步骤 3
      • 最大行数-如果要限制行数,请选中该复选框,并输入要检查或输出的最大数据库行数。最多可以指定 32,000 行。
      • 显示如何使用 Microsoft Query-单击“下一步”时,将在打开 Microsoft Query 之前显示一个说明屏幕。(只有在选中“使用 Microsoft Query 创建查询”时才启用)。
    3. 如果在上一步骤中选择了“使用 Microsoft Query 创建查询”,将打开 Microsoft Query。选择数据源并定义查询。
    4. 如果在上一步骤中选择了“指定 SQL 语句”,将打开“指定 SQL 语句”屏幕。指定连接字符串和 SQL 语句,然后单击“完成”。

    5. 将打开“检查点属性”或“输出值属性”对话框。
    6. 单击“确定”关闭该对话框。在关键字视图和专家视图中,将为所选对象添加一条检查点或输出值语句。

     

         

     

    了解“表/数据库检查点属性”对话框

    通过“表/数据库检查点属性”对话框,可以指定要检查表或数据库的哪些单元格内容以及要使用哪些验证方法和类型。还可以对检查中所含单元格的预期数据进行编辑或参数化。

    注意: ActiveX 表的“表检查点属性”对话框看上去与下面显示的对话框稍有不同。对于 ActiveX 表,除了检查表内容(使用“表内容”选项卡)以外,还可以选择是否要检查表对象的属性(使用“属性”选项卡)。根据要检查信息的类型,选中位于“表检查点属性”对话框相关选项卡顶部的“选择表内容”复选框和/或“选择属性”复选框。

    有关“表内容”选项卡中的选项的信息,请参阅下列部分。


    “表/数据库检查点属性”对话框的顶部将显示为检查点捕获的数据。使用该区域可指定要检查的单元格。

    在预期数据下,“表/数据库检查点”对话框包含下列三个选项卡:

    • 预期数据-使您可以将每个已检查的单元格设置为常量值或参数化值。例如,可以指示 QuickTest 使用数据表中的值作为特定单元格的预期值。
    • 设置-使您可以设置预期值与实际值之间成功匹配的条件。例如,可以指示 QuickTest 将值视为数字(因此 45 和 45.00 将被视为同一个值),或者,可以指示 QuickTest 在比较值时忽略空格。
    • 单元格标识-使您可以指示 QuickTest 如何查找要检查的单元格。例如,假设您要检查显示在“表/数据库检查点属性”对话框中第一行和第二列中的数据。但是,您知道每次运行测试或组件时,这些行的顺序可能会有所不同,具体取决于在上一步中执行的排序。因此,您可能希望 QuickTest 根据列名和在关键字列中包含已知值的行来标识单元格,而不是根据行号和列号来查找数据。
    • 提示: 值匹配设置和单元格识别条件将应用于检查点中所有选定的单元格。如果要对表或数据库中的不同单元格使用不同的值匹配或单元格标识条件,请分别创建检查点,并为每个检查点指定相关的单元格。

    “表/数据库检查点属性”对话框的底部包含下列选项:

    • 检查点超时-指定 QuickTest 试图成功执行检查点的时间间隔(以秒为单位)。QuickTest 将继续执行检查点,直到顺利通过或发生超时。如果在发生超时之前检查点尚未顺利通过,则检查点将失败。
    • 例如,假设将数据加载到表中需要花费一些时间。在这种情况下,增加检查点超时值可确保有足够的时间来加载数据,从而使检查点在到达超时结尾之前可以顺利通过。

      可以在“测试结果”窗口中查看有关检查点超时的信息,包括 QuickTest 用于执行检查点的时间间隔。

      注意:只有在创建表检查点时,“检查点超时”选项才可用。创建数据库检查点时,该选项不可用。

    • 插入语句-指定在测试或组件中执行检查点的时间。如果要在执行突出显示的步骤之前检查表或数据库内容,请选择“当前步骤之前”。如果要在执行突出显示的步骤之后检查表或数据库内容,请选择“当前步骤之后”。
    • 注意:在录制期间添加检查点时或在修改现有检查点时,“插入语句”选项不可用。向现有测试或组件添加检查点时,该选项可用。

  • QTP中虚拟对象设置

    2010-07-08 14:25:26

     当我们在录制脚本中,有时会遇到某个对象回放时不能识别.那么就可以考虑是不是可以做个虚拟对象来代替它.您可以将这些对象定义为虚拟对象,并将它们映射到标准类,例如按钮或复选框。QuickTest 在运行会话过程中模拟虚拟对象上的用户操作。在测试结果中,虚拟对象显示时类似标准类对象。

       下面我们还是通过一个例子来具体操作一下.这次选用LoadRuner自带的b/s架构的web例子,来录制脚本.(注:运行这个例子,同时把web server先给开起来.).这次只录制一个点击sign up(注册)的步骤.
    录出脚本如下:

    Browser("Mercury Tours").Page("Mercury Tours").Frame("navbar").Image("signup").Click 45,12


    QTP把这个button对象识别成了Image(图片)对象,导致最后回放的时候,QTP不能完成Click操作,弹出报错信息.对于这个对象,我马上想到了做个虚拟的button对象来代替它.

    下面是整个虚拟对象的制作过程:

    1.选择“工具”>“虚拟对象”>“新建虚拟对象”。或者,也可以在虚拟对象管理器中,单击“新建”。将打开虚拟对象向导。单击“下一步”。

    2.选择要将您的虚拟对象映射到的标准类(这里有六种对象类供你选择,分别是object,button,table,list,check box,radio button).这里我们要映射一个button对象,所以选择button.单击"下一步"

    3.单击“标记对象”。选择你要做虚拟对象的区域,拖动鼠标.尽量能覆盖整个你想替代的对象.

    4.在“标识对象使用”框中,选择您希望 QTP 标识和映射虚拟对象的方式。

    如果您想要 QuickTest 标识所有出现的虚拟对象,请选择“Parent only”。

    如果想要 QuickTest 仅标识一次出现的虚拟对象,请选择“Entire parent hierarchy"。

    这里我们选择默认的“Parent only”。

    5.指定虚拟对象的名称和集合。从集合列表中选择,或通过在“集合名”框中输入新名称来新建集合

    点击完成,整个虚拟对象就做好了.

    虚拟对象做好后,保存在虚拟对象管理器中.我们可以通过虚拟对象管理器来删除或禁用虚拟对象定义.

    选择“工具”>“虚拟对象”>“虚拟对象管理器”。将打开虚拟对象管理器。

    注意:如果希望 QuickTest 在录制时识别虚拟对象,请确保清除“选项”对话框的“常规”选项卡中的“录制时禁止识别虚拟对象”复选框。

    接下来我们再来录制一遍对sign up的操作,录制代码如下:

    Browser("Mercury Tours").Page("Mercury Tours").Frame("navbar").VirtualButton("button").Click

    在录制过程中值得注意的是,一定要点击到我们做好虚拟对象的范围内,这样QTP才能识别到这个虚拟对象.这里我们的虚拟对象识别成功.再次回放,QTP顺利的执行了脚本.

    还有两点要注意的是:

    1.虚拟对象管理器中显示的虚拟对象集合存储在您的计算机中,而不是随包含虚拟对象步骤的测试或组件存储。这意味着如果您在测试或组件步骤中使用虚拟对象,则仅当在包含正确的虚拟对象定义的计算机中运行时,该对象在运行会话过程中才能被识别。要将您的虚拟对象集合定义复制到另一个计算机,请将您的 <QuickTest 安装文件夹>\dat\VoTemplate 文件夹的内容(或该文件夹中的单个.vot集合文件)复制到目标计算机上的相同文件夹中。

    2.仅当录制和运行测试或组件时,才能使用虚拟对象。您不能在虚拟对象上插入任何类型的检查点,也不能使用“对象探测器”来查看其属性。

    接下来你可以继续完成整个sign up过程,还有多个类似的对象需要做虚拟对象.你也可以试一下?

     


  • QTP中的描述性编程

    2010-07-07 14:24:33

    通过一个具体的例子,再来看看描述性编程的形式.打开QTP录制Fight的登录框.代码如下:


    Dialog("Login").WinEdit("Agent Name:").Set "mercury"
    Dialog("Login").WinEdit("Password:").SetSecure "45a1e193f9dac3bf91f3ba7c1dd250a48a33eabf"
    Dialog("Login").WinButton("OK").Click
    Window("Flight Reservation").Close

    对应的对象库,

    然后我们把对象库中,这些对象的属性及属性值从对象库搬到脚本中,代码修改成为:


    Dialog("text:=Login").WinEdit("attached text:=Agent Name:").Set "mercury"
    Dialog("text:=Login").WinEdit("attached text:=Password:").SetSecure "4414d23c42046da1ea3a895f1518b9c476b2b225"
    Dialog("text:=Login").WinButton("text:=OK").Click
    Window("regexpwndtitle:=Flight Reservation").close

    把对象库中对象删除掉,

    再来执行脚本,QTP执行成功.这就是描述性编程.当然值得注意的是,如果父对象用描述性编程表示了,那么后面的对象都要用描述性编程表示了.如:

    Dialog("text:=Login").WinEdit("attached text:=Agent Name:").Set "mercury"

    这边Dialog("text:=Login")用描述性编程表示了,那么WinEdit("attached text:=Agent Name:")就必须要描述性编程表示了.因为在对象库中,子对象是依靠父对象存在的.所以如果Dialog("text:=Login")这个父对象从对象库中删除了,那么后面的子对象也同时被删除了.反过来子对象删除就不影响父对象.所以子对象可以单独用描述性编程表示,而不需牵连其他对象.

  • QTP中调用共享文件

    2010-07-01 14:21:25

      在我们开发脚本的时候,发现有些脚本总是重复的出现在各个脚本中。那么我们是不是可以把这些脚本写成一个共享的function,放到一个共享的文件中?然后再给各个脚本调用呢?答案当然是肯定中。其实我在《QTP的一些小知识》中也提到了一个方法,就是利用ExecuteFile函数来调用.vbs文件。如:一个名为test.vbs的文件,我们只要在脚本中写上这么一句代码ExecuteFile("F:\test.vbs") ,就可以来直接执行这个.vbs文件了。

         现在我再来介绍另一种方法,这种方法也是QTP本身所提供的。就是设置菜单选项“setting”中的"resource"选项来做到调用共享文件的效果。在"resource"选项中,有三种文件格式是可以被调用的,分别是*.sql;*.vbs;*.txt三种后缀文件。这里我用一个*.txt文件为例。

        新建一个名为test.txt的文本文件,其保存内容如下:(注:保存的内容也必须合法)

    Function writeorderno(orderno)
    Dim fso, myfile
    Set fso=CreateObject("scrīpting.FileSystemObject")
    Set myfile=fso.openTextFile("C:\result1.txt",8,false)
    myfile.writeline orderno
    myfile.close
    End Function

    一个名为writeorderno的Function,其作用是把传进来的值写到C盘名为result1.txt的结果文件中去。(注:结果文件也是事先要准备好的)。共享文件准备完毕,那么就开始设置"resource"选项。打开“setting”窗口,找到"resource"选项。点击“+”的button。选择前面我们建好的文件。如下:

    确定关闭窗口。我们就来试验一下,是不是这个共享文件里的Function能够被调用了。在QTP专家视图里写上这么几句代码:

    Dim order

    order=1

    writeorderno order

    接下去就按run执行试验,结果测试通过。虽然在脚本中根本没对writeorderno函数做说明,但是当QTP运行到这句代码的时候,在本脚本里没说明的情况下,自己会到"resource"选项里去找。结果QTP能正确识别这个writeorderno 函数。打开c盘里的 result1.txt的结果文件,发现传进函数的值1,被正确的写了进去。预示着整个调用共享文件的成功。

  • QTP中的测试对象和运行时对象

    2010-06-28 14:18:15

     相信大家在QTP中肯定都看到过这些方法,GetROPropertyGetTOPropertySetTOProperty.

    GetROProperty:可以取到运行时对象属性的值.

    GetTOProperty:可以取到测试对象属性的值.

    SetTOProperty:可以修改测试对象的属性值

        那这里的运行时对象和测试对象又是什么呢?他们之间又存在着什么样的关系呢?

    测试对象(TO):是QTP在脚本中创建的用于描述应用程序实际对象的对象.QTP存储这些信息用来在运行时识别和检查对象.简单的说,我们就可以把对象库中所保存的对象就看做为测试对象.

    运行时对象(RO):是应用程序中的实际对象,对象的方法将在运行时被执行.

    两者之间的关系:测试对象是为了识别运行时对象而存在的.在《QTP的录制回放过程》中,我也阐述了QTP的整个工作原理。所以这里我也就简单的再提一下。QTP在录制的时候会把所操作的对象的一组属性及属性值,保存到对象库中,就是所谓的测试对象。在回放的时候,QTP 就会根据对象库里的该对象的属性及属性值去匹配实际在应用程序中的运行时对象。一但完全匹配正确就执行相应的操作。否则就会报“找不到该对象”的错。

  • QTP参数化实例

    2010-06-24 14:13:54

      在自动化测试当中,有时为了模拟真实效果,或者为了达到某种操作效果,那么势必要把脚本参数化.那么一般的针对输入值的参数化或者select选择值的参数化,操作也比较容易,这里也不多说了,直接把固定值换成变量就可以.鉴于上个星期有两个朋友都问到了针对某个对象的参数化,那么就来探讨一下针对对象的参数化.

    例:
    Browser("软件测试专业网站:51Testing软件测试网").Page("百度——全球最大中文搜索引擎").WebEdit("wd").Set "111"
    Browser("软件测试专业网站:51Testing软件测试网").Page("百度——全球最大中文搜索引擎").WebButton("百度搜索").Click
    Browser("软件测试专业网站:51Testing软件测试网").Page("百度搜索_111").Link("菜111 的QQ家园").Click

        在这个例子中,我们的目的是把这个link对象给参数化掉.这里直接把对象名参数化掉,肯定是不行的.因为我们知道QTP识别对象依靠是这个对象在对象库中的属性和属性值.而如果我们这里参数化成一个新的对象名,那么这个对象名是不存在于对象库中的,那么势必会造成在回放过程中不通过,报对象库中没有这个对象的错误.所以我第一个想到的是先让这个link对象脱离对象库,让它不用通过对象库就能识别这个link对象,那么接下来只要直接换成变量就成功了.相信大家都看到过帮助里对描述性编程的说明,通过把脚本改写成描述性编程的形式,可以让QTP在执行脚本时不要再去依赖对象库.直接把一些付有特征的属性和属性值放到脚本中,就能执行相应的操作.所以我们可以先把上面脚本改写成:

    Browser("软件测试专业网站:51Testing软件测试网").Page("百度——全球最大中文搜索引擎").WebEdit("wd").Set "111"
    Browser("软件测试专业网站:51Testing软件测试网").Page("百度——全球最大中文搜索引擎").WebButton("百度搜索").Click
    Browser("软件测试专业网站:51Testing软件测试网").Page("百度搜索_111").Link("text:=菜111 的QQ家园").Click

        这样表示后,再把这个对象在对象库中的记录给删掉.重新运行脚本后,脚本依旧能正确执行.那么接下来的操作就方便了,直接把相应的固值换成一个变量即可.我们来这么操作:

    Dim i
    i="菜111 的QQ家园"

    Browser("软件测试专业网站:51Testing软件测试网").Page("百度——全球最大中文搜索引擎").WebEdit("wd").Set "111"
    Browser("软件测试专业网站:51Testing软件测试网").Page("百度——全球最大中文搜索引擎").WebButton("百度搜索").Click
    Browser("软件测试专业网站:51Testing软件测试网").Page("百度搜索_111").Link("text:="&i).Click

        到这里整个操作过程就完成了.其实这只是一个方法,相信大家肯定还有其他方法,希望大家能留言说说自己的看法.当然如果这个对象的对象名有一定规律的话,我们还可以考虑运用正则表达式的方法,也可以达到预期的效果.


  • QTP中的步骤生成器

    2010-06-22 14:20:33

    在我们录制脚本过程中,可能会遇到这样一种情况.用object spy能识别到某个对象,但录制的时候脚本就是没生成下来.当然如果你对QTP的原理比较熟悉,可以直接把对象加到对象库中,再自己手工写代码.这当然是个比较好的解决方法.但碰到对QTP不是很熟,对vbscrīpt的语法比较陌生的朋友来说,可能需要花点功夫了.但事实上QTP还提供给我们一个方便操作的工具,叫做步骤生成器.在insert菜单里能够找到,当然按一下F7能直接调出这个工具.

      先来介绍一下这个工具.“步骤生成器”对话框有助于快速轻松地添加一些步骤,这些步骤使用测试对象方法、实用程序对象方法和函数调用,因此用户无需记住语法或者精通高级 VBscrīpt。既可在关键字视图中,也可在专家视图中使用步骤生成器。

      接下来用一个小例子来说明这个步骤生成器的使用.


    比如在QTP自带的fight程序里,在填好相应信息后,按下insert order会生成一个定单号.那么我们就用步骤生成器生成脚本来取这个order no.首先我们要做的是把这个对象加入到对象库中去.加入对象的方法,可以打开对象库来add 填加.也可以在Active screen 里找到这个对象来右击鼠标,选择ADD object.如下:


    在填出的窗口后,按下ok,然后下一个窗口继续按add,直到把对象真正加入到对象库中去.因为这边有些朋友以为第一次按了ok就已经填进去了,下面就直接close掉了,其实不是这样子的,这边是要注意的.对象我们已经准备好后,我们就在合适的地方生成需要的脚本.直接按一下F7.然后打开的了步骤生成器的窗口.如下:

    在第一个下拉选项Category我们选择test object.在第二个下拉选项object里选择我们要操作的对象,我们这里选择order no.也可以按旁边的图标,会显示这个脚本中的所有对象让你选择.然后在第三个下拉选项operation里选择我们要做的操作.这里提供了很多的操作.这里只是取值,所以选择了GetRoProperty.
    然后在Arguments里在value里填上我们要取的属性名.在Return value打上勾,设置返回值取好变量名.再按下ok整句代码就出来了.

    aa = Window("Flight Reservation").WinEdit("Order No:").GetROProperty("text")

    到这里整个过程就结束了.大家可以自己试试看.

  • QTP中测试环境的初始化

    2010-06-21 14:19:07

    在我们运行脚本前,有时候忘了清理环境.可能被测对象已经存在了,QTP再次运行时又重新打开了个相同的对象.导致后续步骤,由于QTP根据对象库中的对象匹配到了两个相同的对象,不知操作哪个对象了,于是报错.那我们有没有办法避免呢?答案当然是肯定的.我们可以在运行测试脚本前,先写段脚本来判断我们要测试的对象是否存在.如果存在可以先关闭,再执行重新打开的操作.接下去以QTP自带的Fight的登录框为例.


    首先我们用QTP中的object spy来看一下这个窗口的属性,找到我们可以利用的属性


    这边我想利用的就是这个窗口的名称属性及值,利用这个名称属性来告诉QTP该关闭哪个窗口属性.

    代码如下:

    Dim loginwin
    Set loginwin=descrīption.Create()            '创建对象名为loginwin的对象
    loginwin( "regexpwndtitle").value="Login"       ,对象属性及值
    Set child=desktop.ChildObjects (loginwin)       
    For i=1 to child.count
       child(i-1).close                    '循环寻找这个对象,一次关闭
    Next

    需要更改的地方,我用蓝色表示了,大家也可以自己试试.不过有一点要注意就是,要执行关闭窗口的关系,这个也完全依照windows的特性来做.最上面的处在激活状态的先关,然后依次关闭其他的窗口.否则脚本会无法执行.可以把这段脚本放在脚本的最前面,实现测试环境的初始化


  • QTP中一个关于Action的实例

    2010-06-16 14:15:56

     本例还是以QTP安装后自带的Flight Reservation为例来录制脚本.首先我们把登录程序系统,然后新建定单,再打开定单,最后关闭系统.分别录制成5个action,设置一个主的action为main来分别先后调用login(登录),new order(新建定单),open order(打开定单),logout(退出).

    注明:设置拆分action,选择菜单功能split Action .选择independent of each other为并列的两个action.选择Nested为主次的两个action.

    全部录制完所有action后,在main action中代码如下:

    RunAction "login", oneIteration
    RunAction "new order", oneIteration
    RunAction "open order", oneIteration
    RunAction "logout", oneIteration

    其中RunAction是一个调用action的函数,后面跟action名和要传递的参数.

    说明:

    RunActionActionName,[Iteration,Parameters]

    在这里我再引入action之间参数传递.在login action中选择菜单选项,在action properties中设置两input参数分别先后为username 和 passwd.

    这样我们就通过RunAction "login", oneIteration,"mercury","mercury"  把这两个变量分别传给username 和passwd.这边的变量先后关系分别依次对应了action properties里input参数的先后关系.

    这样我们就可以在login action中调用这两个变量了.

    Dialog("Login").WinEdit("Agent Name:").SetParameter("username")
    Dialog("Login").WinEdit("Password:").SetParameter("passwd")
    Dialog("Login").WinButton("OK").Click

    下面再来实现从一个action中传出一个变量给另一个action.

    那么我们在new order 中选择菜单选项,在action properties中设置一个output参数为orderno

    Window("Flight Reservation").WinEdit("Order No:").Output CheckPoint("Order No:")

    通过上面这句话把生成的定单号的值存放到这个ouput参数中

    RunAction "new order", oneIteration,order
    RunAction "open order", oneIteration,order

    再靠main action中这个order变量来传递,这个变量正好对应着new order里的output参数.从new order中传出来,再把这个变量传给open order.当然在open order中还要同样设置input参数.和这个order变量对应起来.

    这样就可以在open order中使用这个变量了.

    Window("Flight Reservation").Dialog("Open Order").WinEdit("Edit").Set Parameter("orderno")

    当然其实两个action之间传递参数还可以更简单点.比如一个脚本中 datatable和环境变量都是全局的,在一个脚本中的任何action都能使用.所以可以借用这两个来传递.

    通过这个例子最主要讲的是两点,拆分action和action之间的参数传递.

  • QTP中Wait与同步点的区别

    2010-05-06 20:02:50

    先说wait函数,当脚本走到wait函数时,就开始执行这个函数.如:wait(10),就等待10秒种后再继续执行下面的语句.wait函数的这个等待的时间,那相对来说是比较固定的.如上例子,一定要等待完10秒后再执行.所以写脚本的时候要自己估算一下时间.不然可能造成时间的浪费,或者等待时间的不足.

    那同步点呢.等待时间就比较灵活了,它的等待时间是不固定的.设置同步点后,当脚本执行到这句话后,脚本就开始执行等待.脚本会在规定时间内不断的去检查,所同步的对象有没有出现,一但出现,脚本就继续往下执行.不需要等完所有规定时间.如果在规定的时间内,所要同步对象还没有出现,那就提示超时的错误信息.
    例如:
    Window("Flight Reservation").ActiveX("Threed Panel Control").WaitProperty "text", "Insert Done...", 10000
    当脚本执行到这句话时,就开始执行同步等待时间.这里设置超时时间为10000.在这个时间内,脚本会不断去查看该对象的text属性的属性值Insert Done...,有没有出现.一但同步到这个属性值,就开始执行下面的脚本了.而不需要再继续等待,直到1000秒结束为止.那这样的话,这个等待时间不用自己去控制,设置好后由程序自己去判断,就比较灵活,也不会出现浪费时间的情况.能提高脚本的执行率.
  • 数据驱动在QTP的运用

    2010-05-06 14:16:51


       所谓数据驱动就是用一个数据文件把测试脚本驱动起来,来达到更接近用户化更智能的测试.其目的是把测试人员从维护复杂的脚本程序中解放出来,只需维护好数据文件即可,减少了很多修改脚本的麻烦.下面讲一下通过四种途径来达到数据驱动.

    1.datatable

    QTP本身程序就给我们提供了这么一个数据表,我们可以把测试数据或测试用例填入这个数据表中.

    如:设计用例

         username  passwd    

    case1  mercury    mercury 

    case2   xxxxxxx     xxxxxx

    录制脚本

    For i=1 to Datatable.GetRowCount   
    Dialog("Login").WinEdit("Agent Name:").SetDataTable("username", dtGlobalSheet)
    Dialog("Login").WinEdit("Password:").SetDataTable("passwd", dtGlobalSheet)
    Dialog("Login").WinButton("OK").Click
    datatable.GlobalSheet.SetNextRow
    Next

    本例是验证一个登录系统,通过DataTable不同的用例设计,驱动起这段脚本,达到测试的效果.当然上面的例子中还少一个很重要的步骤,那就是结果比较.如果不能进行结果比较的自动化测试不能够称为自动化测试.
    当然我们这里主要讲的是数据驱动,所以不在对上面的例子进行补充.

    2.文本文件

    我们可以把文本文件当成数据文件,通过对文本文件的读写操作,来实现数据驱动.

    例:文本文件内的内容

      mercury,mercuy

    读文件的代码

    Function writeorderno(orderno)
    Dim fso, myfile,username,passwd
    Set fso=CreateObject("scrīpting.FileSystemObject")
    Set myfile=fso.openTextFile("C:\testing.txt",1,false)
    tmp=split(myfile.readline,",")
    username=tmp(0)
    passwd=tmp(1)
    myfile.close
    End Function

    写文本文件的代码

    Function writeorderno(orderno)
    Dim fso, myfile
    Set fso=CreateObject("scrīpting.FileSystemObject")
    Set myfile=fso.openTextFile("C:\result1.txt",8,false)
    myfile.writeline orderno
    myfile.close
    End Function

    3EXCEL文件

    我们可以把EXCEL文件当成数据文件,通过对EXCEL文件的读写操作,来实现数据驱动.

    可以把EXCEL文件当作对象的方式来完成写的操作

    Dim Excel,ExcelSheet
    Set Excel=CreateObject("Excel.Application")
    Set ExcelSheet=CreateObject("Excel.Sheet")
    ExcelSheet.Application.visible=true
    ExcelSheet.ActiveSheet.Cells(1,1).value=1
    ExcelSheet.ActiveSheet.Cells(1,2).value=2
    ExcelSheet.ActiveSheet.Cells(1,3).value=3
    Excel.Save "C:\test.xls"
    Set ExcelSheet=Nothing

    用ADO的方式连接EXCEL文件来做读的操作


    Dim conn,input,filename
    filename="D:\公基本情况(tb_gsgk)-标准格式.xls" '
    Set conn= createobject("ADODB.Connection")
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source="&filename&";Extended Properties='Excel 8.0;hdr=yes'"
    Set input= createobject("ADODB.Recordset")
    input.Open "select  *   from [公基本情况-标准格式$] " ,conn,2,2 
    input.close
    Set input=nothing

    4.数据库

    可以利用设计数据表,把测试数据和测试用例放在数据表里,用ADO或者其他任何可以访问连接数据库的方式连接数据库,来实现数据驱动

       Dim res,cmd,sql
         Set Res=createobject("adodb.recordset")
         Set Cmd=createobject("adodb.command")
         Cmd.activeconnection="Provider=SQLOLEDB.1;Password=111111;Persist Security Info=True;User ID=sa;Initial Catalog=xhq;Data Source=192.168.191.142"  '这句话是连接数据库的数据源,要做修改
        Cmd.CommandType = 1
        sql="selec t * from 表 where name=username"
        Cmd.CommandText = sql
        Set res = Cmd.Execute()
        Set res = nothing
        Set cmd.ActiveConnection = nothing
        Set Cmd= nothing

    以上四种方法都可以帮助我们实现数据驱动,应该说数据驱动在自动化测试中运用的比较的广泛,才有必要拿出来探讨一下.


  • QTP的一些小知识

    2010-05-03 14:12:56

    1.GetCellData函数 

      作用:获取单元格的值

      例:  rowCount = Browser("xxx ").Page("xxx ").Frame("xxx").WebTable("xxx").RowCount
    For counter = 1 To rowCount
      text = Browser("xxx").Page("xxx").Frame("xxx").WebTable("xxx").GetCellData(counter,1)
      If (text = "xxx") Then
        counter = counter - 1
        selectNO = "#" & counter
        Browser("xxx").Page("xxx").Frame("xxx").WebRadioGroup("xxx").Select selectNO
        Exit For
      End If
    Next

    2.把值插入datatable里

      例:   datatable.setcurrentrow(i)
            datatable.value("name","Global")="name"
            datatable.value("passwd","Global")="passwd"

    3.用代码来启动浏览器

      Browser1 = "IE"
      StartURL = "www.51testing.com"
      IF Browser1 = "IE" THEN
         set IE = CreateObject("InternetExplorer.Application")
         IE.Visible = true
         IE.Navigate StartURL
      END IF
     

    4.ExecuteFile函数

      作用:ExecuteFile 可以直接执行vbs文件,而不需要将其导入resource中 
           ExecuteFile FileName 
      说明:where FileName is the absolute or relative path of your VBscrīpt file.

      例:ExecuteFile("F:\test.vbs")

    5.Strcomp函数 

      作用:比较文本

      例:dim strtext1,strtext2,str ,str1,comp1
         strtext1 = "xxx"
         strtext2 = "xxx"
         str = VbWindow("xxx").VbWindow("xxx").VbLabe1("xxx").GetTOProperty("text")
         str1= VbWindow("xxx").VbWindow("xxx").VbLabel("xxx").GetTOProperty("text")
         comp1=strcomp(strtext1,str,0)
         If  comp=0 Then
              msgbox “这两个串相等”
         else
           msgbox str
         End If 

    6.CaptureBitmap 

      作用:捕获屏幕

    7. GetROProperty

      作用:取对象属性值

      例:VbWindow("xxx").VbWindow("xxx").VbWindow("xxx").ActiveX("xxx").GetROProperty("TextMatrix(1,0)") 

    8.ExitAction - 退出当前操作,无论其循环属性如何。
      ExitActionIteration - 退出操作的当前循环。
      ExitRun - 退出测试,无论其循环属性如何。
      ExitGlobalIteration - 退出当前全局循环。


    9.如何使用Excel对象处理数据?
      Dim xl
      打开excel文件
      Function OpenExcelFile(strFilePath)
      Set xl = CreateObject("Excel.Application")
      xl.Workbooks.Open strFilePath
      End Function
      获得指定单元格数据
      Function GetCellData(strSheet,rwIndex,colIndex)
      GetCellData = xl.WorkSheets(strSheet).Cells(rwIndex,colIndex)
      End Function
      填充单元格数据
      Function PutCellData(strSheet,rwIndex,colIndex,varData)
      xl.WorkSheets(strSheet).Cells(rwIndex,colIndex) = varData
      End Function
      保存并推出
      Function SaveAndQuit()
      xl.Activeworkbook.save
      xl.Quit
      Set xl = nothing
      End Function

    10.连接sql数据库

      例:Dim res,cmd,sql
         Set Res=createobject("adodb.recordset")
         Set Cmd=createobject("adodb.command")
         Cmd.activeconnection="Provider=SQLOLEDB.1;Password=111111;Persist Security Info=True;User ID=sa;Initial Catalog=xhq;Data Source=192.168.191.142"  '这句话是连接数据库的数据源,要做修改
        Cmd.CommandType = 1
        sql="selec t * from 表 where name=username"
        Cmd.CommandText = sql
        Set res = Cmd.Execute()
        Set res = nothing
        Set cmd.ActiveConnection = nothing
        Set Cmd= nothing

  • QTP的录制回放过程

    2010-05-01 14:11:01

    QTP录制过程

       1.确定用于描述当前操作对象的测试对象类,并创建测试对象

       2.读取当前操作对象属性的当前值,并存储一组属性和属性值到测试对象中

       3.为测试对象创建独特的有别于其他对象的名称,通常使用一个突出属性的值

       4.记录在对象上执行的操作

    录制过程中可能出现的问题:

       1.无法识别对象

       解决方案:如果是没有相应程序的插件,而导致的对象不能识别,请填加相应的插件.如果是少量的几个控件不能识别的话,可以用合适类型的虚拟对象来代替.当然还有两个万能的办法,就是更改录制模式使用LOW-LEVEL Recording 和 Analog Recording来录制.

       2.无法生成脚本,但对象可以识别

       解决方案:把对象手工添加到对象库中去,然后手工来生成需要的脚本

     

    QTP回放过程

       1.根据对象的名称到对象存储库中查找相应的对象

       2.读取对象的描述,既对象的属性和属性值

       3.基于对象的描述,QTP在应用程序中查找相应的对象

       4.执行相关的操作

     

    回放过程中可能出现的问题:  

       1.找不到测试对象 

       解决方案:把该对象填加到对象库中去

       2.测试对象与运行时对象不匹配

      解决方案:如果是因为脚本的上下文依赖而导致的对象不能识别,请加相应的延时.如果是由于对象属性发生了变化而导致的对象不能识别,请修改相应的属性.

       3.无法执行脚本操作

       解决方案:请检查脚本程序

  • [2010年03月30日]QTP每天积累(基础知识)

    2010-03-30 14:29:04

    一、关键词  
         描述性编程 Descriptive Programming
         功能测试   Functional Test
         专家试图   Expert View
         关键字试图  Keyword View
         对象模型  Object Model
         运行时对象 Run-Time Objet
         测试对象  Test Object
    二、QTP功能测试基本方法
        用QTP进行功能测试的基本方法主要包括三个主要阶段:
    1、创建测试或组件
       有两种方法添加步骤来创建测试和组件:
       a 在应用程序或网站上录制会话
       b 建立对象库并使用这些对象在关键字视图或专家视图中手动添加步骤
    2、运行测试和组件
       使用“单步执行”、“单步跳过”和“单步退出”命令逐步运行测试或组件,或设置断点使测试或组件在预定点暂停。每当测试组件在断点处停止时,可以再“调试查看器”中查看其变量的值。
    3、分析结果
        通过两种方式查看其结果:在“结果”窗口中查看结果;自动报告运行会话过程中检测到的缺陷。
    三、视图与对象模型
        关键字视图
        通过关键字视图,QTP提供了一种模块化的表格格式创建和查看测试或组件的步骤,每个步骤在关键字视图中都是一行,这样用户可以轻松的修改任何一部分组成。
        专家视图
        QTP在关键字视图中的每个节点在专家视图中对应一行脚本。
    对QTP来说,其核心编码语言是Visual Basic Script,因此,如果熟悉VBScript,可以运用自如的添加和更新语句,并通过编程方式增强测试和脚本,而这一切必须在专家视图中完成。更为重要的是,有些操作必须在专家视图中才可以完成,如要处理动态对象、客户化报告、获取对象运行时的属性值等等。
       QTP里所有的操作都是基于对象进行的。
       测试对象模型
       每个测试对象类都有一个可以唯一标志属于该类的对象的属性列表,以及一组QTP可以对其进行录制的方法。它包括测试对象(Test Object)和运行时对象(RunTime Object).
       测试对象是QTP在测试或组件中创建的用于表示应用程序中的实际对象的对象。QTP存储有关该对象的信息,这些信息有助于它在运行会话期间标识和检查该对象。运行时对象是网站或应用程序中的实际对象,在运行会话期间执行针对该对象的方法。
Open Toolbar