您的位置:
中国软件测试联盟  >> 资讯  >> IBM  >> Robot  >> 查看资讯

Rational 中 DataPool 的介绍与实际应用

[ 来源: 网络转截 | 作者:佚名 | 时间:2007-9-02 19:16 ]

    本文对 datapool 进行简单介绍的同时结合实际功能测试和性能测试的来讲界使用 datapool 。希望对广大的软件测试人员有帮助。由于写作

    DataPool 是一种测试数据集,在测试脚本回放的时候提供给脚本的变量。 datapool 可以由 rational 产品 robot 或 TestManager 创建,下边的表格列举出在 robot 和 testmanager 中可以对 datapool 执行的操作:

操作

Robot

TestManager

在测试脚本中自动建立 datapool

   

创建测试脚本并产生自动数据

修改 vu 脚本中的 datapool 设置

   

修改 datapool 字段定义并修改测试数据

创建并修改数据类型

   

管理 datapool 比如改名或者拷贝

   

倒入到出数据

   

倒入数据

   

    备注: rational 中 datapool 有两种文件: txt 和 csv 文件,创建 datapool 成功后会保存在

    盘符 :\ 工程文件目录 \TestDatastore\DefaultTestScriptDatastore\TMS_Datapools 文件夹下

    测试数据保存在有 csv 扩展名的文本文件中,所有字段信息保存在后缀名为 spc 的文件中,该文件由 testmanager 管理。

    datapool 有两种创建方法,一种是在 testmanager 中建立,一种 robot 录制 vu 脚本时自动建立同名 datapool ,只有在 robot 中 tools->session record options, 设置 Generator 页面 general 的 use datapool 选项,才可以生效。下边分别介绍这两种创建和使用方法:

    一.

    建立 datapool :

    1 .启动 Rational TestManager ;

    2 . Tools>Manage>Datapool ,点击 New …,输入数据池名称点“确定”;

    3 .在打开的 Data Type Specification 中添加字段定义;(字段定义说明见后)

    4 .生成数据 Generate Data (产生大量数据,这里默认产生 100 个数据)

    5 .修改其中的数据 Edit DataPool data

    其中字段定义说明:

    1) Name 指的是数据池列标题名它与测试脚本中变量相一致。如果你改变了数据池列名,也必须保证测试脚本中的变量做相应的改变;如果你不是在 Rational 测试环境下建立的数据池然后导入它, TestManager 自动给数据池列分配缺省的名称。也必须保证测试脚本中的变量与其相一致。你可以用 ime 给 datapool 字段起多字节的名字

    2) Type 标准的或用户定义的数据类型都按名称向数据池列提供其值。犹如建立数据库,先建立字段名,后改动类型。

    制定数据池列的数据类如下操作:

    a 、选择标准类型或已存在的用户定义数据类型,点击当前显示的数据类型名称,然后从列表中选择新的数据类型。

    b 、可以选择 rational 中的标准的数据类型。

    c 、如果想自定义一个类型名称而不是进行选择,在用户定义数据类型前输入星号,如: *MyData;

    d 、建立新的用户定义数据类型,输入数据类型名称(不要带 * ),然后点击 Return 。在你点击了 Yes 确定你想要建立用户定义的数据类型,

    例如:建立新的 column ,输入列名,输入 DemoType (自定义类型),保存。这时会出现数据类型属性编辑对话框(我向 Description 中输入描述信息,确定按钮不可用,可能是 rational 的 bug ,不知道告诉 ratioanl 有没有奖励),确定,出现另一个数据类型属性编辑界面,输入测试数据,退出。选中该行生成数据, testmanager 会自动创建你输入的数据。

    e 、建立新的用户定义数据类型。

    3) Sequence 数据类型的值的顺序被写入数据池列中。只要从中进行选择即可:- Random -随机向数据池列中写入数字和字母的值。- Sequential -顺序写出,如 0 , 1 , 2 , 3 , ... Sequential 仅仅支持数字值(包括日期和时间) 和生成的用户定义的日期类型。当你选择数字类型,必须确定其最大和最小的范围,间隔必须大于 0 ;- Unique 即其中的值是唯一的。也可定义最大最小值。

    4) Repeat 即出现在数据池列的时间, Repeat 不能为 0 。要想设置有符号的整数和用户定义的数据类型的唯一性,设置 Reapeat 为 1 。当定义唯一值时,确定生成的数在你定义的范围之内。

    5) Length 数据池列中存在的最大的数。这个长度包括小数点和负号。

    6) Decimals 定义最大的浮点数的小数位,最大的设置是 6 位。

    7) Interval 如果你在数据池列中设置了间隔,那么将按照你设置的顺序,而顺序变化。最小的间隔是 1 ,最大的间隔是 999999 在数字数据类型下选择了 Sequence ,并定义了最大和最小范围,间隔必须大于 0 。这设置仅仅在数字设置时有效。

    8) Minimum 确定数字最小值这设置仅仅在数字设置时有效。

    9) Maximum 确定数字最大值这设置仅仅在数字设置时有效。

    10) Seed 是 Rational Test 为了计算随机值的数。相同的种子数产生相同的随机数,要改变随机顺序,改变种子数。

    11) Data File 用户定义的数据类型的路径,这个路径是自动付给你的,不能进行修改。数据类型文件存放在你的项目文件中的 Data Type 目录,不能进行直接修改。

    4 、 在设置好字段后,在 No. of records to genarete :中输入要生成的记录数,然后点击 Genarete Data 即可生成数据,或者点击 SAVE 按钮,关闭当前窗口,然后点击 manage datapools>edit>edit datapool data ,直接手工输入数据;

    5 、 这样就完成了数据池的创建,还可以执行数据池的编辑、改名、删除、导入、导出等操作;

    6 、 数据池有数据生成能力,但是不具备数据的计算能力。这种情况下可以利用其他工具(如 EXCEL )生成数据,并保存为 csv( 逗号分割文件 ) 格式,然后在 manage datapools 中导入;

    实际应用:

    开发部最近提出对现有软件系统的登陆功能进行测试。测试工程师设计测试用例,在实际工作中发现登陆系统版本基本稳定,而且功能孤立,界面在将来的版本中变化的可能性不大,所以决定测试自动化,减少人工重复劳动,提高测试效率。

    测试工程师开始利用黑盒测试方法等价类法,因果分析法,边界值法等方法设计测试用例,开发功能测试脚本,用 datapool (数据池中的数据是设计测试用例的时候用到的输入值)保存测试数据。 登陆界面需要输入用户名,密码,在数据池中建立两个字段 username,password 。 Datapool 中的数据和测试用例中输入数据相一致。

    第一步:创建名字为 dp 的 datapool, 假如字段 name,password 并自动生成数据,然后把测试用例中各种数据输入 dp 中

    第二步:录制功能测试脚本,脚本如下:

    Sub Main

    Dim Result As Integer

    'Initially Recorded: 2004-4-24 10:59:24

    'Script Name: Five

    StartApplication "xxx"

    Window SetContext, "Caption= 登陆 ", ""

    InputKeys "sa"

    EditBox Click, "ObjectIndex=1", "Coords=34,9"

    InputKeys "sa"

    PushButton Click, "Text= 登陆 "

    Window SetContext, "Caption= 登陆 ;Class=#32770", ""

    PushButton Click, "Text= 确定 "

    End Sub

    第三步:循环读出 datapool 数据,进行自动化测试,脚本如下

    '$Include "sqautil.sbh"

    Sub Main

    Dim Result As Integer

    Dim dp_id as Long

    Dim dp_Result as Long

    Dim strName as String

    Dim strPassWord as String

    'Initially Recorded: 2004-4-24 10:30:51

    'Script Name: Four

    StartApplication "xxx"

    Window SetContext, "Caption= 登陆 ", ""

    dp_id = SQADatapoolOpen ("dp", FALSE, SQA_DP_SEQUENTIAL, FALSE)

    dp_Result = SQADatapoolFetch (dp_id)

    while dp_Result <> sqaDpEOF

    dp_Result = SQADatapoolValue (dp_id, "name", strName)

    dp_Result = SQADatapoolValue (dp_id, "password", strPassWord)

    dp_Result = SQADatapoolFetch (dp_id)

    InputKeys strName

    EditBox Click, "ObjectIndex=1", "Coords=34,9"

    InputKeys strPassWord

    PushButton Click, "Text= 登陆 "

    Window SetContext, "Caption= 登陆 ;Class=#32770", ""

    PushButton Click, "Text= 确定 "

    wend

    dp_Result = SQADatapoolClose (dp_id)

    End Sub

    第四步: 加入执行成功和失败的 result 信息并写入 Result report 中,和必要的除错处理。对脚本进行优化。加入 BASELINE 设置(对于测试基线有两种思路,一种是文件处理,采用文件类型为文本文件或者 EXCEL 或者 WORD ,读取 DATAPOOL 测试数据和文件内容对比,检测测试数据是否在文件中存在,当然这里的测试基线考虑的不够周全,你可以定制规则,逐步完善,一种是直接从数据库中读取数据进行对比 , 用数据库作为 baseline 来避免以后增加测试用例后改动 baseline 文件,当然这么做跟测试理论不合,应该把预期输出保存到特定文件中作为 baseline, 这个留给你自己动手来改进)。

    脚本如下:

    '$Include "sqautil.sbh"

    Sub Main

    Dim Result As Integer

    Dim dp_id as Long

    Dim dp_Result as Long

    Dim strMessage as String

    Dim vSText as string

    Dim cnn As object

    Dim Rst As object

    Dim strLink As String

    Dim strSql As String

    Dim strName as String

    Dim strPassWord as String

    'Initially Recorded: 2004-4-24 10:30:51

    'Script Name: Four

    strLink = " 连接字符串 "

    Set cnn = CreateObject("ADODB.Connection")

    Set Rst = CreateObject("ADODB.Recordset")

    cnn.Open strLink

    Rst.CursorLocation = 0

    Rst.LockType = 1

    Rst.CursorType = 2

    On Error Goto Last

    StartApplication "xxx"

    Window SetContext, "Caption= 登陆 ", ""

    dp_id = SQADatapoolOpen ("dp", FALSE, SQA_DP_SEQUENTIAL, FALSE)

    dp_Result = SQADatapoolFetch (dp_id)

    if (dp_Result = 0) then

    while dp_Result <> sqaDpEOF

    dp_Result = SQADatapoolValue (dp_id, "name", strName)

    dp_Result = SQADatapoolValue (dp_id, "password", strPassWord)

    dp_Result = SQADatapoolFetch (dp_id)

    InputKeys strName

    EditBox Click, "ObjectIndex=1", "Coords=34,9"

    InputKeys strPassWord

    PushButton Click, "Text= 登陆 "

    strMessage = " 用户名: " + strName + "; 密码: " + strPassWord

    strSql = "select * from login where name = "" " + strName + " "" and password = """ + strPassWord + """"

    Rst.open strSql, cnn

    Window SetContext, "Caption= 登陆 ;Class=#32770", ""

    ‘ 这个函数是作为插入验证点,验证点为窗体提示信息,没有用 window image 来作为验证点,是因为无法把该脚本进行模块化,存入 shl 文件中,将来多平台使用。

    SQAGetProperty "Label", "Text", vSText

    ‘ 如果 rst.RecordCount 返回值为 1 ,说明此用户在数据库中存在

    ‘ 测试用例分为成功,失败的测试用例,失败的测试用例中即使数据

    ' 错误,但有预期输出就是成功的用例,所以写入 result report 中的信

    ‘ 息分为三种,成功,失败,预期失败,对于程序中有不是预期的窗

    ‘ 体,用程序自动关闭掉,继续执行,这里安全的做法做标志然后关

    ‘ 闭整个软件,重新启动软件,测试脚本从失败处继续执行

    if Rst.RecordCount= 1 then

    if (vSText=" 登陆成功 ") then

    PushButton Click, "Text= 确定 "

    SQALogMessage sqaPass, " 测试数据为 " + strMessage + " 的测试用例执行成功 ", " 项目名称 "

    else

    ' 出现异常窗体,该用例测试失败

    SQALogMessage sqaFail, " 测试数据为 " + strMessage + " 的测试用例执行失败 ", " 项目名称 "

    SQAGetProperty "Window", "Text", vSText

    SQALogMessage sqaFail, " 出现错误窗体 :"+ vSText, " 项目名称 "

    Window CloseWin, "Caption=" + vSText, ""

    end if

    else

    if (vSText=" 登陆失败 ") then

    ' 数据错误,用例执行失败,软件功能正常

    PushButton Click, "Text= 确定 "

    SQALogMessage sqaFail, " 测试数据为 " + strMessage + " 的测试用例执行失败但软件功能正常 ", " 项目名称 "

    else

    ' 出现异常窗体,该用例测试失败

    SQALogMessage sqaFail, " 测试数据为 " + strMessage + " 的测试用例执行失败 ", " 项目名称 "

    SQAGetProperty "Window", "Text", vSText

    SQALogMessage sqaFail, " 出现错误窗体 :"+ vSText, " 项目名称 "

    Window CloseWin, "Caption=" + vSText, ""

    end if

    end if

    wend

    dp_Result = SQADatapoolClose (dp_id)

    else

    SQALogMessage sqaFail, " 数据池打开失败 ", " 项目名称 "

    end if

    Last:

    SQALogMessage sqaFail, " 测试脚本发生异常,测试脚本执行失败 ", " 项目名称 "

    End Sub

    总结:

    上边脚本是对登陆功能测试自动化初步优化后的代码,后边还要做的是脚本模块化,函数话,功能分切。脚本过大不容易维护,把其中连接数据库,处理 datapool 功能写成函数提供其他工程使用。其实也可以把测试数据存入文本文件 ,word,excel 等文件中,然后读出处理模拟 datapool 功能,但开发脚本工程量大。 datapool 提供自动生成数据功能和能够和工程结合是它的优点,但很困难多个工程共享 datapool 。


21/212>
Tags:
打印

>> 相关资讯:

上一篇   下一篇
最新评论
查看全部评论
评论总数 1
  • [ 删除 ] 网友: Guest 于 (2008-2-21 14:05:29, 评分: 1 )
    1
 
-5 -3 -1 - 1 3 5

评分

您的评论

我来说两句

seccode

·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为