发布新日志

  • 关于描述性编程(转帖)

    2007-12-06 10:54:39

      最近有几位朋友问到描述性编程的问题,那么我们今天就来探讨一下QTP中的描述性编程吧.当我们并不想QTP依靠对象库来识别对象时,我们就可以借用描述性编程的方式.把对象的属性及属性值直接搬到代码中去,让QTP直接通过脚本中的这些属性及属性值就能识别到这个对象,而不必再去匹配对象库.总的来说,如果您希望在未存储在对象库中的对象上执行操作,则这种编程描述将是非常有用的。或者还可以使用编程描述在具有某些相同属性的多个对象上执行相同的操作,或者在其属性与运行会话期间动态确定的描述相匹配的对象上执行操作。比如:在我的<QTP参数化实例>文章中,已经运用过描述性编程了.由于参数化的时候受到了对象库的制约,所以也采用了描述性编程的形式,让要参数化的对象不再受到对象库的制约.

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


    j:TO m/IIE'e39682Dialog("Login").WinEdit("Agent Name:").Set "mercury"51Testing软件测试网2Q-L1Sx z
    Dialog("Login").WinEdit("Password:").SetSecure "45a1e193f9dac3bf91f3ba7c1dd250a48a33eabf"
    "Cnm Y y6f8|39682Dialog("Login").WinButton("OK").Click
    zi^\)Aj39682Window("Flight Reservation").Close

    对应的对象库,如图:

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


    !Xei+Mpu39682Dialog("text:=Login").WinEdit("attached text:=Agent Name:").Set "mercury"
    `%b B@4`39682Dialog("text:=Login").WinEdit("attached text:=Password:").SetSecure "4414d23c42046da1ea3a895f1518b9c476b2b225"51Testing软件测试网%e.\w!v-K.`}Ydl)E
    Dialog("text:=Login").WinButton("text:=OK").Click
    e6H^*N(P%F#w39682Window("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的数据驱动方式初级探讨系列之四——数据库和环境变量(转)

    2007-11-21 16:57:19

    QTP的数据驱动方式初级探讨系列之四——数据库和环境变量

     

    利用数据库DB

    在当今IT界没有数据库的话,大家想象一下,会是什么样子?

    Mercury公司为QTP也提供了对数据库的数据进行操作的方法,同时也有数据库检查点的设置,我在测试过程中,就是使用SQL Server2000进行数据管理的。目前我还没有学习Oracle^_^,很惭愧)。

    利用数据库来进行测试数据的管理有几个优点:1. 数据便于统一管理2. 方便修改、查询3. 便于进行对已经修改的数据进行数据库检查点设置来检查数据是否修改成功4. 脚本的可重用性提高 5. 脚本与数据分离,脚本的维护工作量减少

    QTP的脚本调用数据库中的数据有2种方法:1. 利用用户DSN数据源 2. 直接连接数据库

    1.       本地没有创建数据源的方式
    DRIVER=SQLServer;SERVER=
    数据库IP地址;UID=用户名;PWD=密码;APP=Microsoft Office 2003;WSID=本地主机名;DATABASE=数据库名

    2.       本地已创建数据源的方式
    DSN=
    数据源名称;UID=用户名;PWD=密码;APP=Microsoft Office 2003;WSID=数据库的主机名;DATABASE=数据库名

    注:虚线框中的是引用别人的

           你可以建立一个DBFunction.vbs文件,将你编制的数据库调用的函数(如:连接、查询、修改。。。)全部放在这个文件中(建议:DBFunctions与你的公共函数不要放在一起),然后通过QTP引用资源文件,在菜单中选择“文件”——>“设置”——>“资源”,然后将你的函数库文件添加到这个关联函数库文件下。这样你的脚本就可以使用这些函数了。

           当然,有人不愿意这样做。还有一个方法,就是在每个脚本的开头使用下面的脚本代码引用你自定义的函数库文件:

           ExecuteFile “FileName”  //例如:ExecuteFile “D:\Functions\DBFunction.vbs”

           当数据库中的数据需要修改时,调用完修改数据库数据的函数后,在此函数后的一行脚本脚本可以添加数据库检查点来检查你刚才修改的数据是否成功,数据库检查点的方法见:QTP的帮助文档。

    OK,这样就设置完成了数据库的数据驱动方式

    利用环境变量

    我觉得Mercury公司考虑事情很周到,连环境变量的功能也添加进去了(不知道我高兴是不是有道理,目前的知识面不是很广,大家不要见怪啊)

    环境变量的的适用范围就是本测试,本测试中的所有操作都可以调用。

    环境变量有2种,一种是QTP的内置变量,一种是用户自定义的变量。内置变量是可以直接就可以用,自定义环境变量需要在菜单中选择“文件”——>“设置”——>“环境”,在变量类型中选择“用户自定义”,然后进行添加,可以对添加的变量全部导出,导出的文件为.xml格式的文档。既然可以导出,那么必然可以导入.xml文件,你可以在该对话框中的选中“从外部文件导入”,然后添加其文件路径即可。(当然这些操作都可以直接使用脚本来实现,如:Environment.LoadFromFile(“FileName”))

    例如:在桌面建立一个Var.xml,如下

    -<Environment>    //以这个开始的内部都是定义环境变量,直到以</Environment>结束

    - <Variable>                           // 变量定义起始标识

                     <Name>aa</Name>               // 变量名称

                     <Value>11</Value>               // 变量值

            </Variable>                            // 变量定义结束标识

    - <Variable>

                     <Name>bb</Name>

                     <Value>22</Value>

            </Variable>

    - <Variable>

                     <Name>cc</Name>

                     <Value>33</Value>

                  </Variable>

      </Environment>

    然后导入本测试的环境变量文件中,在专家视图里编写下面的脚本代码:

    Dim aParam3

    aParam3=Environment.Value(“aa”)          // 调用环境变量

    msgbox aParam3

    运行测试,会输出11”

           OK,完成环境变量的初级知识的学习。

  • TP的数据驱动方式初级探讨系列之四——利用Excel文件(转)

    2007-11-21 16:54:07

    利用Excel文件

    由于QTP内嵌了类似Excel表格的DataTable数据表,那么使用Excel文件为QTP脚本传递测试数据也就变得顺理成章的事情了。

    Excel中的各个Sheet的数据导入到QTP数据表中,就需要用到QTP提供的导入函数:DataTable.ImportSheet(FileName, SheetSource, SheetDest),第一个参数为导入的文件名称及路径,SheetSource即导入Excel文件中的那个Sheet名称,SheetDest即为QTP的数据表中的某一个SheetName,这个Sheet可以为某个操作的ADTSheet名称,也可以为NewSheet名称。

    提示:导入的数据在测试运行的过程中是可以看见的,但是当测试运行完成后,导入的数据也会消失。这个属于Run-Time DataTable

    具体的脚本实现如下:

    导入到本操作数据表中

    Call DataTable.ImportSheet("C:\Data.xls","Global","Action1")  / *  导入Data.xls文件中的Global数据表的数据于本地数据表“Action1 * /

    导入增加的Sheet

    DataTable.AddSheet(“NewSheetName”)

    Call DataTable.ImportSheet("C:\Data.xls","Global"," NewSheetName ")  / *  导入Data.xls文件中的GlobalSheet表的数据于新建数据表“NewSheetName”中, * /

    如果你的全部数据都保存在Excel文件中,可以使用一下语句:

    DataTable.ImportSheet(FileName)  // 直接导入 到本测试的数据表中,GDTSheet对应于文件中的GlobalSheet的数据,其他的都依次存放。

    那么数据的导出就和导入差不多了,只是参数少了一个而已

    DataTable.Export(FileName)  // 把测试数据表的数据全部导出到文件中

    DataTable.ExportSheet(FileName, DTSheet) // 把测试数据表中 名称为 DTSheet 的数据表Sheet 的数据导入到文件中

  • 软件测试不只是提BUG

    2007-11-19 11:23:10

    QA的工作分为测试、流程制定和流程监督三部分。质量不是靠守门守出来的,而是靠贯穿整个软件生命周期的管理管出来的。敏捷项目为什么容易获得更好的质量?因为它把质量管理落实到每个小时的每件具体事情上,而不是写在纸上。
  • 读到别人的的精典之作

    2006-12-11 17:13:00

    性能测试注意事项:

    1.服务器端和客户端一定要同一个局域网内,否则网络因素会成为性能测试的瓶颈。

    2.在性能测试脚本中要注意检查点的设置,否则都不清楚脚本是否真的成功执行操作。

    3.设置参数化和关联是性能测试脚本调通的关键。

    4.录制脚本时通常会包括一些think time,因此在回放脚本时,注意在runtime setting中设置忽略think time,否则会影响测试数据的准确性,如:响应时间的准确性。

    5.尽量每个页面设置一个transcation,否则不知哪个页面最慢。

    6.运行性能测试时在runtime setting中关闭日志功能,调试脚本时可以打开日志功能。

    7.性能测试前的数据准备很重要:比如:系统数据库存在60000个用户和系统数据库存在60个用户,分别在两种情况下执行登陆性能测试,性能测试的结果也不会一样的。

    8.在性能测试时用户登陆的用户名和密码,每个用户尽可能不要一样!

  • 终于在这里有了自已的空间,很高兴!

    2006-12-11 17:01:39

    以后就可以把工作中的测试心得,与大家分享了
Open Toolbar