发布新日志

  • type "<>" in TypeKeys()

    2008-08-20 13:11:13

    window.typekeys("Greater")
    window.typekeys("Less")

     

    or

    wWindow.TypeKeys("<Less><Greater>")

  • [转贴]获得IP的函数

    2008-08-19 18:41:39

    [+] public String GetIpAddress(String sMachineName)
    [ ] //To get IP Address for the particular machine in Network
    [ ] List of String lsOutput
    [ ] String sCommand
    [ ] String sTemp, sItem
    [ ] String sResult = NULL
    [ ] Boolean bResult = FALSE
    [ ] Integer iPos1, iPos2
    [ ]
    [ ] sCommand = "ping -a {sMachineName}"
    [ ] Sys_Execute (sCommand,lsOutput)
    [ ]
    [ ] //ListPrint (lsOutput)
    [-] for each sItem in lsOutput
    [-] if (MatchStr("*pinging*", sItem))
    [ ] bResult = TRUE
    [ ] break
    [ ]
    [-] if (bResult)
    [ ] iPos1 = StrPos ("[", sItem)
    [ ] iPos2 = StrPos ("]", sItem)
    [-] if ((iPos1 > 0) && (iPos2 > 0))
    [ ] sResult = SubStr(sItem,iPos1+1, iPos2-iPos1-1)
    [ ] Print ("Found IP Address: {sResult}")
    [ ] return sResult
  • 在silktest用excel实现测试数据驱动

    2007-12-26 10:35:10

    [-] type DB_person is record

                    [ ] string name

                    [ ] integer age

                     

    [-] testcase testselect()

                    [ ] STRING sResultFile = "C:\data\SilkeTest.xls"

                    [ ] DB_person personS

                    [ ] STRING sConnectStringSelect = "DSN=Segue DDA Excel;DBQ={sResultFile}"

                    [ ] HANDLE hDBSelect = DB_Connect (sConnectStringSelect)

                    [ ] STRING sSQLSelect = "select name,age from [person$]"

                    [ ] HANDLE hBufferSelect = DB_ExecuteSQL(hDBSelect, sSQLSelect)

                    [-] while(DB_FetchNext(hBufferSelect,person))

                                    [ ] print("Name:{person.name};Age:{person.age}")

                    [ ] DB_FinishSql (hBufferSelect)

                    [ ] DB_Disconnect (hDBSelect)

     

     [-] testcase testinsert()

                    [ ] STRING sResultFile = "C:\data\SilkeTest.xls"

                    [ ] STRING sConnectStringInsert = "DSN=Segue DDA Excel;ReadOnly=False;DBQ={sResultFile}"

                    [ ] HANDLE hDBInsert = DB_Connect (sConnectStringInsert)

                    [ ] STRING sSQLInsert = "insert into [person$] (Name,Age) values ('Zhao Liu',11);"

                    [ ] HANDLE hBufferInsert = DB_ExecuteSQL(hDBInsert, sSQLInsert)

                    [ ] DB_FinishSql (hBufferInsert)

                    [ ] DB_Disconnect (hDBInsert)

                     

    [-] testcase testupdate()

                    [ ] STRING sResultFile = "C:\data\SilkeTest.xls"

                    [ ] STRING sConnectStringUpdate = "DSN=Segue DDA Excel;ReadOnly=False;DBQ={sResultFile}"

                    [ ] HANDLE hDBUpdate = DB_Connect (sConnectStringUpdate)

                    [ ] STRING sSQLUpdate = "update  [person$]  set name ='51testing' where name='Zhao Liu'"

                    [ ] HANDLE hBufferUpdate = DB_ExecuteSQL(hDBUpdate, sSQLUpdate)

                    [ ] DB_FinishSql (hBufferUpdate)

                    [ ] DB_Disconnect (hDBUpdate)

  • [转载]Silktest R&Q 系列

    2007-11-29 13:58:05

    Q1: silktest是什么
    A1:silktest
    是一个segue公司的一个自动化测试工具。
     
    Q2:Segue
    的测试方法论是什么?
    A2:Segue
    的测试方法论是一个包括六个阶段的测试流程:
    1.
    计划。决定测试策略并且定义测试需求。
    2.
    捕捉。将你的应用程序中的GUI对象对象化,并且建立一个运行测试的框架。
    3.
    创建测试。创建自动的,可重用的测试。利用录制和编程手段建立用Segue4Test语言编写的测试脚本。
    4.
    运行测试。选择某些测试并且针对需要测试的软件执行它们。
    5.
    报告。分析测试结果并且生成缺陷报告。
    6.
    追踪。在待测软件中追踪缺陷并且执行回归测试。
     
    Q3:silktest host
    是什么?
    A3:Silktest host
    是一个用来管理和执行测试脚本的组件。Silktest host通常运行在和待测软件不同的机器上。
     
    Q4:silktest agent
    是什么?
    A4:Silktest agent
    是从silktest host接收测试指令,并且和待测软件交互的组件。它通常和待测软件运行在同一机器上。
     
     
    Q5: 4Test
    是什么
    A5:4Test
    silktest用来组成测试脚本执行自动测试的一种测试脚本语言。4Test是面向对象的第四代语言,它由三部分组成:
    一个可以使testcase可以和GUI对象交互的强壮的面向对象的类库。
    一组用来创建记录testcase的结构和逻辑的申明,操作符和数据类型。
    一个用来支持普通支持任务的内建函数库。
     
    Q6:DOM
    浏览器扩展是什么?
    A6:
    文档对象模型(DOM)浏览器扩展是为了测试Web程序的一个silktest附加组件。DOM浏览器扩展直接和Wed浏览器联系来识别,分类处理Web页面上的对象。该组件并非是使用可视化模式识别技术来进行这些对象的识别,而是通过处理实际的HTML代码来实现的。
     
    Q7:VO
    浏览器扩展是什么?
    A7:
    虚拟对象(VO)浏览器扩展是一个为了测试Web程序的silktest附加组件。VO浏览器扩展使用模式识别技术来识别浏览器中呈现出来的对象。VO扩展以页面呈现出来的样子来看待页面而不是通过识别html标记。而且VO扩展以页面中的对象例如:链接,表格,图片和附加在它们上的操作来看待它们,而不考虑它们背后所用的技术。
     
    Q8:6.0
    版本的脚本运用到6.5甚至更高版本的系统上会出现问题么?
    A8:
    从低版本到高版本的迁移不会导致问题,不过这只是一个一般性的声明,而并非适合于所有的情况。我曾经遇到6.5版本的脚本无法在7.0版本上运行的情况,原因是一些识别模式已经被改变了。而且在一些情况下,最后处于不同路径下的脚本竟然执行了基于版本的相同的操作。
    Ps
    :从6.06.5倒没有遇到任何问题。
     
    Q8.:
    近我在使用silktest V3v的是否遇到一个问题,当我记录选择菜单项时,比如:Product.File.Exit.Pick()但是当我回放时,它能够选择File菜单,但是无法选择Exit项。File菜单没有被下拉显示出来,仅仅是高亮了。这个应用是用vc开发并且运行在NT4的系统上的。
    虽然我可以使用菜单的快捷键绕过这个问题,但是在某些testcase里面我更希望能模拟鼠标进行上面的操作,有什么好的办法么?
    A8:
    我也曾经遇到这样的问题,这是由于焦点问题而产生的。首先,我们需要理解QAP/Silktest选择菜单项的原理。它并不是真正的使用鼠标,而是用键盘来高亮菜单栏,然后使用箭头选择想要操作的菜单项。试试下面这个方法:首先将你的应用置于菜单被选中之前的状态,然后手工点击F10键或者Alt键看是否菜单被高亮了并且允许你使用箭头选择菜单项。我猜可能是由于某个childwin或者dialogbox真正拥有了焦点,从而没有把键盘事件传递给mainwin。如果是这种情况,你需要向开发人员说明他们必须解决这个问题,这样你才能够进行自动测试。一个小的技巧是设置一个YourProduct.Click()函数,强制将焦点交给mainwin,然后再进行菜单的选择。
     
    Q9:silktest project
    是什么?
    A9:
    一个silktest project是一个包含测试项目信息的文件集合。
     
    Q10
    如何建立一个新的silktest项目?
    A10:
    运行
    silktest
    选择基本工作流栏

    点击打开项目。
    选择新建项目。
    在新建项目对话框中双击建立项目的图标。
    在新建项目对话框中输入你的项目名字和你的项目描述。
    点击OK
    Silktest
    将会在silktest项目目录下面新建一个子目录,然后在该子目录下存储新项目相关的所有文件。

    Q11:silktest中有没有计算web页面上单词数量的函数?
    A11
    :你可以使用Clipboard函数。使用Ctrl+aCtrl+c,然后解析stringlist.

    Q12:silktesttestplan是什么?
    A12:silktest
    testplan是一个提供软件测试过程框架的大纲,它为组织和管理你的测试需求提供了控制的重点。一个testplan由两个不同的部分组成:一个是大纲,它是测试需求的格式化描述,另一个是声明,被用来连接silktesttestplan脚本和实现测试需求的testcase

    Q13:创建新的test脚本的最佳途径是什么?
    A13:
    在自动测试中,建立测试脚本包括最基本的两个步骤:
    1
    .为所有的testcase创建测试数据。
    2
    .为自动测试编写脚本。
    第一步是分析了你的testcase需要哪些数据后的结果,这些数据被收集,脚本编写出来以后,测试数据才算准备完全了。
    第二步是测试用例自动执行的基本步骤。


    Q14
    :如何得到buttoncaption?
    A14:
    答案1:使用GetCaption ()方法。
    答案2:还可以使用sCaption属性。


    Q14:
    如何关闭不需要的窗口?
    A14:
    你是否意味着那些原窗口(定购状态)以外的一个或者多个浏览器窗口(定购请求)?
    Answer1:
    如果定购请求窗口是弹出式窗口,下面的代码将会关闭一个弹出式的激活状态的窗口。
    [-] !(if Browser.ComboBox("#1").exists())
    [ ] Browser.SetActive()
    [ ] Browser.typekeys("")
    Answer2:
    如果订购请求窗口是一个非弹出式浏览器窗口,你可以使用下面的代码关闭不需要的的浏览器。
    Order_Status.SetActive()
    Browser.CloseOthers()

    Q15:testplan文件里面的文本行有哪些类型?
    A15:
    一个testplan文件包括一些文本行,在其中有5种不同的文本行。
    1.
    注释-绿色标识,提供注释信息。
    2.
    组描述-黑色标识,提供一组测试的描述。Testplan里面的测试可以被组成多个级别的组。
    3.
    测试描述- 蓝色标识,提供单个测试的描述
    4.
    测试计划语句-暗红色标识,提供到testcase,test data,下级testplan或者引用文件的相关链接。
    5.
    打开下级testplan文件的标记-洋红色表示,提供一个到下级testplan的相关链接。


    Q16:testplan
    的属性是什么?
    A16
    Testplan的属性是用户定义属性,它和测试组的描述相关联,或者和某个测试的描述相关联。你可以通过不同的属性值来搜索,标识和报告testcase


    Q17:
    默认的testplan的属性是什么?
    A17:silktest
    提供3种预定义的默认属性:
    1.
    种类: testcase或者testcase组的类型。例如,你可以使用这个属性将你的testcase组分为boudary value testsnavagation tests等种类。
    2.
    组件:被测试的应用的模块名。
    3.
    开发者:开发testcase或者testcase组的QA工程师的名字。

    Q:如何维护恢复系统?
    A
    :在你的TestCaseExit()函数里面,你可以使用如下的代码:
    If condition == 1
    do this
    If condition == 2
    do that


    Q18:
    如何定义一个新的testplan属性?
    A18:
    1.
    确定你的测试项目是打开的。
    2.
    点击Testplan/Define Attributes菜单,定义属性的对话框会被打开,你将看到3个预先定义好的默认属性Category, Component, Developer.
    3.
    点击新建按钮,新属性对话框将被打开。
    4.
    输入你的新属性,例如:Level,用来表示testcase的复杂程度。
    5.
    选择属性的类型:Normal, Edit, 或者Set.
    6.
    点击确定。

     Q19:disabletextfield中得到文本。Silktest不能够识别disable的对象,我如何能解决这个问题。我有一个基于web的应用,在一个页面中有一个radio button。选择这个radio button可以打开一个applet窗口。现在如果我希望得到该窗口的定义,它一样会失败。Silktest被正确地配置成可识别基于javac\s结构应用。如何解决这个问题呢?
    A19:
    如果你希望从一个disabled textfield上得到数据,你首先需要disable Agent选项"OPT_VERIFY_ENABLED" 然后你可以使用GetText。其步骤是:
    Agent.SetOptions("OPT_VERIFY_ENABLED", false)
    Print(TextField.GetText())
    然后来回答你的下一个问题,答案是同样的,disable你的Agent选项,步骤如下:

    1.
    在选项菜单中,点击Agent菜单项。
    2.
    Agent窗口,点击Verification标签。
    3.
    取消所有的选项,保留最后一项,(verification of application ready)
    4.
    点击确定。

    Q20.当调用java应用后(silktest可以启动我的java应用),然后将出现登录屏木,但是silktest报一个JavaMainWin无法找到的错误。为什么?现在我无法正确启动该程序调用然后执行另外一段代码,例如输入用户名和密码登录进应用。
    A20:
    答案1:
    在调用一个应用之后,silktest将一直等待找到这个应用。在这样情况下,应用是你的java窗口。有时会出现在调用之后,silktest无法识别出,但是如果你手动调用,它却能够正常工作。
    解决方法:
    声明一个窗口变量使用start方法。这时你可以使用下面的代码:
    JavaAppWindow.Invoke ()替换为
    Window MyJavaApp
    MyJavaApp.Start ("path of exe or batch file to invoke the application")
    sleep (x) (x -->
    合适的值)

    答案2
    window MainWin MyWin //
    声明一个全局变量
    main ()
    try ()
    testcase try () appstate none
    MyWin.Start(sPath)

    答案3
    当你用start命令作为JavaMainWin的一部分时,保证你的类路径是独立运行的-silktest以外,这样它将会正常工作。

    Q21:如何给testcase的属性赋值?
    A21

    1.
    确定你的testplan处于打开状态。
    2.
    点击你准备赋属性值的testcase
    3.
    点击TestPlan/detail菜单,testplan详细对话框会出现。
    4.
    点击test attribute标签。
    5.
    点击组件域,下拉列表会出现所有组件的可选值。
    6.
    选择下拉列表中的值。
    7.
    点击确定。

    Q22:关于关闭孩子窗口
    A22:
    答案1
    1.
    识别进程句柄
    2.
    关闭它的第一个孩子然后关闭MainWindow

    答案2
    Integer HWnd=Browser.GetHandle() ///
    在孩子窗口弹出之前
    ....
    下面是你的窗口
    While Browser2.Exists()
    {
    If Browser.GetHandle()!=HWnd
    Browser.Close()
    Else
    Browser2.SetActive()
    }
    你也可以在上面的代码中使用窗口的catpion

    答案3
    我想用来识别双亲和孩子的tag不唯一,这正是为什么双亲会被关闭的原因。可以试着使window ID唯一然后关闭页面。第一个激活孩子,然后关闭应该可以管用。

    Q23:如何建立一个test frame
    A23:
    1.
    确定你的浏览器被激活并且打开了你的web应用的首页。不要最小话web页窗口。
    2.
    确定你的测试项目处于打开状态。
    3.
    点击File/New菜单,一个新的对话框将会出现。
    4.
    选择test frame单选按钮。
    5.
    点击确定,新建test frame的对话框将列出所有激活的web

  • [转载]Silktest FAQ 系列

    2007-11-29 13:56:20

    英文版地址http://silktest.blogspot.com/ ,转载请注明出处http://blog.csdn.net/yuetiantian/,欢迎大家批评指正。

    Q1:SilkTest无法为IE浏览器设置default Base state
    result
    文件的错误提示如下:

    [ ] *** DefaultBaseState is invoking Browser
    [ ] *** Error: Unable to start Internet Explorer 6 DOM
    [ ] Occurred in AppError
    [ ] Called from Explorer.Invoke at extend\explorer.inc(470)
    [ ] Called from Browser.Invoke at browser.inc(361)
    [ ] Called from DefaultBaseState at defaults.inc(126)
    [ ] Called from main at $scrīptMain(2)
    首先检查一下,确认所有silktest里面的ExtensionTools/Enable Extensions)都正确地激活了。如果排除了上面的可能性后,再确认机器上没有装两个不同版本的silktest
    如果机器上没有装两个不同版本的silktest,还有一种可能就是在卸载过前一个版本的silktest以后没有重启就安装了后一个版本的silktest,如果是这样可以按如下的步骤操作:
    卸载silktest
    重启机器

    重新安装silktest
    重启机器


    Q2:silktest
    IE识别为一个C/S的应用程序。
    在为浏览器激活了extension之后,silktest将把浏览器表现为一个c/s结构的应用,并且会产生下面的信息:
    SilkTest detected a Client/Server application.
    The required Extension has been enabled.
    只有一种方法可以解决这个问题,你必须在机器上创建你自己窗口的profile:用administrator登录以后,在系统属性对话框中打开高级标签,然后打开user profile工具。一旦你这样操作了,你选择你的用户并且点击delete按钮。再次用你自己的帐户登录将会创建新的用户profile
    顺便提示:如果你想要从profile存储信息,请单独保存这些信息。比方说你想保存你的favorites,可以先将其拷贝到其他的地方,在删除了user profile以后再将它拷贝回来。

    Q3
    silktestExtension Kitsilktest的一部分么?
    一些功能和工具只有在你购买了它们并且授权给你以后才可用。
    Extension Kit:
    如果你购买了Extension Kit,你必须在安装silktest的时候提供密码以便安装它。如果你不知道密码,请联系silktest的客户服务人员。
    Silktest Agent only
    :如果你仅仅为silktest agent购买了license而不是silktest,那么在你安装完成后只有Agent、例程和silktest的位图工具是可用的。
    升级:在silktest2006中,Extension kit已经被包括了,并不需要另外付费。如果你的维护合同是最新的,那么可以请Borland公司将你的silktest升级到2006R2.因为在旧版本中,extension kit是一个附件软件,你不得不单独购买。一旦extension Kit被安装了,QA工程师就可以从Start -> Programs > Borland > SilkTest 2006 > Documentation -> Extension Kit Documentation得到更多信息,同时也可以从silktest的在线帮助文件中得到有关信息(Help > Help Topics)

    Q4
    :我从哪里可以买到silktest的入门和进阶书籍?
    一旦你的软件公司从Segue(准确点说现在是Borland)购买了silktestlicensesilktest的指南和用户手册将会邮寄到你公司的QA部门。现在在市场上还没有silktest的用户手册以及其他类似的书籍。我希望能够看到诸如“24小时学会silktest”之类的书籍,但是现在还没有人写出这样的书来。

    Q5
    :为什么Borland要购买Segue公司?
    Nielsen
    Borland的总裁和首席执行官说:
    “Segue
    的质量优化产品和服务将会完善我们的应用生命周期管理解决方案。将我们现在关注的重点从软件开发扩展到软件交付,以及通过成功的软件开发帮助客户公司增加商业价值都是一种自然的拓展。
    这一决定使我们的重点扩展到应用程序生命周期管理,并且同时是我们的IDE商务关注于其收益,并且使我们能够去做为我们公司、客户和软件发展所应该做的那些正确的事情。
    Segue
    拥有一整套业界领先的包括自动测试的工具,它们是:

    测试管理:为做计划,编写文档和管理整个测试过程提供了一个流程驱动的方法。
    功能和回归测试:在构建到构建的过程中,确定你的应用真正地符合所有的需求。
    负载,压力和性能测试:在交付前使用模拟真实环境的方法最大化应用的性能、可度量性和可靠性。
    应用性能管理:可以24x7x365地评估应用交付后,你的终端用户的客户体验以及服务履行情况。

    Q6:silktest还是winrunner
    如果你不了解这两个工具,并且准备在它们之中选择一个,可以参考下面的搜索结果:
    2005
    413日在dice.com的搜索结果:
    silktest-68
    个项目
    winrunner-514
    个项目
    2005
    413日在s.f.bayarea craigslist的搜索结果:
    silktest -17
    个项目
    winrunner-28
    个项目

    Q7:在字符串中如何匹配一个'?'问号字符?
    如何使用MatchStr函数在一个字符串中寻找问号字符,而不是使用问号字符的通配符功能?
    可以使用下面的代码
    [-] main ()
    [ ] STRING s = "this is a test?"
    [ ] Print (MatchStr ("*{Chr(63)}", s))
    上面的答案错误。
    可以用
    [-] main ()
    [ ] STRING s = "this is a test?"
    [ ] if(StrPos("?",s)) == 0)
    [ ]  print("No ?")
    [ ] else
    [ ]  print("Have ?")

    Q8:如果在执行DB_Connect过程中抛出了异常,如何能够确切地知道异常的种类?
    最简单的办法是把DB_Connect调用用do...except扩起来,比如:
    [-] do
    [ ] Print ("MSSQL : dsn={sDsn};UID={SQL_User};PWD={SQL_Pwd}")
    [ ] hdbc = DB_Connect ("dsn={sDsn};UID={SQL_User};PWD={ SQL _Pwd}")
    [-] except
    [-] ResOpenList ("Unable to connect to the DSN '{sDsn}' for the reasons below")
    [ ] ExceptLog ()
    [ ] ResCloseList()
    一般说来,有很多中原因可能导致数据库链接错误,所以一般的检查错误的方法在这里是不适合的。
    ExceptLog()
    将会返回ODBC错误序号和文字,QA工程师和测试开发者都可以分析这些错误信息,并且做出反应。

    Q9:如何捕捉到IE浏览器中打开的WORD文件的内容?
    下面的4Test语言代码可以帮助你解决这个问题:
    ] STRING sSFileName="FileName"
    [ ] STRING sTFileName="FileNameTarget"
    [ ]
    [-] window DialogBox DS
    [ ] tag "{sSFileName} - Microsoft Word"
    [ ]
    [-] window DialogBox D1
    [ ] tag "Document1 - Microsoft Word"
    [ ]
    [-] window DialogBox SaveAs
    [ ] tag "Save As"
    [ ] parent DS
    [ ]
    [-] window DialogBox Open
    [ ] tag "Open"
    [ ] parent D1
    [ ]
    [-] testcase Copy_Content_Of_Word_To_Notepad()
    [ ] SYS_Execute("Start Winword.exe")
    [ ] D1.SetActive()
    [ ]
    [ ] D1.TypeKeys("")
    [ ] Open.TypeKeys("D:\{sSFileName}.doc")
    [ ] Open.TypeKeys("-Word Document")
    [ ] Open.TypeKeys("")
    [ ] DS.SetActive()
    [ ]
    [ ] DS.TypeKeys("-a")
    [ ] SaveAs.TypeKeys("-Text Only")
    [ ] SaveAs.TypeKeys("D:\")
    [ ] SaveAs.TypeKeys("")
    [ ]
    [ ] DS.DialogBox("Microsoft Word|$MessageBox").TypeKeys("")
    [ ] DS.DialogBox("File Conversion - {sSFileName}").TypeKeys("")
    [ ] DS.DialogBox("File Conversion - {sSFileName}").TypeKeys("")
    [ ] DS.TypeKeys("-x")
    [ ]
    4Test
    代码将会建立一个.txt文件,你可以读取该文件的内容并且验证你的数据。

    Q10:如何追加内容到List of List of string中去?
    可以使用下面的代码,注意split需要你自己实现。
    [ ] LIST OF STRING lsOptions = {}
    [ ] LIST OF LIST OF STRING llsOptions = {{}}
    [ ] STRING sLine
    [ ]
    [ ] hFile = FileOpen("{sDataDir}Installation\{sDataFile}",FM_READ)
    [-] while FileReadLine(hFile,sLine)
    [ ] lsOptions = Split(sLine,",")
    [ ] ListAppend(llsOptions, lsOptions) 

    Q11: Segue的测试方法论是什么?
    Segue的测试方法论是一个包括六个阶段的测试流程:
    1)计划。决定测试策略并且定义测试需求。
    2)捕捉。将你的应用程序中的GUI对象对象化,并且建立一个运行测试的框架。
    3)创建测试。创建自动的,可重用的测试。利用录制和编程手段建立用Segue4Test语言编写的测试脚本。
    4)运行测试。选择某些测试并且针对需要测试的软件执行它们。
    5)报告。分析测试结果并且生成缺陷报告。
    6)追踪。在待测软件中追踪缺陷并且执行回归测试。

    Q12: DBTester提供了哪些函数?
    DBTester提供了6个函数,你可以在你的4Test脚本里面直接使用它们
    :
    DB_Connect:
    通过指定的OBDC DSN名打开一个数据库连接。DB_Connect返回一个连接句柄,该句柄可以被用在其他的DBTester函数中。SQL语句将被提交到数据库中去。
    DB_Disconnect:关闭指定连接句柄所代表的数据库连接。所有该连接相关的资源将被释放。
    DB_ExecuteSql:将指定的SQL语句发送到指定的数据库连接上执行。DB_ExecuteSql返回一个结果句柄,该句柄将会被DB_FetchNext函数使用。
    DB_FetchNext:得到指定的查询结果句柄的下一行内容。
    DB_FetchPrevious:得到指定的查询结果句柄的上一行内容。
    DB_FinishSql:关闭指定的查询结果句柄。

    Q13: silktest host是什么?
    Silktest host 是一个用来管理和执行测试脚本的组件。Silktest host通常运行在和待测软件不同的机器上。

    Q14:  如何验证web应用中里面的动态文本?
    我正在用silktest测试一个web程序,当我填写好form并且提交的时候,页面显示一个包含用户名的文本消息,例如:Successfully created test account for user John Winrunner。这个消息将会随着用户名的不同而变化,例如:Successfully created test account for user Andrew SilkTest。如何来验证这个动态的文本呢?
    你肯定是要获取一些特别的消息,根据你的需求不同这里有一些建议可以采用:
    1)采用消息的索引而不是标题来申明他们,因为标题可能不时地改变。
    2)单独申明每个消息,然后检查他们是否存在。在某一时刻只能有一个存在,而且你可以根据他当时提供的消息继续进行将要做的事情。

    3)用4Test代码将Agent的选项OPT_VERIFY_UNIQUE暂时设置为flase,例如:
    Agent.SetOption (OPT_VERIFY_UNIQUE, FALSE)
    // 4Test code that requires non-unique messages
    Agent.SetOption (OPT_VERIFY_UNIQUE, TRUE)


    Q15:SilkMeter
    license server 停了,我该怎么做?
    silkMeterlicense server 停了,并且这一周都无法使用,但是我却要在周末之前完成一个十分重要的测试项目。我如何能够按时完成这些工作?
    你需要联系Borland公司,申请一个零时的license或者是机动的license.

    Q16: 如何使用4Test语言删除cookie文件?
    我用4Test脚本来测试web应用,我想知道如何在脚本执行过程中删除指定的cookie文件。
    下面的4Test 函数可以用来删除指定的cookie文件
    [-] RemoveCookies (String sPath, String sFile)
    [ ] //*******************
    [ ] //* The function for removing a stored web cookie file.
    [ ] //* sPath The complete path to the directory where the cookie is stored
    [ ] //* Example "C:\Documents and Settings\Administrator\Cookies\"
    [ ] //* sFile unique part of the cookie file name
    [ ] //* for example "*winrunner*"
    [ ] //*******************
    [ ] LIST OF FILEINFO lfInfo
    [ ] LIST OF STRING lsFileName
    [ ] INTEGER iCount
    [ ] STRING sLFile
    [ ] Boolean bFound
    [ ]
    [ ] lfInfo = SYS_GetDirContents (sPath) //obtain directory content
    [-] for iCount = 1 to ListCount(lfInfo) //for every FILEINFO in lsInfo
    [ ] ListAppend(lsFileName, lfInfo[iCount].sName) //append the name of the files
    [ ]
    [-] for each sLFile in lsFileName //for each file name in lsFileName
    [ ] bFound = MatchStr (sFile, sLFile) //check if the sFile string is in the File Names
    [-] if bFound == TRUE //if the sFile string is in file name
    [ ] SYS_RemoveFile (sPath + sLFile) //delete the file from the sPath directory
    你可以简单地修改这个函数用来删除特定文件夹中的所有文件,或者通过循环来删除一组文件。


    Q17:
    如何关闭桌面上所有的窗口?
    我想要关闭桌面上包括浏览器在内的所有窗口,但是MS SQL Query Analyzer, Visual SourceSafe, SecureCRT 等软件在执行我的testcase前由于印度团队的要求已经被打开了,如何解决?
    可以使用下面的4Test语言代码:
    [-] CloseAllPrograms()
        [ ] //http://blog.csdn.net/yuetiantian/
        [ ] LIST OF WINDOW lwOpen = Desktop.GetChildren()
        [-] while (lwOpen !={})
            [ ] ListDelete(lwOpen, ListFind(lwOpen, Taskbar))
            [ ] ListDelete(lwOpen, ListFind(lwOpen, DialogBox("Program Manager")))
            [-] if(lwOpen == {})
                [ ] break
            [ ] Window w = lwOpen[1]
            [-] do
                [ ] w.SetActive()
                [ ] w.Exit()
            [-] except
                [ ] w.SetActive()
                [ ] w.Exit()
                [ ] lwOpen = Desktop.GetChildren()

    Q18:
    如何从MSExcel里面读取数据
    我们尝试从excel数据表里面读取一块数据用于创建ddt。我们不希望在这个过程中使用特定的列名,我们希望能够从指定的数据区例如B4:D11里面读取数据。基本地,我们希望能够从所有的spreadsheet单元格中读取数据,并打印出来。
    可以尝试下列代码:
    [] hDBC = DB_Connect ("DRIVER=Microsoft Excel Driver (*.xls); FIRSTROWHASNAMES=1;READONLY=FALSE;
    DRIVERID=790;DBQ=C:\QA.xls")
    [] //run a SQL statement
    [] hSQLq = DB_ExecuteSQL (hDBC, "SELECT * from [Sheet1$B4:D11]")
    [] //while there are still rows to retrieve
    [-] while DB_FetchNext (hSQLq, descrīption, var1, var2)
    [] print("{++i}:{ descrīption } { var1} { var2} !")
    []
    [] DB_Disconnect(hDBC)
    从培训的角度,你还可以查看silktest用户手册中的以下函数:
    ·    DB_Connect
    ·    DB_ExecuteSQL
    ·    DB_FetchNext
    ·    DB_FinishSql
    和数据类型
    ·    HDATABASE
    ·    HSQL
    还可以从DBTester数据库函数中寻找有用的信息。

    Q19:
    如何执行一个字符串代表的函数?
    silktest培训的过程中,我无法创建一个使用字符串作为函数名进行执行的脚本。有什么办法可以实现它么?
    下面的4Test代码使用@作为函数引用。请确保你调用的这个函数已经被定义了,否则将会导致异常跑出。具体的@操作符使用细节可以在borland提供的语言参考附录中查找。
    [-] testcase foobar() appstate none
    // prints directory on the host machine where startup include files located
    [ ] string sFunc = "GetStartupDir"
    [ ] string sDirectory = @(sFunc)()
    [ ] print(sDirectory)

    Q20:
    silktest中如何使用正则表达式?
    QA
    工程师希望知道如何在一个testcase中使用正则表达式来确认某个字符串是有效的格式。
    不幸的是,即使是在最新的8.0版本中,silktest 仍然不支持POSIX或者是Perl类型的正则表达式。聪明的QA工程可以用问号来匹配单个字符,用星号来匹配零个或者多个字符组成的字符串。SubStr,MatchStrGetFiled可能是有帮助的,但是它们都有一定的限制。

    Q21:如何修复位图无法稳定的错误?
    软件QA经理突然要求我建立一个验证位图的testcase。在testcase记录时,我选择了验证整个窗口,在testcase运行时出现了一个可怕的错误:"*** Error: Bitmap failed to stabilize"。整个QA team都无法在silktest的文档里面找到这个问题的解决办法,其中的一个同事还在QA经理办公室里面看到了解雇整个QA的通知书。
    描述的这个位图错误发生在被验证的窗口不稳定的情况下:例如,某些东西在屏幕上频繁地变化。自动测试工具在指定的时刻无法得到被测窗口将无法捕捉到稳定的位图副本并且产生一个E_BITMAP_NOT_STABLE异常。
    你们的QA工程是可以采用不同的方法捕捉到稳定的位图。
    用下面的代码将各选项设置为0
    Agent.SetOption (OPT_BITMAP_MATCH_COUNT, 0)
    Agent.SetOption (OPT_BITMAP_MATCH_TIMEOUT, 0)
    Agent.SetOption (OPT_BITMAP_MATCH_INTERVAL, 0)

    Q22:
    解释一下DOM扩展相对于VO扩展的优点

    silktest中文档对象模型Document Object Model (DOM)浏览器扩展比可视对象Virtual Object (VO)浏览器扩展有以下一些优点:
    l
    记录器可以像QA工程录制时那样显示一个矩形来高亮控件。
    lDOM
    扩展能够识别文字的大小和对象实际的名字。
    l
    对于浏览器的大小和文字大小的设置没有依赖。
    l
    对没有边框的表格支持得比较好
    lDOM
    扩展相对于VO扩展能够提供更多的类和属性。


    Q23:
    如何用4Test代码设置代理服务器?
    在准备QA面试前我准备写一段代码来为IE6设置代理服务器,迄今为止我找到了两个windows注册表键用来为我的windows xp机器设定代理服务器。
    可以将下面的键值设置成1或者0从而启用或者取消代理服务器。
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable
    可以用下面的键值来设置代理服务器的ip地址和端口号。
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer
    那么我接下来该怎么做呢?
    下面的代码可以满足你的需要。顺便说一下,在你修改注册表示后,确定你已经将其备份了并且确定你们公司有人知道如何在出现问题后恢复注册表,或者只在测试的环境下使用该代码。

    [ ] // Turns on specified proxy
    [ ] // sProxyName -> ip:port
    [+] configureProxyServer(STRING sProxyName)
    [ ]
    [ ] integer iKey = HKEY_CURRENT_USER
    [ ] string sPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\"
    [ ] string sProxyServer = "ProxyServer"
    [ ] string sProxyEnable = "ProxyEnable"
    [ ] string sProxyOn = "REG_DWORD: 0x00000001"
    [-] do
    [ ] SYS_GetRegistryValue(iKey, sPath, sProxyServer, TRUE)
    [ ] SYS_SetRegistryValue(iKey, sPath, sProxyServer, sProxyName)
    [-] except
    [ ] Reg_CreateValue(iKey, sPath, sProxyServer, serverName)
    [ ]
    [-] do
    [ ] SYS_GetRegistryValue(iKey, sPath, sProxyServer, TRUE)
    [ ] SYS_SetRegistryValue(iKey, sPath, sProxyEnable, sProxyOn)
    [-] except
    [ ] Reg_CreateValue(iKey, sPath, sProxyEnable, sProxyOn)
    [ ]
    [ ]

    Q24:silktest
    自动测试工具的局限是什么?
    Silktest
    自动测试有如下的局限:
    Silktest
    可能无法识别某些window frames
    偶尔会很难激活应用的窗口。

    如果将测试系统迁移到其他浏览器或者操作系统上,可能会需要

Open Toolbar