dennyqiang 发表于 2010-6-10 23:04:36

[连载] 精通RFT-09: RFT录制与脚本优化

首先请朋友们注意,如何配置被测程序及建立测试项目这些很很基础的东西我就不写出来了,大家如果有疑问直接问我吧,这样还能有个互动。

推荐大家使用RFT 8.1版本,去IBM官网上下载,1个多G,注册一个帐号就可以了,下载速度也挺快的。本版块也为大家提供了注册文件,不存在任何期限或功能限制。

另外,RFT 8.1新增加了一个功能叫Simplified Scripting,这个功能实在是够鸡肋,除了麻烦之外我还没找到它的任何优点,BUG到是不少,所以强烈建议大家把这个功能禁用掉,在RFT菜单中,选择Window > Preferences > Functional Test > Simplified Scripting > 不勾选Enable Simplified Scripting > 点击OK或Apply按钮修改选项。

好,现在一切准备就绪,我们就开始使用RFT来录制一段ClassicsJavaA样例程序的测试代码吧。首先确保在Configure > Configure Applications for Testing中已经将ClassicsJavaA应用程序配置好(系统默认已经配置),新建一个脚本开始录制测试代码,基本操作步骤如下:
1) 在唱片信息树型列表中选择Schubert > Symphonies Nos. 5 & 9。
2) 点击Details Tab按钮查看唱片详情。
3) 点击Place Order按钮进入下一步。
4) Member Logon对话框打开,选择Existing Customer单选框,并选择Susan Flontly客户,输入密码:123456并选择Remember Password,最后OK确认。
5) 当客户登录成功后(事实上系统并不进行任何验证,但为了了解RFT对相关控件的操作方式,我们尽可能地使用到每一类控件),进入到Place an Order界面,输入如下信息:
 Quantity: 3
 Card Number(include the spaces): 1111 2222 3333 4444
 Expiration Date: 2020-12
6) 点击Related Items,从列表中选择Mozart: Symphony No. 34: $14.95,点击Add to Order按钮并返回Place an Order界面。
7) 点击按钮Place Order,进行订单确认。
8) 对话框弹出提示用户订单已经成功生成,单击确认按钮并关闭ClassicsJavaA应用程序。

录制完成后RFT自动为我们生成的代码如下:

public void testMain(Object[] args)
{
        startApp("ClassicsJavaA");
       
        // Frame: ClassicsCD
        classicsCD().click(atPoint(412,19));
                tree2().click(atPath("Composers->Schubert->Location(PLUS_MINUS)"));
        tree2().click(atPath("Composers->Schubert->Symphonies Nos. 5 & 9"));
        album().click(atText("Details"));
        placeOrder().click();
       
        // Frame: Member Logon
        existingCustomer().click();
        nameCombo().click();
        nameCombo().click(atText("Susan Flontly"));
        password().click(atPoint(58,16));
        memberLogon().inputChars("123456");
        rememberPassword().clickToState(SELECTED);
        ok().click();
       
        // Frame: Place an Order
        quantity().click(atPoint(28,5));
        placeAnOrder().inputKeys("{BKSP}3");
        cardNumberIncludeTheSpaces().click(atPoint(32,5));
        placeAnOrder().inputChars("1111 2222 3333 4444");
        expirationDate().click(atPoint(10,4));
        placeAnOrder().inputChars("2020-12");
        relatedItems().click();
       
        //
        customList().click(atPoint(152,15));
        addToOrder().click();
       
        // Frame: Place an Order
        placeOrder2().click();
       
        //
        确定().click();
       
        // Frame: ClassicsCD
        classicsCD(ANY,MAY_EXIT).close();
}

自动化测试工具的录制功能比较机械,用户在录制过程中的任何鼠标和键盘操作均进行原始录制,工具本身并不做任何调整和优化,这就导致录制完成后产生的代码可读性差,并且很多代码是完全多余的,我们应在录制完成后对代码进行优化,优化原则如下:
1) 录制脚本过程中自动产生的注释信息对用户无参考价值,应将其删除。
2) 录制过程中由于操作不当产生的多余的代码,应将其删除,如第2行代码:
classicsCD().click(atPoint(412,19)); 是由于操作时在ClassicsJavaA主窗体上进行了单击操作而录制出来的多余脚本。
3) 树型对象的操作“选择某一节点并点击”只需要click一次并正确指定atPath的树型节点路径即可(此原则也同样适用于对标准“菜单”的操作)。
4) RFT对文本框赋值使用的方式是先在文本框上进行点击获得焦点,然后调用主窗体的inputChars方法输入相应的文本,需要使用两行代码实现。而对文本框的赋值操作只需要对该文本框调用setText方法即可,一行代码实现,且代码更具有可读性。
5) 将一些对象名称进行重命名,使其更具可读性,便于理解。
根据以上原则,我们可得到如下经过优化后的脚本:

public void testMain(Object[] args)
{
        // 启动应用程序ClassicsJavaA
        startApp("ClassicsJavaA");
       
        // 选择唱片信息并提交订单
        composerTree().click(atPath("Composers->Schubert->Symphonies Nos. 5 & 9"));
        album().click(atText("Details"));
        placeOrder().click();
       
        // 使用客户名称与密码进行登录
        existingCustomer().click();
        nameCombo().click();
        nameCombo().click(atText("Susan Flontly"));
        password().setText("123456");
        rememberPassword().clickToState(SELECTED);
        memberLogonOk().click();
       
        // 输入订单和信用卡信息
        quantity().setText("3");
        cardNumberIncludeTheSpaces().setText("1111 2222 3333 4444");
        expirationDate().setText("2020-12");
        relatedItems().click();
        customList().click(atPoint(152,15));
        addToOrder().click();
        orderConfirm().click();
        dialogOk().click();
       
        // 最后关闭应用程序
        classicsCD().close();
}

通过以上的讲解,希望朋友们能对RFT有一个基本的了解并能进行一些代码的简单优化,使代码更整洁,更容易理解。

(声明:本文版权归作者个人所有,如需转载,请注明出处,如有需要,请联系QQ: 15903523 (强子)

[ 本帖最后由 dennyqiang 于 2010-6-11 13:43 编辑 ]

ready0709 发表于 2010-6-11 14:59:35

嗯,马上试试 。
支持强子老师。

请问有,数据池方面的例子吗?

dennyqiang 发表于 2010-6-11 15:59:09

原帖由 ready0709 于 2010-6-11 14:59 发表 http://bbs.51testing.com/images/common/back.gif
嗯,马上试试 。
支持强子老师。

请问有,数据池方面的例子吗?

已回复,给了一个简单的应用,如有问题,可直接开帖。

草中人 发表于 2010-6-12 16:10:48

public class FpsScript1 extends FpsScript1Helper
{

public void testMain(Object[] args)
   {
             startApp("ClassicsJavaA");
               
        // Frame: ClassicsCD
        tree2().click(atPath("Composers->Schubert->Location(PLUS_MINUS)"));
        tree2().click(atPath("Composers->Schubert->Symphonies Nos. 5 & 9"));
        album().click(atText("Details"));
        placeOrder().click();
               
        // Frame: Member Logon
        existingCustomer().click();
        nameCombo().drag();
        password().click(atPoint(31,11));
        memberLogon().inputKeys("{Num1}{Num2}{Num3}{Num4}{Num5}{Num6}");
        rememberPassword().clickToState(SELECTED);
        ok().click();
               
        // Frame: Place an Order
        quantity().click(atPoint(37,15));
        quantity().dragToScreenPoint(atPoint(39,10), placeAnOrder().getScreenPoint(atPoint(210,162)));
        cardNumberIncludeTheSpaces().click(atPoint(52,9));
        expirationDate().click(atPoint(38,13));
        relatedItems().click();
               
        //
        customList().click(atPoint(75,22));
        addToOrder().click();
               
        // Frame: Place an Order
        placeOrder2().click();
               
        //
        确定().click();
               
        // Frame: ClassicsCD
        classicsCD(ANY,MAY_EXIT).close();
        }
}
我在录制完后,代码如上,像nameCombo没有click事件,还有密码也不是输入的内容,请问各位高手们,我是不是应该在录制前做一些设置啊?如果是话,应该做怎么样的设置呢?

dennyqiang 发表于 2010-6-17 21:50:45

没关系,直接手动修改就行了。

maobeike 发表于 2010-7-1 17:27:09

这个和RFT的官方教程是一样的,我最近也刚刚看过这个教程,讲的还是很不错的,还配了flash,强子这个也很精炼,期待你的下一讲哦~

wjhbj 发表于 2010-7-13 16:03:56

另外,RFT 8.1新增加了一个功能叫Simplified Scripting,这个功能实在是够鸡肋,除了麻烦之外我还没找到它的任何优点,BUG到是不少,所以强烈建议大家把这个功能禁用掉,在RFT菜单中,选择Window > Preferences > Functional Test > Simplified Scripting > 不勾选Enable Simplified Scripting > 点击OK或Apply按钮修改选项。
这个困扰了我好长时间

dennyqiang 发表于 2010-7-16 11:58:32

原帖由 wjhbj 于 2010-7-13 16:03 发表 http://bbs.51testing.com/images/common/back.gif
另外,RFT 8.1新增加了一个功能叫Simplified Scripting,这个功能实在是够鸡肋,除了麻烦之外我还没找到它的任何优点,BUG到是不少,所以强烈建议大家把这个功能禁用掉,在RFT菜单中,选择Window > Preferences > Fu ...

完全赞同。这个功能实在没有办法和QTP的关键字视图相提并论,不过或许后续版本会提升这一方面的功能。

hwm831002 发表于 2010-11-25 14:24:10

回复 1# dennyqiang


    谢谢楼主无私奉献,正在学习RFT,顶上,期待下一期,很有帮助!

hwm831002 发表于 2010-12-1 11:20:42

强哥,怎么好久没连载了,期待啊.............

勤劳的海狸 发表于 2011-1-13 23:36:28

是啊,期待后续呢。。。

zyingwei2008 发表于 2011-1-14 11:22:49

太感谢强子老师了··

anyfrecom 发表于 2011-2-18 13:39:14

继续跟进、继续顶

anyfrecom 发表于 2011-2-18 16:04:20

很久没有更新了、不会到这一章就结束了吧??????

pritise2004 发表于 2011-5-8 20:27:30

在学校用了一下RFT的前身XDE Tester,用的测试应用程序就是那个自带的唱片销售系统

Rockets 发表于 2011-5-26 18:15:22

Good practice!

xcguo 发表于 2011-9-8 10:07:20

持续关注,求下一集
页: [1]
查看完整版本: [连载] 精通RFT-09: RFT录制与脚本优化