您的位置:
中国软件测试联盟  >> 资讯  >> Mercury系列  >> Winrunner  >> 查看资讯

使用WinRunner的几点建议

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

分解TestCase

    在大型程序测试中,往往有很多任务是可以分开来Record.同时,如果录制的代码过

    长的,进行调试是很麻烦的事情,此外如果今后某一部分的程序进行了修改的话,修改和重

    新录制的工作也是非常痛苦的一件使用。

    因此我们可以将一个TestCase 进行分解,分解TestCase 可以采用以下几种方式

    1、将任务分段,比如Log、Logout、公共窗口的打开、关闭

    2、错误处理的分类,比如将某一输入项目的各中错误输入分开录制

    3、公共界面的操作函数化统一处理,这种方式主要可以象移动BOSS 的业务受理等不

    同窗口使用同一子界面的情况,如DELPHI/C++ Builder 中的Frame.

    将不同任务(TestCASE)的分解之后,我们可以使用call 函数及自定义函数机制来调

    用不同的子Script、函数来完成一个的TestCase

通过随机组合实现大规模路径覆盖

    有时候我们需要将一组数据随机组合来进行大量数据测试,如填写某些表单。那么我们

    有两种办法:一是使用外边工具随机生成大量数据,也可用使用先将各个数据按测试要求生

    成一小组数据,然后使用rand 方法随机抽取数据来测试

    伪代码如下

data a[];

date b[];

for (i=0;i<要测试的次数;i++){

ca=a[rand()]

cb=b[rand()]

dosomething;

}

    使用这种代码的好处是随意调整测试力度,缺点是数据单一,不想外边工具一样生产的

    数据的多样化。如果想根据数据分段标准动态产生不同数据,应该使用其他编程工具来生产

    而不应采用这种办法。

动态修改chk 文件实行参数化的动态Check

    有时候我们知道在测试过程中的某些数据是动态生产的,比如某些按顺序或随机产生的

    单号,而我们又往往需要根据这个单号进行一些判断,比如数据库中对应的数据是否完整。

    还有,当我们需要根据输入的某些条件来判断输出的条件是否正确,这个时候WINRUNNER

    就无能为力了,因为它目前没有提来实现参数化的Check.

    但是我们可用使用WINRUNNER 的函数及WINNRUNNER 的录制功能,先录制一个使

    用ULTRAEDIT(或类似工具)手工修改chk 文件的函数。然后将要修改的内容参数化,在

    主SCRIPT 执行Check 以前先调用该函数。

在Script 里面管理GUI

    使用WINRUNNER 都知道GUI 文件的重要性,MI 推荐的一种方式是专人来管理GUI

    文件,整个测试使用同一个/系列GUI 文件。但实际我觉得这很困难的,特别是程序比较的

    话,光是找出所有的窗口就已经是很痛苦的一件事情。我认为应该首先应该将GUI 与SCRIPT

    同时存储在同一目录下。

    然后使用GUI_load 在SCRIPT 开始以前就装载GUI,在SCRIPT 开始增加:

if (GUI_load(".\\login.gui")!=0)

{

pause ("Can't load login.gui");

texit;

}

    使用Winner 做过复杂测试的可能会问,如果不同GUI 文件中的对象名称相同的话,运

    行时候就会出问题。因此我们应该在SCRIPT 完毕的时候加入

    GUI_close(".\\login.gui");

注意恢复测试前的状态

    此外,如果我们要连续运行多个测试CASE、就必须考虑将被测试程序恢复测试前的状

    态,比如我们在测试SCRIPT A 中打开了窗口A,如果下一个TESTCASE 不需要用到窗口A,

    那么在SCRIPT A 窗口A.这样下一个TESTCASE 才能正常运行。

    如果我们采用采用批处理及CALL 的方式来组织SCRIPT 的话,就应该坚持这样一个原

    则:“谁打开、谁关闭”,这样才便于管理。

    此外如果对数据库的操作也要根据具体要求考虑恢复。这些操作可以考虑通过录制通过

    数据库客户端的操作来实现。

WinRunner 脚本标准格式


目录结构

    存放目录要求:

    1、根目录与项目名称相同,如江西移动BOSS 测试目录为JXBOSS

    2、根目录下应该是按子项目存放,如SALES、ACCOUNT.如果有公共脚本,存

    放在Share 目录下面

    3、子项目下面应该根据功能/TestCase 来存放,如果有公共脚本也应该存放在

    Share 目录下

    4、为存取及备份方便,目录不能使用中文。使用的名称应该尽量与开发保持一致

    5、GUI 文件应该存放在脚本的同一目录,并且名称相同

    6、正确性测试(使用完全正确数据来检查程序功能是否完成)目录名称规定为

validity

以下是一个目录例子

JxBoss

-Sales

--ChangeSimCard

--validity

--CheckSimNoExistAnIdError

--Share

--Share

-Account

    脚本要求

    注释要求

    脚本创建及修改说明注释

    每个脚本的开头注释格式如下:

    #脚本名称:文件名称

    #创建人:创建人

    #创建日期:格式为YYYY/MM/DD

    #功能:脚本完成的功能描述

    #运行前要求:运行前的要打开的窗口及状态要求、数据库中的数据要求、被测试

    程序运行目录等

    #参考文档:描述录制代码是参考的有关设计测试文档

    #修改历史:

    # 修改人:

    # 修改  http://www.csai.cn  格式为YYYY/MM/DD

    # 主要修改内容:

    注意创建人及修改人必须是中文完整姓名,不允许使用其它任何名称。运行前的要求一

    定要描述清楚

    子功能注释

    在各小段功能前应该加入功能注释,注意不能只是WinRunner 自己产生的注释

    如:
# insert a record

# Flight Reservation

set_window ("Flight Reservation", 1);

obj_mouse_click ("Button", 13, 16, LEFT);

obj_type ("MSMaskWndClass","101002");

list_select_item ("Fly From:", "London"); # Item Number 2;

list_select_item ("Fly To:", "Paris"); # Item Number 3;

obj_mouse_click ("FLIGHT", 56, 22, LEFT);

注释可以使用英文或中文。

修改代码说明注释

在具体修改的代码附近应该加入如下注释

#修改人

#修改日期

#修改原因/增加功能

注释可以放在一行中,简单修改可以忽略“修改原因/增加功能”,复杂修改应该不能忽

略(简单及复杂标准待定)

代码要求

路径要求

代码中使用的路径都应该使用相对路径,不允许出现类似“d:\\”、“\\”下的代码,应该

使用类似“..\\..\\”的代码。

在Script 里面打开和关闭GUI

各Script 的GUI 的文件应该分开保存在与Script 保存在同一个目录,应该使用用

GUI_load 在SCRIPT 开始以前就装载GUI,在SCRIPT 开始增加:

if (GUI_load(".\\login.gui")!=0)

{

pause ("Can't load login.gui");

texit;

}

在SCRIPT 完毕的时候加入

GUI_close(".\\login.gui");

关闭GUI,注意代码中的路径一定要使用相对路径。

错误报告

在使用错误报告的时候,应该注意包括出错的脚本文件名称,这样当脚本文件被其他脚

本调用时候,也能很清楚在什么地方没有通过。Report_msg 的参数格式定义为“文件名称:

错误描述”。同时鉴于WinRunner 的Check 函数不能提供清楚的错误报告,要求错误报告使

用以方式

if ( win_check_bitmap("Flight Reservations", "Img1", 1)!=E_OK)

{

report_msg("DateCheck:月份输入错误提示不对!");

}

附件:一个完整的例子

#脚本名称:DateCheck

#创建人:谢慧强

#创建日期:2002/09/08

#功能:检查FLIGHTA 程序在输入错误月份的时候提示是否正确

#运行前要求:要求FLIGHA 进入定票窗口(New_Order 状态)且无任何数据输入

# 或者FLIGHTA 没有运行,这时候要求FLIGHTA。EXE 位

# 于E:\\Program Files\\Mercury

Interactive\\WinRunner\\samples\\flight\\app\\flight1a.exe

#参考文档:无

#修改历史:

# 修改人:谢慧强

# 修改  http://www.csai.cn  2002/09/09

# 主要修改内容:不采用位图方式,改为直接判断字符串内容

#load gui file

#Flight Reservation

if (GUI_load(".\\DateCheck.gui")!=0)

{

report_msg ("DataCheck:Can't load .\\DateCheck.gui");

texit;

}

#Check windows exists ,if don't exist ,call login to open it.

# Flight Reservation

if (win_exists("Flight Reservation")!=E_OK){

#pause ("Windows Flight Reservation don't exist");

#texit;

call "..\\login\\login"();

}

#input error month

win_activate ("Flight Reservation");

set_window ("Flight Reservation", 3);

obj_mouse_drag ("Button_4", 17, 6, 17, 7, LEFT);

obj_type ("MSMaskWndClass","301212");

list_select_item ("Fly From:", "Denver"); # Item Number 0;

#check message bitmap

# Flight Reservations_1

set_window ("Flight Reservations", 3);

#2002/09/09 谢慧强

#if ( win_check_bitmap("Flight Reservations", "Img1", 1)!=E_OK)

#static_check_info("Invalid month Entered.The month must be greater than 01 and less than

12.(static)","enabled",1);

if (static_check_info("CheckMessage","label","Invalid month Entered.The month must be

greater than 01 and less than 12.")!=E_OK)

#2002/09/09 谢慧强修改结束

{

report_msg("DateCheck:月份输入错误提示不对!");

}

button_press ("确定");

#close gui file

GUI_close(".\\DateCheck.gui");


Tags:
打印

>> 相关资讯:

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

评分

您的评论

我来说两句

seccode

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