发布新日志

  • 思路需要整理

    2011-03-02 11:49:56

    也许我是在给自己找借口。

    有两年了,连51testing的论坛,我都没时间来了。

    工作忙?---借口

    海绵里的水已经干了,没时间?---借口

    ......

    自己懒。实话!!

    最近这些日子来,我也在思考一个问题:到底十年或是5年后,我的工作是什么样子?

    工作已经很多年了,说实话,我都不好意思跟人说我工作多少年了。

    惭愧,这么多年我的积累和提高又有多少?

    ......太少太少

     

    头脑里有一些零七八碎的思路,也需要静下来整理。

    不能再浪费时间了,不能再等了......

     

  • 好的收藏

    2008-07-18 13:12:38

  • (转)数据表的相关操作

    2008-06-30 13:05:38

    DatatableObject指的是run-time Data Table

    注意: 对本象的所有 methods 仅适用于run-time DataTable. run-time DataTable object的改变会反映在测试结果中,不会对design-time Data Table 产生任何影响。

    1.      方法(methods):

    Ø          新增表(AddSheet Method)

    描述

    run-time DataTable中增加指定的表,并将它作为返回对象,这样你就可以在同一个语句中直接设置表的属性。

    语法

    DataTable.AddSheet(SheetName)

    参数

    类型

    描述

    SheetName

    String

    新表的表名

    返回值

    DTSheet 对象

    示例

    下面的例子用AddSheet方法向Run-time DataTable中创建一个新的表(sheet“MySheet”,并同时设置新表的一个参数。

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

    注:Mysheet 表名;AddParameterDTSheet Object的一个方法,语法DTSheet.AddParameter(ParameterName, Value)”

     

    Ø         删除表(DeleteSheet Method

    描述

    Run-time data table中删除指定的表。

    语法

    DataTable.DeleteSheet SheetID

    参数

    类型

    描述

    SheetID

    Variant

    指定将要被删除的表。表ID可以是表名,也可以是表的indexIndex的值从1开始。

    示例

    下面的例子用DeleteSheet 方法从run-time DataTable中删除表“Mysheet”

    DataTable.DeleteSheet "MySheet"

     

    Ø         导出TableExport Method

    描述

    Run-time data tabel导出到本地指定的位置。

    语法

    DataTable.Export(FileName)

    参数

    类型

    描述

    FileName

    String

    导出文件在本地的完整路径。 导出的文件是EXCEL文件。

    示例

    下面的例子使用Export方法保存Runtime DataTableC:\flights.xls

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

     

    Ø         导出表(ExportSheet Method

    描述

    run-time Data Table中的一个sheet导出到指定的文件。

    如果指定的文件不存在,则自动创建一个新的文件,并保存表。

    如果指定的文件存在,但是文件中没有指定的表名存在,则在该EXCEL文件中插入指定表名的表,新表放在工作薄的最后位置。

    如果文件及表都存在,则导出的表覆盖原有的表。

    语法

    DataTable.ExportSheet(FileName, DTSheet)

    参数

    类型

    描述

    FileName

    String

    导出文件的完整路径。

    DTSheet

    Variant

    将要导出的 run-time Data Table中的表的名称或indexIndex 值从1开始。

    示例

    下面的例子使用ExportSheet方法导出RuntimeDataTable的第1个表,保存在C:\name.xls中。

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

     

    Ø         导入TableImport Method

    描述

    Excle文件导入到run-time Data Table中。

    注意:

    导入的表必须与testcomponent匹配。即EXCEL文件的表(即sheet)名必须与Action的名称匹配,各表的列名必须与run-time Data Table中的参数(即列名)匹配。

    如果导入的EXCEL文件包括combo box list单元格、公式或其它特殊单元格式,这些格式将不会被导入,在DataTable中都会以固定的值显示。

    语法

    DataTable.Import(FileName)

    参数

    类型

    描述

    FileName

    String

    要被导入的Excle文件的完整路径。

    示例

    导入的Table将完全覆盖RuntimeDataTable的已有数据(指所有表的所有数据。)

    下面的例子使用Import方法,导入Excel文件"C:\flights.xls"

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

     

    Ø         导入表(ImportSheet Method

    描述

    Excle文件中一个表(sheet)导入到指定的run-time Data Table表中。导入后,Excle表的数据将覆盖run-time Data Table表的数据。

    注意:

    被导入的Excle表中的列标题必须与DataTableAction的列参数匹配。否则可能导致TestComponent失败。

    导入后,Excle表名将自动替换DataTable中的表名。如果ExcelDataTable的表名不一致,可能会引起测试失败。

    如果导入的Excle包括组合框或下拉列表、条件格式、或其它特殊单元格式,这些格式不会被导入,这些单元格在DataTable中都以固定的值显示。

    语法

    DataTable.ImportSheet(FileName, SheetSource, SheetDest)

    参数

    类型

    描述

    FileName

    String

    Excle文件的完整路径及文件名。

    SheetSource

    Variant

    Excel表名或indexIndex值从1开始。

    SheetDest

    Variant

    Data Table表的表名或indexIndex值从1开始。

    示例

    下面的例子使用ImportSheet方法导入Excel文件name.xls的第1个表,DataTable中的目标表是“NAME”

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

     

    Ø         获取当前行行号(GetCurrentRow Method

    描述

    返回run-time Data Table第一个表的当前活动行的行号。(第一个表指的是global表,或Business Componentsbusiness component表。

    语法

    DataTable.GetCurrentRow

    返回值

    数字

    示例

    下面的例子使用GetCurrentRow方法获取run-time Data Table的当前活动行行号,并将获取的行号写到Report中。

    row = DataTable.GetCurrentRow

    Reporter.ReportEvent 1, "Row Number", row

    ReproterReprotEvent方法的语法:Reporter.ReportEvent EventStatus, ReportStepName, Details [, in]

    如果使用row = DataTable.GetSheet("MySheet").GetCurrentRow语句,则可以获得指定表“Mysheet”的当前行号。

     

     

     

    Ø   

        设置某行为当前活动行(SetCurrentRow Method

    描述

    run-time Data Table中的某行设置为当前活动行。

    注意:你所指定的行必须至少包括一个数据,不能是空行。

    语法

    DataTable.SetCurrentRow(RowNumber)

    参数

    类型

    描述

    RowNumber

    Number

    指定成为当行活动行的行号。行号从1开始。

    示例

    下面的例子使用SetCurrentRow方法,指定run-time Data TableGlobal表的第2行成为当前活动行。

    DataTable.SetCurrentRow (2)

    注:通过与GetSheet方法联合使用,可以设置某个Action表的某行为当前行。如row = DataTable.GetSheet("MySheet").GetCurrentRow

     

    Ø         设置下一行为当前活动行(SetNextRow Method

    描述

    run-time Data Table当前活动行的下一行设置为新的当前活动行。

    注意:将设置为当行活动行的行必须至少包括一个数据,不能是空行。如果当前行已经是DataTable的最后一行,本方法将设置DataTable的第1行为新的当行活动行。

    语法

    DataTable.SetNextRow

    示例

    下面的例子使用SetNextRow方法将Run-time DataTableglobal表的当前活动行的下一行设置为新的活动行。

    DataTable.SetNextRow

     

    Ø         设置前一行为当前活动行(SetPrevRow Method

    描述

    设置run-time Data Table当前活动行的前一行为新的当前行。

    注意:如果当前活动行是DataTable的第1行,本方法将认为DataTable的最后一行是当前活动行的前一行。

    语法

    DataTable.SetPrevRow

    示例

    下面的例子使用SetPrevRow方法将Run-time data tableglobal表的当前活动行的前一行置为新的当前活动行。

    DataTable.SetPrevRow

     

    Ø         获取行数(GetRowCount Method

    描述

  • QTP参数化相关

    2008-06-11 12:59:54

     
    一、直接用DataTable的数据进行参数化
        使用技巧:
        比如我们要设置的参数为test1…test100;
        那么我们可以写成test(1-100)。
        (属于正则表达式的 一种应用)
    二、使用编程的方法产生随机数进行参数化
            RandomNumber.Value(…)
    三、取系统时间
            T=Time , D=Date
    四、对Link的参数化
            1、直接参数化对象库中的属性值
            2、使用描述性编程的方法实现
    五、对加密的值进行参数化的方法
          原QTP语句:Browser(“…”).Page(“…”).WebEdit(“pswd”).SetSecure“484241ad……”
          修改语句为: Browser(“…”).Page(“…”).WebEdit(“pswd”).Set“484241ad……”
           然后进行正常的明文参数化就OK了。
    六、参数化步骤和检查点中的值
        直接在检查点页面中进行设置即可
    七、对下拉框中的数据进行参数化
        1.通过下拉框对应项的实际值查找
           Browser(“****”).Page(“****”).WebList(“****”).Select “****”
       将select“****”的值参数化,可以将下拉框中的每一个选项都写到数据表中
        2.通过下拉框对应项的索引号查找
       Browser(“****”).Page(“****”).WebList(“****”).Select “#”&IndexNum
        比如说下拉框有5个选项
        IndexNum = RandomNumber(1,5)
        以上代码生成1到5之间的随机数,5是上界,1是下界。
  • QTP脚本录制时常用的功能

    2008-06-11 12:58:15

     
    一、录制参数设置
            Tools--web event recording configuration
            Toolsoptions active screen
            这两个参数的设置直接影响到QTP录制的精度。有的时候由于录制级别设置的问题,有的界面或某个界面元素可能无法被保存下来,那么你就无法在其上使用任何检查点,边录制边添加检查点的方法就可以避免这个问题.
    二、录制时常用的各种操作
            1、录制时增加action并修改其属性
            2、录制时增加检查点
               1)切换到QTP窗口
               2Insert-CheckPoint-选择你要添加的检查点类型
               3)窗口自动切换到录制界面,选择你要添加的检查点内容
               4)窗口自动切换到检查点设置页面,设置完成后便可继续进行其他动作
            3、录制的过程中删除多余步骤
               在录制的过程中,如果你有误操作,或者多余的操作,可手动切换到QTP窗口,对多余操作进行删除或注销。
           
  • (转)QTP中使用描述性编程---提高篇

    2008-05-07 17:45:06

    录制的脚本

    Dialog("Login").WinEdit("Agent Name:").Set "Holly"

    Dialog("Login").WinEdit("Password:").SetSecure "46ef0dc7efe5834c73673898279af1204fea51a7"

    Dialog("Login").WinButton("Cancel").Click
    共录制3步操作,输入Agent Name, Password, 点击Cancel按钮
     
    提高一、使用描述性编程
    Dim descEditLogin
    Set descEditLogin = Descrīption.Create()
    descEditLogin("Class Name").Value = "Dialog"
    descEditLogin("Regexpwndtitle").Value = "Login"
     
    Dialog(descEditLogin).WinEdit("Attached text:=Agent Name:").Set "Holly"
    Dialog(descEditLogin).WinEdit("Attached text:=Password:").Set "Mercury"
    Dialog(descEditLogin).WinButton("Class Name:=WinButton", "text:=Cancel").Click
    在这里需要注意有两点:
    1)把经常使用到的对象定义为一个对象变量,方便以后调用,减少代码工作量和错误
    2)使用SPY获取对象的属性和属性值
     
    提高二、使用自定义的环境变量
    在File>>Settings>>Environment中选择user-defined,增加一个变量
    dlgLogin = “Login”
     
    这样脚本可以被修改为:
    Dim descEditLogin
    Set descEditLogin = Descrīption.Create()
    descEditLogin("Class Name").Value = "Dialog"
    descEditLogin("Regexpwndtitle").Value = Environment.Value("dlgLogin")
     
    Dialog(descEditLogin).WinEdit("Attached text:=Agent Name:").Set "Holly"
    Dialog(descEditLogin).WinEdit("Attached text:=Password:").Set "Mercury"
    Dialog(descEditLogin).WinButton("Class Name:=WinButton", "text:=Cancel").Click
    当然,参数化的方式很多,这边介绍的是使用环境变量
     
    提高三、从XML文件导入环境变量
    <Enviroment>
           <Variable>
                  <Name>dlgLogin</Name>
                  <Value>Login</Value>
           </Variable>
    </Environment>
    可以使用手工导入,也可以使用LoadFromFile自动导入
  • QTP中使用描述性编程

    2008-05-06 19:32:26

    一、QTP的工作原理

    1.录制的时候,QTP将我们操作过的所有对象都记录下来,保存在对象库object repository中,记录的形式是一个逻辑名加上若干识别属性

    2.运行脚本时,QTP分析该脚本要执行那个对象的操作,然后根据该语句中的逻辑名,在对象库中查找该对象的详细记录,然后在运行的真实披头散发软件中按图索骥,找到需要操作的对象,把语句规定的操作施加在该对象上.施加的主要动作就是把操作的相关消息时间放入到该对象窗口的消息循环队列中

    也就是说,完整的脚本测试应该包括两部分:一个是测试脚本的代码,一个是对象库。

    二、为什么要用描述性编程

    我们在测试的过程中可能会遇到这样的问题:在执行测试的的时候某个具体的对象找不到,或者QTP无法识别该对象,那我们的测试将无法在继续执行下去。这个时候,我们就可以用描述性编程的方法来解决此问题。

    三、描述性编程的具体语法格式

    micClasas("property1:=value1","property2:=value2")

    说明:

     1、micClass标志某个对象的类别

    2、括号里面通过jproperty:=value的形式告诉QTP识别该对象的必要属性

    3、使用spy查看对象的属性名和属性值(tools->object spy)

    四、举例

    录制的脚本为:Dialog("Login").WinButton("OK").Click 对

    象库无法识别OK按钮。

    可修改为:脚本A:Dialog("Login").WinButton("text:=OK").Click

     或

    脚本B:Dialog("Login").WinButton("nativeclass:=Button","text:=OK").Click

    脚本便可顺利执行。

     五、总结

    描述性编程,就是把对象的属性放到代码中,从代码中直接执行,而不需要通过QTP的对象库去识别。

  • 写日志

    2008-03-27 17:14:43

    网络流行了这么多年,没养成写日志的习惯。

    惭愧~~~~

    以后有空就来写日志......

    记录下工作中的点点滴滴

    把自己学到的收获到的东东,拿出来大家一起讨论和分享

    有错误的地方,非常感谢看到的人可以给我指出

    谢谢了~~~

     

Open Toolbar