我不在办公室就在星巴克,我不在星巴克就在去星巴克的路上

发布新日志

  • TestComplete测试计算器实例(转载)

    2008-05-06 16:53:17

     

    TestComplete测试计算器实例

    qiguojie原创文章,转载请注明出处,非常感谢!

    最近换了工作,做管理不做技术了,因此钻研东西的时间很少;最近是因为写自动化测试规划,要选择一种测试工具,特意学习了TestComplete,不过正在学习中,希望可以和大家分享一些学习的经验,希望和大家多多交流,共同进步。

    我是在网上找的TestComplete 5,并且破解后使用的(因为Demo版存在若干限制),学习可以,真正要给公司用时我还是希望公司可以出钱买个正版(根据了解,不是很贵好像),也希望大家支持正版软件

    TestComplete的简单使用步骤:
    1、打开TestComplete
    2、选择菜单 File - New - New Project创建一个新项目
    3、选择General - Purpose Test Project,然后选择Language为Delphiscrīpt后OK
    4、Select Project Items中默认,然后Finish即可
    5、在Project Workspace的Project Explorer中点击脚本对应的Unit1单元文件
    6、复制下面的代码到单元文件
    7、保存,然后F9执行


    //========================
    //Author:qiguojie
    //Date:2008-04-30
    //scrīpt Type: Delphiscrīpt
    //========================
    procedure Test1;         //执行测试
        var w1 : OleVariant;
        var num : OleVariant;
        var w2 : OleVariant;
        var w3 : OleVariant;
        i : Integer;
    begin
    //对象定义区
        w1 := Sys.Process('calc').Window('SciCalc', '计算器');   
        w2 := w1.Window('Button', '**');   
        w3 := w1.Window('Button', '=');   
    //循环执行10次
        for i := 0 to 9 do
        begin
            num := w1.Window('Button',i);
            num.ClickButton;
            w2.ClickButton;
            num.ClickButton;
            w3.ClickButton;    
        end;
    end;

    procedure Test2;
        var p1 : OleVariant;
    begin
        if not Sys.Process('calc').Exists then
        begin
            p1 := Sys.Process('Explorer');
            p1.Window('CabinetWClass', 'DDT&NameMapping').Window('SHELLDLL_DefView').Window('DUIViewWndClassName').Window('DirectUIHWND').Window('CtrlNotifySink').Window

    ('SysListView32', 'FolderView').Keys('[Win]r');
            Sys.Keys('[Hold][Win]r[Release]');
            p1.Window('#32770', '运行').Window('ComboBox').Window('Edit').Keys('calc');
            p1.Window('#32770', '运行').Window('Button', '确定', 2).ClickButton;    
        end
        else begin
            log.warning('The calc is running!!');
        end;
    end;

    procedure Main;
    begin
        try
            Test2;
            Test1;
        except
            Log.Error('Exception', ExceptionMessage);
        end;
    end;

    //=====================

     

    脚本说明:

    这个是一个使用计算器自动计算 0-9每个数自乘的脚本。
    脚本语言我选择的是Delphi,因为TC的C++脚本和LR的C差太多,我感觉读起来非常难懂。


    在使用TC中我发现了2个问题:
    1、TC的脚本中对中文的处理不是很好,容易出现问题(例如添加中文的注释或者打印Log时输出中文的信息,有时会报错)
    2、Main过程如果放在Test1,Test2上面,就无法找到Test1和Test2,我记得是可以声明一下,但是好久没用Delphi不会弄了

    通过这个实例,我简单的掌握了TC脚本的一些基本概念,目前还没有找到添加检查点以及其他的一些功能,等以后学习的多了,再总结一下吧。

    可以+MSN交流:qiguojie at hotmail dot com

  • TC中Add File & Compare File使用介绍(转载)

    2008-05-06 16:51:48

     

    添加需要比较的文件有以下3种方法:软件测试专业网站:51Testing软件测试网IH[ [s~
      软件测试专业网站:51Testing软件测试网 @^#L x"q3\
    //1.Add files from the Files editor软件测试专业网站:51Testing软件测试网*Zwj6sP[#Y0n
    //2.Add files from the Project Explorer软件测试专业网站:51Testing软件测试网,qy Kxj
    //3.Add files from scrīpts

    在TC里,封装了好几个文件比较的方法,主要有以下几种:
    pMzQqx~:]0//4.Comparing files by bytes软件测试专业网站:51Testing软件测试网.| vnbb$Zj%gA
    //使用正则表达式比较文件(RegExpr)
    Nk?M _'e2T0//5.Comparing files with variable parts

    具体使用如下:

    procedure AddfileFromscrīpt;软件测试专业网站:51Testing软件测试网%yi;z"BVG,u Rb"Q
    begin
    (Q!cqyFl`v0  if not Files.Add('..\..\TestFile_old.txt', 'TestFile_old') then软件测试专业网站:51Testing软件测试网 F["y-[gR
        Log.Message(Files.LastError);软件测试专业网站:51Testing软件测试网XL3l7JW5l
      if not Files.Add('..\..\TestFile_new.txt', 'TestFile_new') then
    W7F/l;l3yC%w0    Log.Message(Files.LastError);
    &C6rGD+ha0  if not Files.Add('..\..\TestFile_new_space.txt', 'TestFile_new_space') then软件测试专业网站:51Testing软件测试网i j~/@-h"{P
        Log.Message(Files.LastError);
    o)^@jS-Yk*C0end;

    //获取文件方式软件测试专业网站:51Testing软件测试网j_+{b TK$Ut
    //FileNameByIndex、FileNameByName、NameByIndex 、NameByFileName 、FileNamesList、NamesList
    rH$Is9S8M/zq0procedure GetFile;
    3g i1e/[7sj j*Orc0begin
    6b1w8i-]6F3t,F9M}%xT0  showmessage(Files.FileNameByIndex(0));
    h2D,~+rM2?&X0end;

    //常用比较文件方式软件测试专业网站:51Testing软件测试网 @z%e/L N)? q+Y K {%S
    procedure ComparefileBytes;软件测试专业网站:51Testing软件测试网%gX Z\7? k;W
    begin软件测试专业网站:51Testing软件测试网;ST,?w1\2T\
      if not Files.Compare(files.FileNameByName('TestFile_old'), files.FileNameByName('TestFile_new')) then软件测试专业网站:51Testing软件测试网Du)f3J3YB;|?%|La
        showmessage(files.LastError);软件测试专业网站:51Testing软件测试网(FMh6R4\8B8wK
    end;

    //通过Hash值比较文件
    z|!`t4] H%b0procedure ComparefileHash;
    V`i!Sx }l6G!{{\0var Hash : OleVariant;//Hash记录两个文件的差异值软件测试专业网站:51Testing软件测试网-j,rWc0DRmw_
    begin
    Xu#a&cDcq0  Hash := Files.CalculateHashValue(files.FileNameByName('TestFile_old'), files.FileNameByName('TestFile_new_space'));
    z&A#y/}F}O0  if not Files.Compare(files.FileNameByName('TestFile_old'), files.FileNameByName('TestFile_new_space'),Hash) then软件测试专业网站:51Testing软件测试网4@JA'qnx"_'|qz
        showmessage(files.LastError)
    IBI0Jg0  else showmessage('The two files is equal!');
    |2OrE4tE0end;

    procedure Test_Sample;软件测试专业网站:51Testing软件测试网3x t$ZJI
    begin
    a6yt;YXu-wit0  Aliases.TCSampleForm.Drag(224, 17, 162, 0);
    T4t.v3l'@9g:}$@0  Aliases.TCSampleSys.Process('Explorer').Window('Shell_TrayWnd').Window('ReBarWindow32').Window('MSTaskSwWClass', '运行应用程序').Window('ToolbarWindow32', '运行应用程序').CheckItem('TestComplete - C:\Documents and Settings\temp\桌面\hzr-TechED\TCSamples\TCSamples', -1, false);软件测试专业网站:51Testing软件测试网,P8W-t$~!}i0QCs
    end;


  • TC中如何添加对象及比较对象(转载)

    2008-05-06 16:50:54

     

    自动化的过程中,经常需要对两个对象(或属性)进行比较,看否前后一致,来判断某个对象是否被修改过,而在TC中就提供了这样的方法:Objects.Compare(Object1,Object2)

    首先,我们要添加两个对象,可以在脚本录制或回放过程添加,也可以在这之前添加,通过以下方法可以添加对象:

    //添加对象属性方式软件测试专业网站:51Testing软件测试网"`yh J w`wq Z z+G
    //1.Adding property collections from the Object Browser软件测试专业网站:51Testing软件测试网 xH;M-_\9QA9|
    //2.Adding property collections from the Object Properties window软件测试专业网站:51Testing软件测试网^w)I+CR|J:E h1?
    //3.Adding property collections from the Tools toolbar 软件测试专业网站:51Testing软件测试网|w#Uif+f9~
    //4.Adding property collections during recording软件测试专业网站:51Testing软件测试网$RL^6jbRO;i-A
    //5.Adding property collections from scrīpts软件测试专业网站:51Testing软件测试网 PYC9Ta^ypS
    //6.Adding property collections from the Objects editor软件测试专业网站:51Testing软件测试网&Z/O?bz5Fxm5R
    //7.Adding property collections from the Project Explorer

    接下来就是如何比较了,这些方法具体使用如下:

    //在脚本中添加对象属性
    e\vF{F(ERd?0procedure AddObjectfromscrīpt;软件测试专业网站:51Testing软件测试网#e^.H)h2]*Y ?X4U
    var软件测试专业网站:51Testing软件测试网 U/Vc7i;W$jZEN
      w, PropertyNames, CollectionName : OleVariant;
    gf _U F%U5c!HG]/t0begin
    .SG KV{ Uj&k"W0  //激活窗体软件测试专业网站:51Testing软件测试网Sm \{"Hlr$E
      Aliases.TCSampleForm.Activate;软件测试专业网站:51Testing软件测试网+TXc9D.B:nB.M
      //保存当前激活的窗体对象 软件测试专业网站:51Testing软件测试网 g"j+XhM
      w := Sys.Desktop.ActiveWindow();软件测试专业网站:51Testing软件测试网|v5mwjXHG.d
      //设置将要保存的属性名称   软件测试专业网站:51Testing软件测试网:|+B3Cl|T|3z
      PropertyNames := 'WndCaption';
    7o3J&N#O r@#Y+t:S0  //设置在Object集合中保存的名称软件测试专业网站:51Testing软件测试网})_jP8{4M\
      CollectionName := 'TCSampleFormName';
    L;xI N"] GU.f!l0  //保存激活窗体对象属性
    v[z)p-?0  Objects.Save(w, CollectionName,PropertyNames);
    Gqv:U1hU T+Q0end;

    //比较操作数1的对象属性名称是否改变软件测试专业网站:51Testing软件测试网1\;q8W oR#oI$e@
    procedure CompareOperend1;
    H2k6QE8N3w0begin
    fx,Gr2Yc0  if not Objects.Compare(Aliases.TCSampleOperand1, 'TCSampleOperand1') then
    %gK#ErS)W0    showmessage('Objects are not identical.'+Objects.LastError)软件测试专业网站:51Testing软件测试网,K%GY)~2Y:E-l
    else showmessage('Objects are identical.');
    :Z9G{thQ W0end;

    注,以上脚本都很简短,是因为对象做了别名映射。

     

  • TC中Regions对象的使用介绍(转载)

    2008-05-06 16:49:42

     

    在TC中,提供了一个Regions对象集合,专门管理图像对象,可以通过以下方法添加图像对象到Regions集合中:

    //添加图像方式:软件测试专业网站:51Testing软件测试网:@T-K-T/@q `
    //1.Add images from the Regions editor
    X LIa6C0SE0//2.Add images from the Project Explorer软件测试专业网站:51Testing软件测试网1XMv_r,n-i9j&r!B
    //3.Add images from the Image Viewer软件测试专业网站:51Testing软件测试网albFi(W;I
    //4.Add images during recording
    p+XH@"~ qE,X0//5.Add images from scrīpts

    Regions对象封装了几个常用的方法,如Regions.AddPicture(添加图像)、Regions.GetPicture(获取图像)、Regions.FindRegion(查找图像)、Picture.Find(查找图像)等,具体使用如下:

    //在脚本中添加图像
    c7G3u#xdhK,Q:R0procedure AddImageFromscrīpt;
    3}3`~ qA0begin软件测试专业网站:51Testing软件测试网&P%@z~`%|~
      //添加主窗体图像软件测试专业网站:51Testing软件测试网 R:O]F,kofM k[
      Regions.AddPicture(Aliases.TCSampleForm,'TCSampleForm');软件测试专业网站:51Testing软件测试网w`oF C/U2} T*Y"m
      //添加主窗体中操作数1的图像
    F P5j0}2Pw4R0  Regions.AddPicture(Aliases.TCSampleOperand1,'TCSampleOperand1'); 
    5gP g9j ?7[0end;

    //回放脚本过程中截取图像与在Regions集合中的图像进行比较
    /^D[4_W0procedure CompareImage_Playback;    软件测试专业网站:51Testing软件测试网+{I5Ed0zT.X}
    begin
    V7@N%h _7T{0NC0  if not Regions.Compare('TCSampleFormChangeName', Aliases.TCSampleForm) then软件测试专业网站:51Testing软件测试网J f(wr&R(O9B
        Log.Error('The compared regions are not identical.', Aliases.TCSampleForm.Name);   软件测试专业网站:51Testing软件测试网b:BTC%USGaw#W2}
    end;

    //Regions集合中两个图像进行比较 软件测试专业网站:51Testing软件测试网8c#X8j1I_h]1t
    procedure CompareImage_Regions; 
    2J7bl8P[R#o0begin 软件测试专业网站:51Testing软件测试网.C/Jw/Z%M[ v0A
      if not Regions.Compare('TCSampleFormChangeName', 'TCSampleForm') then
    ny_L'g y.x-G{ ln0    Log.Error('The compared regions are not identical.', 'TCSampleForm');
    yU*O w[(@0end;

    //使用Picture对象比较两个图像   软件测试专业网站:51Testing软件测试网Mn6y*~]1B9R8Jl?
    procedure CompareImage_Picture;
    ? P"V/Vo oD3}0var pict1,pict2 : olevariant;
    +U;r([ CU ~2\ sY5ZY0begin   软件测试专业网站:51Testing软件测试网A`x"z @\QM H
      pict1 := Regions.GetPicture('TCSampleForm');软件测试专业网站:51Testing软件测试网 F)lY1pY\-cQ
      pict2 := Regions.GetPicture('TCSampleFormChangeName');
    %EB dr"kTC$F0  if not pict1.Compare(pict2) then软件测试专业网站:51Testing软件测试网 J0w0N Ay3G3j
        Log.Error('The compared regions are not identical.');    
    8k:c%`~M G~(xa0end;

    //使用Regions对象的FindRegion方法查找图像  软件测试专业网站:51Testing软件测试网a.W k$Dv#unJ
    procedure FindImage_Regions; 软件测试专业网站:51Testing软件测试网([ u&x V#aFm5Z%J
    var pict1,pict2 : olevariant;软件测试专业网站:51Testing软件测试网b2j!r*J3{'m
    begin  
    1T2CLM N j0  if (Regions.FindRegion('TCSampleOperand1','TCSampleForm') = nil) then软件测试专业网站:51Testing软件测试网[5FW.G,ZA
        Log.Warning('Picture not found.');     软件测试专业网站:51Testing软件测试网\u yz-~ {Rh
    end;

    //使用Picture对象的Find方法查找图像 软件测试专业网站:51Testing软件测试网[BfK4a.^ ?o
    procedure FindImage_Picture;
    me}B,CJu J'i0var pict1,pict2 : olevariant;软件测试专业网站:51Testing软件测试网2X)}X0U_O E wDw:a8X
    begin   软件测试专业网站:51Testing软件测试网yf-Yx_H
      pict1 := Regions.GetPicture('TCSampleForm');
    2sam6J3b0  pict2 := Regions.GetPicture('TCSampleOperand1');软件测试专业网站:51Testing软件测试网8ih iO(~
      if (pict1.Find(pict2) = nil) then软件测试专业网站:51Testing软件测试网X i$m0Ox
        Log.Warning('Picture not found.');       
    7F't4c!J1WlQ!D6t0end;
    M"k\4e~d0

  • TC检查点

    2008-05-06 16:48:26

     

    2008-05-04 21:08:57 / 个人分类:TestComplete

    TC6.0以上版本中,增加了支持checkpoint(检查点)的功能,在一定程度上减轻了开发脚本的工作量,可以在录制脚本过程中添加,也可以以一般方式添加检查点,非常方便灵活。录制过程添加如下:

          

    例如,要建立第三个Object检查点,见以下界面:

     

     

    可以通过点击右边的 图标,添加对象,设置好对象名称,点击OK,就会弹出对象属性选择的对话框,选择需要检查的属性(checkpoint),TC就会自动生成检查点的脚本,并插入到脚本文件中,有需要,可以再适当对脚本做些处理,非常方便。

     

    其他CheckPoint的使用类似。

  • TestComplete从Excel取值实例

    2008-05-06 16:46:44

     

    TestCompleteExcel取值实例

    qiguojie的51testing原创文章,转载请注明出处,非常感谢!

    因为曾经使用过Winrunner 7.6,对其自动的数据驱动测试功能印象非常深刻(独立的一个功能模块,可以方便的从Excel中读取数据进行参数化的输入),非常的方便。刚开始接触TestComplete时就记得2点:一个是WR支持鼠标操作录制但很不好用,TestComplete对其支持就非常好;另外一个就是WR的数据驱动功能比TC的强太多。

    但是数据驱动测试是自动化测试的一个应用非常多的测试类型,因此我查询了TC的帮助文件,写了一个实例出来,描述怎么才能从Excel文件中获取对应的数据。

    TestComplete的简单使用步骤:
    1、打开TestComplete
    2、选择菜单 File - New - New Project创建一个新项目
    3、选择General - Purpose Test Project,然后选择Language为Delphiscrīpt后OK
    4、Select Project Items中默认,然后Finish即可
    5、在Project Workspace的Project Explorer中点击脚本对应的Unit1单元文件
    6、复制下面的代码到单元文件
    7、保存,然后F9执行

    //========================
    //Author:qiguojie
    //Date:2008-05-05
    //scrīpt Type: Delphiscrīpt
    //========================

    //定义全局变量
    var
         MSExcel : OleVariant;
         ExcelFile;

    //声明读取值的函数
    function ReadExcel(i,j):string;forward;

    Procedure MyTest;
    var
        i,j : Integer;
        FileName : String;
    begin
        FileName := 'E:\1.xls';
        j := 1;

    //检查Excel是否启动
        ExcelFile := Sys.WaitProcess('EXCEL');
        if ExcelFile.Exists then
            ExcelFile.Terminate();
        try
            MsExcel := Sys.OleObject('Excel.Application');
        except
            Log.Warning('Unable to initialize MS Excel.', '', pmHigher);
            Exit;
        end;

    //打开对应Excel文件
        MsExcel.Workbooks.Open(FileName);

    //循环取出10个值
        for i := 1 to 10 do
        begin
            log.message(ReadExcel(i,j));
        end;
    end;

    //读取值的函数实现
    function ReadExcel(i,j):string;
    begin   
        Result := MsExcel.Cells(i,j).Value;
    end;


    写完这个实例,我相信大家都可以知道怎么从Excel中读取某一个cell(块)的值了;
    可以+MSN交流:qiguojie at hotmail dot com

  • TestComplete DDT (Data-driven Testing) 数据驱动测试介绍和简单实例【Terry Young】

    2008-02-04 10:41:26

    TestComplete DDT (Data-driven Testing) 数据驱动测试介绍和简单实例

    原著者: Terry Young软件测试专业网站:51Testing软件测试网.c!R;{7i ~Alz Y!`
    适合程度: 进阶

    读完此文章之后,读者应该可以:

    1.      认识 DDT (Data-driven Testing) 是什么、它的用途和原理软件测试专业网站:51Testing软件测试网0c;jW3X@;@H
    2.      按本文内的实例去练习和观察 DDT 的运行和原理
    /O e7P{0Ij:j1495383.      笔者的一些发现 (DDT 和亚洲文字的兼容)

    DDT 是什么?

    一般的自动化测试脚本回放,都是模拟使用者的动作,包括鼠标和键盘。

    然而,你可能会有需要对相同的控件上作更大或者更多元化的测试覆盖范围。

    DDT (Data-drive Testing) 顾名思议就是数据驱动测试,概念就是基于同一个测试回放动作下由外部来源注入不同数据的测试。而在 TestComplete 里面 DDT 实际上是内置的一个类 (Class) 包含特定的属性 (Properties) 和函数 (Methods),是要测试员在代码内编写来实现的。

    假设,你录制了一个日期控件上面输入 28/02/2008 的过程,回放时当然没有问题了。不过,如果输入其他无效值的话 (例如 31/02/2008) 就能测试出对像的容错能力。此时,你可以考虑将数据 (日期) 和动作逻辑 (日期控件上的操作) 分开,将代码演变成数据驱动测试

    实现 DDT 的基本步骤就是将你录制后所生成的、硬写的 (hard-coded) 的值,修改为 DDT 的逻辑。

    所谓 DDT 的逻辑,基本上是以一个回圈 (Loop) 来进行如下的几步:

    1.          建立数据驱动,并读入数据软件测试专业网站:51Testing软件测试网5Y:O%|+^.@x{'?8Lp
    2.          结合所读入的数据和所录制的动作软件测试专业网站:51Testing软件测试网3~)z \GeIRV
    3.          验证结果软件测试专业网站:51Testing软件测试网'V8di^i
    4.          继续下一个数据纪录 (回圈,直至最后一个纪录为止)
    8sr } zV0?1495385.          关闭数据驱动,DDT.CloseDriver(Driver.Name)

    DDT 可用的数据来源

    TestComplete 的 DDT 可以利用不同的数据来源,有三种:

    1.          ADO database软件测试专业网站:51Testing软件测试网/`c5w)w6o5W Km
    2.          Excel sheet
    rC$c7E B*D,`3H1495383.          CSV (逗号分隔文件)

    DDT 实例

    如果你仍然觉得 DDT 好像很抽像似的,以下是一个很简单的实例,只要按以下步骤准备的话,你在 TestComplete 内回放并且观察之后,希望能令一些比较迷茫的读者终于开窍吧。

    这个实例,将会以 Notepad (记事本) 作为测试对像,以一个Excel 档案作为数据来源,利用 DDT 进行数据驱动测试,将 Excel 的每行资料输入在 Notepad 内,每栏以 Tab 作分隔。

    先建立一个 Excel,可以将以下的表进行剪贴,将 Excel 保存成 SampleData.xls。

    Field1

    Field2

    栏位三

    金额 (边界测试)

    Val A1

    Val B1

    C1

    0

    Val A2

    Val B2

    C2

    1

    Val A3

    Val B3

    C3

    -1

    Val A4

    Val B4

    C4

    10000000

    Val A5

    Val B5

    C5

    -10000000

    最好先开一个新的 Project / Project Suite。

    如你的 Project 内未有 TestedApps,右按 Project > Add > New Item,选择 Win32 Tested Applications。

    在你的 TestedApps 加入 C:\Windows\notepad.exe 这个测试对像,并保存 TestedApps。

    在你的 Project > scrīpt 内建立单元,将以下代码剪贴,修改一下含有 SampleData.xls 这行代码,指向实际档案的绝对路径,然后保存和运行 TestDriver 这个函数。


    ' (Main routine)
    .g c_(L-kYWe{149538
    Sub TestDriver
    2~4{4b3g*r4U:tS149538   ' 运行 Notepad
    F"tBTZ149538
       TestedApps.RunAll 软件测试专业网站:51Testing软件测试网_!S!_q7Z
       ' 建立数据驱动
    )hF Z`p149538   Dim Driver软件测试专业网站:51Testing软件测试网{\pN({ b
       Set Driver = DDT.ExcelDriver("Files/SampleData.xls", "Sheet1")   

       ' 在 notepad 内输入资料栏
    R#E5gyu1F149538   For i = 0 To DDT.CurrentDriver.ColumnCount - 1
    ;e K#` dMvCL149538      Call Appendtext(DDT.CurrentDriver.ColumnName(i))
    }Z%vtR'bl149538      If i < DDT.CurrentDriver.ColumnCount - 1 Then 
    ES[ovdu149538         Call AppendText(vbTab) ' Tab 分隔
    ;\4gd-UH W-q)IPq149538      End If  
    L [8^)Jx1e/B149538   Next 
    %^!mg5O(auF149538   Call AppendText(vbNewLine)  

       ' 回圈处理每列纪录软件测试专业网站:51Testing软件测试网a(S$PF J?+e
       While Not Driver.EOF
    o|,pMG2DSV+X149538      Call ProcessData() ' 处理纪录软件测试专业网站:51Testing软件测试网N1p2Jw2[&i}
          Call AppendText(vbNewLine)软件测试专业网站:51Testing软件测试网bd'o-mA;C4` X
          Call Driver.Next() ' 移到下一列纪录
    j6s!edR2a d149538   WEnd

       ' 关闭驱动软件测试专业网站:51Testing软件测试网-o5H+vJl ~!hi
       Call DDT.CloseDriver(Driver.Name)
    \i D1M)@fTK149538End Sub

    ' 处理一列纪录软件测试专业网站:51Testing软件测试网2W9@h?(YXs a { @1c
    Sub ProcessData软件测试专业网站:51Testing软件测试网 IcMu#Xr5g
       Dim i
    8jy*k#y3Kl_ S149538   ' 处理一列内每栏的资料
    6T)J"V g$w/EW XS149538   For i = 0 To DDT.CurrentDriver.ColumnCount - 1软件测试专业网站:51Testing软件测试网 Ko c{W'd
          Call Appendtext(DDT.CurrentDriver.Value(i))
    SDXk9fa(h149538      If i < DDT.CurrentDriver.ColumnCount - 1 Then
    Z*_l1j:Ix ?r149538         Call Appendtext(vbTab) ' Tab 分隔软件测试专业网站:51Testing软件测试网~s cbT8G/m
          End If  
    5z.vR2qO-h4OG149538   Next
    pv)OE WD `149538End Sub

    ' 辅助函数,会在 notepad 字串结尾加插参数所提供的值软件测试专业网站:51Testing软件测试网%C2aBQ"J&o ~-jG
    Sub AppendText (str)
    y`,jQ$HIB"i149538   Dim p1
    `+m,S E4XY-T.C149538   Set p1 = Sys.Process("notepad").Window("Notepad").Window("Edit", "", 1)

       ' 备注:用 p1.Keys(...) 似乎有个弊处,就是不能模拟中文字的输入,
    w V i.I3{ kj$E149538   ' 除非 p1.Keys(...) 里面的值是硬写去的 (hard-coded)  软件测试专业网站:51Testing软件测试网]*H\W!j7];V
       p1.wText = p1.wText & str ' 所以唯有利用 wText 属性,赋以资料软件测试专业网站:51Testing软件测试网Zx+Q;W b.C6V]
    End Sub


    希望读者可以透过此实例的运行,观察一下 DDT 的制作和原理。更深层次的代码编写参考资料,还是参考 TestComplete 帮助文件比较好。

    笔者的一些发现 (DDT 和亚洲文字的兼容)

    以下只是笔者的观察和推论,并未真正去证实过的。欢迎留言纠正。

    或者读者也会留意到我这例子,基本的逻辑很像 TestComplete 的帮助文件里面的例子一样;我只是将测试对像转为用 Notepad 而已,因为实际上我们多数是要利用数据在测试对像的介面上模拟输入的动作。

    很遗憾的是,如果用 Keys( 数据值 ) 这样的做法的话,运行时只是能够键入英数,而中文字的输入好像模拟不到。

    所以,实例中代码内AppendText 这个函数里面,我没有用 p1.Keys(…),而是直接改变 notepad 的 edit 控件内 wText 这个属性。严格来说,这不是模拟键盘的动作的,所以,如果你的对像控件会因键盘事件而触发一些功能的话,这个直接改变属性的做法可能会触发不到的。

    - 完 -

  • TestComplete 5+ 与 Borland Starteam 的整合【出自Terry Young】

    2008-02-04 10:35:16

    原著者: Terry Young

    Borland 出品的 StarTeam,是个版本控制软件 (Source Control)。

    如果你的团队是用 Borland Delphi 开发软件的,也有可能正在利用 Starteam 来作为版本控制的。

    TestComplete 自从版本 5 以内,亦支援使用 StarTeam 来控制测试项目档案的版本的。

    不过,就连国外的网站也偶尔看到有人问:‘我的本机上已经安装了 StarTeam Client 了,为何在 TestComplete 的 Tools > Options > Source Control 里面仍未见有 StarTeam 可供选择呢?’

    如需要将 TestComplete 和 StarTeam 整合,你是需要在机上安装 Borland StarTeam SCC Integrations 的。可以在以下官方网址下载 (页内找一找 SCC 这个便是):

    http://www.borland.com/downloads/download_starteam_integrations.html

    安装之后,或需要重新启动。

    再启动 TestComplete 之后,就可以在 Options 里面选择了。

    - 完 -

  • TestComplete 5 / 6 的选项设置介绍【 出自Terry Young 】

    2008-02-02 16:39:24

    原著者: Terry Young

    适合程度: 初学至进阶

    博客:   http://www.51testing.com/?20638

     

    读完此文章之后,读者应该学会:

    1.      Tools > Customize Keyboard 的用途

    2.      Tools > Default Project Properties… 的用途和影响

    3.      Project > Properties的用途和影响

    4.      Tools > Options 的用途和影响

     

    本文章不是将所有设置都介绍,而是针对一些值得一提的设置,属于经验之谈。无论你是测试员或者是需要为队伍统一一下一些设置,希望你会觉得本文章有点用。

     

    Tools > Customize Keyboard

    不知道有多少人像我一样,是个键盘怪癖者,学习任何软件都特爱学习快捷键,希望键不离手,不希望被鼠标操作拖慢效率。就正如很多从事图像设计的高手也很熟练  Photoshop 等等工具内的快捷键一样。

     

     

    Tools > Customize Keyboard 就是自定义快捷键设置的地方。各种功能都会在此纪录其目前的快捷键 (Current key)

     

    你可以赋以新的快捷键,直接在 Press new shortcut key 里面键入你的快捷键组合便可,但需要留意 Shortcut currently used by 看看你所键的快捷键是否已经被另一功能使用。

     

    例如下图,笔者的个人喜好之一就是将 Code Explorer 赋以快捷键。这样的话,在编写代码时键不离手就可以很快得到代码方面的基本帮助。

     

     

    不过,笔者也同时建议不要将已经存在的快捷键更改,尤其是如果你知道不一定会在同一台电脑操作或者你的电脑不只是固定一人操作的话,以免因为不统一而一时不习惯。

     

    另外,Tools > Options 内有一部份是设置全局快捷键的,就算 TestComplete 不是当前的画面也可以用的,但这些键不是在 Customize Keyboard 里面设置的。文章后面会有介绍。

     

    Tools > Default Project Properties…

     

    Default Project Properties 的设定,就是影响你目前及将来建立的 Project 里面的 Properties 的设定。

     

     

    首先值得一提的就是 Project > General > Character encoding

    如果你所做的测试开发,会使用一般亚洲语言 (中文 [ 繁体 / 简体 ]、日文、韩文等),或者处理一些已国际化 (i18n) 或者本地化 (l10n) 的测试对像,你或需要设置成 UTF-8 或者 UTF-16,避免代码乱码的问题。

     

    当你有已经存在的单元档案后才转换 Encoding 的话,TestComplete 会在当你下次编辑并且保存单元档案时对档案进行转换。

     

    唯独 TestComplete 6 则多了个 Auto 的选择,是不会对已经存在的档案进行转换。不过如无特别原因,笔者不建议使用。

     

    UTF-16 應該注意它和你連接外部的版本控制工具的兼容。相信如果你明白你的測試項目是有 UTF-16 的需求的話,你應該是個高手的了,可以參考一下幫助文件。

     

     

     

    另一个值得一提的是 Project > Playback 的选项。

     

    根据帮助文件所说明,Error Dialog 是只会对 Delphiscrīpt 的单元起作用的。它是当回放脚本时遇到错误时是否弹出提示窗口要求测试员是否终止回放的。

     

    如果你的测试对像可能存在一些效能上的问题,笔者建议你调整一下右面那四种时间上的设置。尤其 Auto-wait timeout, ms 的设置,预设是 10000 (10 ),笔者目前的习惯是调整成 30000 的。Key-pressing delay, ms 我也习惯从预设的 0 改为 20

     

    On unexpected window 主要是控制回放时遇到未预期的窗口时应该怎么处理。

     

    On overlapping window 是控制当回放是遇到被其他窗口覆盖正要操作的窗口是是否理会那前面的窗口。

     

    Project > Properties

     

     

    Project > Properties 基本上就是和 Tools > Default Project Properties 里面的设置一样的,但只是对当前的 Project 起作用。

     

    Tools > Options

     

     

    上图这部份是设置 Global Shortcuts (全局快捷键) 的,就算 TestComplete 不是当前的画面也可以用的,但这些键不是在 Customize Keyboard 里面设置的。

     

    笔者建议记一下,用得多就容易习惯的了。

     

    另外也提示一下,如果你的测试对像正好也有全局快捷键的话,留意一下有没有发生冲突,你是可以在这里更改的。更改时也留意有没有和 Customize Keyboard 里面的设置有冲突。

     

     

    上图这部份里面,可以设置预设的脚本编程语言。笔者用 VBscrīpt 的。

     

     

    上图这部份是设定 Visualizer,可以设置脚本在录制或者回放时,是否保存抓图。

    这个抓图功能很好,尤其当实际运行脚本后测试出错误时,你就有抓图可以利用它作为向开发组提供错误报告的有力证据 (呵呵,测试报告是讲求证据的)

     

    笔者也建议按 Configure,适度调节抓图的图像格式。预设的 BMP 实在会是很大的,笔者就试过,刚开始的项目,代码不多,经过几次运行之后,所有抓图加起来就已经超过 3MB 了。所以笔者都习惯都会转成 JPG,已经很足够。

     

    录制或者运行后,你回顾代码就会发现代码旁边的图示,按下去就可以浏览抓图了,而且,多次运行的抓图都有纪录的。右按图示的话,是有菜单提供给你去一次过或逐个清除抓图的,不一定要到我的电脑去删除。

     

    深入一点的话,笔者会建议,测试组具体进行录制和尝试运行的电脑,不需要抓图,因为主要都只是进行测试代码开发和试行的工作;最好设置另一台独立的电脑,是专门独立负责正式运行测试组的完成品,这台电脑的硬盘空间最好是足够有余的。

     

     

    也留意 Engines > Log > Images > Configure 里面同样有图像格式的设置,也是例行地转为 JPG 比较化算。这些图片是纪录在脚本运行后所生成的测试报告 (Logs) 里面的。

     

    (TestComplete 6+ only)

     

    TestComplete 6 多了个 Name Mapping 的选项。管理者应该深思熟虑决定并且为队伍统一设置。

     

    主要就是 TC 6 增强了代码编辑介面的 Code Completion 功能,可以将 Name Mapping 生成的 Aliases (物件别名) <SPAN lang=ZH-CN style="FONT-FAMILY: SimSun; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-f

  • 介绍 TestComplete 的 LLP (Low-Level Procedures)【从Terry Young转载】

    2008-02-02 16:32:49

    原著者: Terry Young

    适合程度: 初学至进阶

     http://www.51testing.com/?20638

     

    读完此文章之后,读者应该认识:

    1.      LLP (Low-Level Procedures) 是什么、它的原理、录制以及编辑的基本方法。

     

    LLP 是什么?

    LLP (Low-Level Procedures) 实际上可能比较少机会用,但好奇心强烈的你,难免也按捺不住想知道它是什么。它是低层次的键盘和鼠标的纪录方式。

     

    首先要说我们一般所录制的脚本,它的原理是识别测试对像的控件,录制对控件上键盘和鼠标的动作,回放时就是以这个原理摹拟动作的。

     

    LLP 则是低层次、座标式的纪录方式。它是不识别控件的。它只会纪录鼠标 (点击,移动和滚轮) 和键盘的动作事件,以及事件之间的时间间距。

     

    也因为此,录制后未经修改的情况,回放时的速度是和录制时的速度一样的。

     

    有什么情况可以利用 LLP ? 比如要测试图像软件或者一些基于鼠标 / 画笔的绘制动作,就适宜利用 LLP 了。一些以 Flash 作为平台的互动程序,或者也可以利用 LLP 的,不过笔者就未曾深入探究过了。

     

    对于 Rational Robot 有认识的人士,TestComplete LLP 可以说是类似 Robot 内的 VU 吧。不过,TestComplete LLP 在录制后是提供一个可视化的介面来编辑动作的,而不是从编写代码的层面去修改。

     

     

    如果你的侧边栏未有 LLP 的话,可以在 Project 右按 > Add > New Item 来建立,如上图。

     

    TestComplete LLP 的录制方式

    TestComplete 的工具列按 Record 按钮,所弹出的小窗口内可以选择录制方式。

     

     

     

    前者是基于整个荧幕作为座标基础去录制动作的座标;后者是基于窗口的,需要拖拉动作拖至对像窗口才开始录制。

     

    如果你的测试对像固定是全屏的话,或者你的动作牵涉多个窗后的话,应该选择 Screen Coordinates 比较适合。不过,在另一台机回放的话,要留意电脑荧幕的解像度是否吻合。管理者应该预先为此安排好。

     

    如果你的测试的动作只是对一个窗口的话,可以考虑使用 Window Coordinates 的。

     

    LLP 录制后的编辑

     

     

    录制完成后,首先会自动建立一个函数,Screen Coordinates 录制的话,就是生成一句 LLCollection1.LLP1.Execute 的语句,也就是执行LLP1 这个低层次动作纪录了,如上图。

     

    然后,自己再编辑一下何时调用这函数便可。

     

     

    而当你打开 LLCollection1 LPP1 的话,就会看到一个可视化的编辑画面,里面详细纪录了 Event (鼠标和键盘的动作)Parameters (鼠标的座标或者键盘的 CharCode、以及 Delay, ms (动作与动作之间相隔的时间 [微秒])

     

    点击一行就可以进行微调编辑。

     

    如果编辑鼠标动作,可以看到,它能纪录四种鼠标动作,分别是 Mouse Down, Mouse Up, Mouse Move Mouse Wheel (滚轮)

     

    如果编辑键盘动作,可以看到,它纪录了 Key Up Key Down 两种动作。

     

    你还可以对一个或多个动作进行拖拉或者剪贴删除,以编辑动作的次序,或者贴进另一个 LLP 内。

     

    右按介面的话,有几个值得提及的功能。

     

     

     

    Add Event 是手工地加插鼠标或者键盘的动作。

     

    如果你如上图一样,预先选择多个动作,Expand/Shrink Time for Selected Events… 是可以批次调整动作执行的时间间距的。

     

     

    以上图为例,假设我原本录制花了大概 1 分钟完成,以以上的设置,就是将所有动作缩短到 10 秒内完成,而每个动作所需要的时间是 Evenly 平均分配的。假如有 10 个动作,也就是每个动作相隔 1 秒了。记住,如要缩短,就要推断一个合理的值,否则,你的测试对像也可能未能及时反应过来而间接导致一些不必要的错误。

     

    另外,如果你选择的动作包含鼠标动作的话,你可以用Shift Coordinates for Selected Events… 来批次将座标的 xy 中心点移动。

     

     

    以上图为例,就是批次向右水平移动 100 pixels (像素),及向上垂直移动 100 pixels

    假设原本的第一个动作是 Mouse Down X: 150, Y: 250 的话,编辑后就会变成 Mouse Down X: 250, Y: 150 了。

     

    是否需要动用到这些功能是很视乎实际情况和需要的。如果过程时间不长的话,还不如重新录制再回放。如果只是测试对像介面上的少许改动,手工地批次编辑则可能更快。

  • TestComplete 的项目组织和脚本回放介绍【从Terry Young转载】

    2008-02-02 16:30:16

     原著者: Terry Young

    适合程度:初学者

    http://www.51testing.com/?20638

     

    笔者注:看到很多文章,在术语的翻译上,尤其对没有正式汉化或者国际化的国外软件,都存在着翻译不统一的情况。笔者则通常会在文章中第一次出现的英文字眼附上中文翻译,但其后会以英文字眼为准。

     

    读完此教程后,读者应该学会:

    1.        TestComplete 内主要六种回放,范围由小至大分别是

    1.1         Run Current Routine (执行函式)

    1.2         Run scrīpt (执行脚本)

    1.3         Run Manual Test (执行手工测试)

    1.4         Project Test Items 里面的 Run Focused Item (执行当前选择的测试物件)

    1.5         Run Project (执行项目)

    1.6         Run Project Suite (执行专案)

    2.        TestComplete 内测试项目的架构

    3.        透过 Test Items 来组织测试单元 (Units) 的串连回放

     

    正文:

    Run Current Routine

    下图是 Run Current Routine 的方法,在 Sub Main 任何一个范围上右按,选择 Run Current Routine 便会执行 Main 这个函式。

    根据图内的代码的话,结果会是先出现 “Hello.” MsgBox,然后呼叫AnotherFunction 继而出现 “Hello World!” MsgBox


    Run scrīpt

    透过下图所显示,在工具列上的按钮可以执行 Run scrīpt, Run Project 或者 Run Project Suite

    按照下图的代码,如果执行 Run scrīpt,会先运行左边栏的 “scrīpt” 内的 Main Routine (启始函式)

     

    scrīpt Main Routine,可以按照下图来设置。

    如果设置成 AnotherFunction,执行 Run scrīpt 就只会出现 “Hello World!” 这个结果。

    如果设置成 Main,执行 Run scrīpt 就会先出现 “Hello.”,再出现 “Hello World!”

     


    Run Manual Test

    Manual Test 是手工测试,可以在 Project 右按来建立,主要就是纪录一些人手操作的步骤。

    Run Manual Test 就是回放一个一个的画面显示每个人手操作步骤,测试员人手执行实际动作后可回到 TestComplete 去选择适合的按钮来纪录结果。

    Run Project

    执行 Run Project,是会执行 Project Test Items

    如下图的设置的话,Project 的第一个 Test Item 就是执行 Unit1 AnotherFunction 这个函式。

    右按介面,透过 New Item 可以陆续加上更多 Test Items,甚至用 New child item 来分层次地加上 Test Items

    Test Items 不单可以是 scrīpt (脚本),还可以是 Manual Test (手工测试)

     

    如下图的设置的话,执行 Run Project 的结果就是出现 “Hello World!”,然后出现 ManualTest1 的手工测试脚本,测试员完成手工测试后,继续运行自动测试而出现 ”Goodbye”,然后出现 “Hello.” “Hello World!”


    在此处,分层次的主要是为了方便启动或者屏蔽某一项测试范围。如下图。你还可以直接拖拉或者透过右按来移动项目。

     

    这里通常就是管理者组织很多复杂脚本的地方。

     

    通常,测试队伍可以陆续建立很多 Function (函式) 甚至 Unit (单元),每个 Unit 或者 Function 通常都有自己的录制起点和终点。而管理者,透过测试计划 Test Plans 和用例 Test Cases 等等设计文件和辅助文件引导下,可以在这里组织 Unit 来实现计划的。

     

    因此,其实没有必要透过代码编写多个 Call 函式来实现多个脚本组合运行的。反而,使用 Call 函式更适合去呼叫一些经过代码重构 (Refactorization) 后可以循环再用或者共用的函式的。

     

    Run Focused Item

    同样在 Project Test Items 介面内,你可以透过右按来执行 Run Focused Item,将目前选取的项目运行。如根据下图的设置,是不会运行的,因为,事前已经将 ProjectTestItem2 屏蔽了。

    Run Project Suite

    Project Suite 同样有 Test Items 的设置。此处所谓的 Test Items,其实就是指 Projects,如下图,就是指 Windows 专案下 Notepad 这个项目。

    一个专案 (Project Suite) 可以有多个项目 (Projects) 的。这个例子中则只有一个。如果出现多个,你是可以同样地在 Test Items 内设置 Projects 的次序先后和屏蔽状态。

    执行 Run Project Suite 的话,就会先运行 Notepad 这个 Project,也就会根据 Notepad Project Test Items 的设置来运行了。

  • TestComplete: 对Manual Test 的介绍 【从Terry Young 转载】

    2008-02-02 16:26:54

    原著者: Terry Young   http://www.51testing.com/?20638

    适合程度: 初学至进阶

     

    读完此文章之后,读者应该学会:

    1.      Manual Test 的应用范围和一些启发

    2.      Manual Test 的建立和修改

    3.      Manual Test 的回放和运行

    4.      Manual Test Run Project 内的串连运行

    5.      TestComplete 6 Manual Test 的增强,Manual Test TC5 TC6 的升级

     

    TestComplete Manual Test 是什么?

    TestComplete Manual Test,是用来建立一个个画面 (有点像安装软件过程一个一个的画面一样),每个画面其实就是手工测试的步骤描述和预期结果。在回放时,它就会一个个画面展现在测试员面前。测试员按照画面内所描述的步骤进行手工测试,步骤完成了,就回到 TestComplete 这个画面,决定是通过还是不合格。测试员可以在每个步骤加入备注形容具体的结果。到整个 Manual Test 回放完成了, TestComplete 一样会生成一个测试报告 (Log) 的。

     

    Manual Test 的应用

    Manual Test,顾名思议就是手工测试的意思。

    你或者会问:‘咱们用这 TestComplete 不是为了实现自动化测试? 那这手工测试的功能是不是有点本末倒置了?

     

    其实,很多人都已经知道,一个测试对像里面并不是所有地方都适合实施自动化的测试的。

     

    有哪些地方适合利用 TestComplete Manual Test ? 笔者来分享一下构想和经验。

     

    对于一些逻辑性很强而且复杂的测试或者变数很多的测试,要开发一个覆盖率可靠的自动化脚本作回归测试之用,并非一朝一夕可以完成的。那么,不妨先建立一个 Manual Test。况且,未建好自动化脚本之前,你的队伍还不一样是要做些手工测试来应付目前的需求,对不?

     

    那么,这边有人已经按照 Manual Test 进行手工测试,那边就有人开始构想自动化的可能,继而开发自动化测试脚本。

     

    Manual Test 是可以利用作为无工具测试和自动化测试之间的过渡桥。假使真的可以自动化了并且完成了,原本的 Manual Test 也可以被取代了。

     

    又或者,有些测试项目根本不值得或者不需要自动化的,是不会带来有价值的回报或者会严重加重维护的负担的话,管理者适宜将此类测试纳入手工测试的工作里面。

     

    Manual Test 的建立

    如果你目前已经存在的项目并未包括 Manual Test 的话,你可以右按 Project > Add > New Item,选择 Manual Test 来建立。

     

    TestComplete 6 的左边栏组织得更好,所有手工测试项目都在 Manual Test 这个目录之下,不如 TestComplete 5 一样保存在 Project 这一层,感觉上直观得多。

     

    Manual Test 的编辑

     

    利用 Test steps 的按钮,你可以增加,移除或者移动每个步骤。

     

    步骤的根层适合作为本次测试的介绍,以及描述一些事前准备功夫;最好可以把所有不涉及预期结果的内容都写进去。例如上图。

     

    上图右面就是所选择步骤的编辑介面。值得一提的是 Test descrīption Test notes and comments 似乎对输入中文字有问题。但你最主要去编写的步骤内容会是写在中间的 Test instructions,这才是编写 Manual Test 的核心部份之一,而且可以保存成一个个 HTML 档案,或者导入一些已经存在的 HTML 档案的。

     

    由于是 HTML 格式,你可以加插图像,或者加入超连结指向其他文件以辅助测试员之用。

     

     

    以上例子就是 Step1 的编辑画面和内容。

     

    每个步骤应该能给测试员一些步骤指示,和预期结果。

     

    如果你步骤过于复杂,牵涉很多变数,或者预期结果比较长的话,右可以利用超连结指向具体的档案供测试员参考。或者可以来得简单点,留给测试员思考和判断的空间。这完全是测试设计者去决定了。

     

    Manual Test 的回放和运行、TC 6 内的增强,以及升级问题

     

    单独运行一个 Manual Test,就透过左边栏上右按 > Run Manual Test 吧。

     

     

     

    管理者亦可以在 Project > Test Items 里面加插这 Manual Test,那么,Run Project 或者 Run Project Suite 也可以包括这个 Manual Test 的,如上图。

     

    以下是运行 Manual Test 的过程。

      

    正如之前所说,手工测试一开始时,最好可以给测试员描述一下测试起点在哪,应该有什么设置和环境等等;是不牵涉预期结果,也不预期测试员要报告通过或者不合格的一种描述。

     

     

    留意,除了 Success, Fail Stop 之外,工具列上还有个双箭头按钮,就是 Skip (跳过) 的意思。

     

    以下是按了 Fail 之后出现的画面,会要求测试员输入对不合格的描述。

    此时可以 Continue 继续下一步测试,或者 Try Again 继续尝试目前的步骤,或者 Stop 终止整个手工测试。

     

     

    由以上画面中圈着的可见,TestComplete 6 最主要增强的地方,就是有实时抓图的能力,会纪录在测试完成后的报告内

     

    另外,笔者亦试过了,TC5 TC6 所生成的 Manual Test 档案并没有不兼容的问题的,可以交替来用。

     

Open Toolbar