IBM Rational Functional Tester 脚本来测试动态 Web 应用程序

转自:http://www.ibm.com/developerworks/cn/rational/09/testdynamicwebappsinrationalfunctionaltester/index.html

不断变动中的 Web 页面以及 Web 程序,使得 Web 应用的测试及测试脚本开发变成一种令人沮丧的工作。通过使用 IBM® Rational® Functional Tester,您就可以开发出能够经受住这些变更的整洁的测试脚本,即便在 Web 应用经历过若干次构建之后,测试脚本仍然能进行有效的测试。

变更影响着自动化的测试

因特网和万维网已经成为我们日常生活的一部分。当然,今天我们所看到的大多数 Web 页面和 Web 程序都是动态的。这些不断变动的页面,使得 Web 界面的自动化测试,变得十分具有挑战性。IBM® Rational® Functional Tester 可以帮助您,实现自动化测试,同时它们链接的正在测试的程序和页面仍然在不断的变动之中。

包含对对象的操作而无需添加至对象存储库

您的测试也行还包含了在日期选择窗口中选择一个随机的日期。对于通过的测试,随机状态下选择的日期必须得到认知。在 图 1 中显示的日期选择对象,以及向对象存储库添加链接的一般策略,存在以下问题:

  • 点击日期链接时,日期链接必须添加至对象存储库中;否则,在测试运行期间不能选择任何日期。
  • 如果选择的日期是随机的,那么您需要按照日期链接来向存储库添加一年 365 天的日期。

添加所有这些日期,会花费您的测试开发时间,去添加链接,以及用数以百计的日期链接来填充对象存储库。


图 1. 日期选择窗口
选择月份和年的日历显示

针对对象的灵活解决方案

既然不能依赖这么多的链接,您可以创建动态的对象,并使用它们来包含该日期选择窗口,包含使用一年中任意一天的可能性。这可以使您的脚本有足够的灵活性,去支持使用不同的日期。该方法并不需要您向对象数据库添加任何的日期对象。

要点:
在您使用动态创建的对象之后,并且不再需要它时,就将其注销掉。Rational Functional Tester 在整个回馈结束之后,而不是脚本结束之后,才注销联系引用。当对象的联系引用存在时,Rational Functional Tester 会阻止程序中的对象处于完全自由的状态。如果对象一直没有注册,那么垃圾收集器就不会关注没有用的对象,因为 Rational Functional Tester 在引用它。这种引用关系阻止了内存的释放,而这会导致不可预料问题的产生。

为了创建动态的日期选择对象,您需要首先看到对象的属性:

  1. 添加对象,这样您就可以看到对象的属性,选择 19 以表达 2009 年 7 月 19 日。
  2. 在您添加链接的地方打开脚本的对象存储库。属性就显示在 图 2 中。日期链接显示为 javascript.:dateHandler(%2019,7,2009%20)


图 2. 带有测试对象层级结构以及对象属性的对象图编辑器
显示链接值的对象图编辑器

您可以为日期链接使用一个规范的表达式,并决定运行时的对象。在 Value 列中,为对象输入以下值:javascript.:dateHandler(%20\\d+,\\d+,\\d+%20);

规范的表达式包含了 图 1 中可以看到的 35 个可能的日期链接。但是,您需要添加一年中所有可能的日期。

注意:
查看 Rational Functional Tester Information Center 已得到使用规范表达式的详细信息。

  1. 展开规范的表达式,以包含一年中所有可能的日期(见于列表 1)。通过按这种方式书写规范的表达式,测试可以适应任意特定的日期。


列表 1. 点击日期链接的范例代码

				
				public
				void clickReqDate(String date, String month, String year) 
throws Exception{
	
	RegularExpression dateHrefReProp = new
	RegularExpression("javascript.:dateHandler\\
	(%20"+date+","+month+",\\d+%20\\);",true);
		
	//Finding the object from the dialog which has properties of
	//class as Html.A and href as dateHrefProp
	TestObject [] dateObjs = find(atDescendant
	(".class","Html.A", ".href", dateHrefReProp));
		
	System.out.println(dateObjs.length);
		
	//converting the testObject to GuiTestObject
	GuiTestObject dateObj = (GuiTestObject)dateObjs[0];
	dateObj.waitForExistence();
		
	//getting the text property of the date at runtime.
	String runtimeDate= (String) dateObj.getProperty(".text");
	System.out.println("Date: "+runtimeDate);
		
	//Comparing the String that is passed through the method with that of the 
	//date String that we got at runtime.
		
	if(runtimeDate.equalsIgnoreCase(date)){
		dateObj.click();
	}
		
	//unregistering of the object.
	dateObj.unregister();
		
	}

  1. 删除您用于选择 2009 年 7 月 19 日单个日期的对象。
  2. 为了选择 2009 年 7 月 19 日这个日期,调用参数为 clickReqDate("19","7","2009"); 的方法;
  3. 注销您刚刚创建的动态对象,这是一种明智的操作方式。查看 列表 1的最后一段,以得到注销对象的命令。

    切换至页面而无需用链接填充脚本

    指定导航链接可以聚集测试脚本,并浪费您宝贵的时间。例如,导航至如 图 3所示的页面,需要您点击四到五个链接:Rational>Downloads>Plug-ins>Ready for Rational Plug-in Central。您的测试将会包含 列表 2所示的代码。该代码呈现了对某个页面的导航。试想一下在测试进行时用户要打开多少个程序中的页面。


    图 3. 显示导航的范例站点
    Web 页面显示了打开另一个页面的选项


    列表 2. 测试脚本中的链接
    				link_rational().click();
    link_downloads().click();
    link_plugins().click();
    link_rationalPluginCentre();
    

    在选择最后的链接之后,测试器可能需要导航致 WebSphere 中一个相似的链接。测试需要点击四到五次附加的链接。大多数的脚本含有链接编码。

    针对导航的灵活解决方案

    在笔者刚刚处理的存储域产品中,我们花费了大量的时间,去在不同的页面之间进行切换。如果我们墨守测试脚本中的记录点击的规则,那么光是点击链接这一项就要占据脚本代码的 70% 左右。

    但是,您可以减少脚本中的链接,并创建一个可以当作选择不同页面功能的脚本。我们创建的 XML 代码,维持了链接和项的父子关系结构。而且,我们开发出一种方法,通过从已开发的 XML 代码得到链接的父子关系信息,来点击需要的链接。

    点击 Ready for IBM Rational Plug-in Central 链接的 XML 代码,如前面的 图 3 所示,拥有如列表 3 所示的层级结构。


    列表 3. 显示 Rational Web 页面链接层级结构的 XML 代码
    				

    在您的测试中,假设您想要切换至 Ready for IBM Rational Plug-in Central 页面。按照以下步骤进行操作:

    1. 创建一个获取链接层级结构关系的 XML 代码(查看 列表 3)。
    2. 在您的测试脚本中,使用以下方法:
      gotoPage("link_rationalPluginCentral");


    添加单行方法以替换与 列表 2 中的行相似的五个链接行:

    方法 gotoPage(String) 首先会检查是否可以从当前的 Web 页面中得到 link_rationalPluginCentral 。如果有链接,那么方法就会点击链接。如果没有链接,那么方法就会检查对象的父类,link_plugins。如果该页面不可用,那么方法就会检查它的父类,link_downloads,如此这般按照层级结构往上追溯。

    您不需要包含脚本中的所有这些链接,而且您可以重复使用 XML 层级结构代码以及方法,以进一步提高效率。

    1. 在您对 Plug-in Central 页面执行需要的操作之后,切换至与 WebSphere 相似的页面,我们将这种方法称为:gotoPage("link_webspherePluginCentral");

    提示:
    为了给 WebSphere 页面打开 Plug-in Central 页面,您必须在与 列表 3 所示的相似的 XML 层级结构来指定导航。

    总结

    您可以通过以下操作方式,来构建整洁、紧凑以及灵活的脚本:

    • 向目标存储库只添加需要的对象,以保持存储库的整洁。创建动态的对象,并按需要操作它们,以减少测试对目标数据库的依赖程度,而这进一步增强了对象的认知度,并显著降低了维护的难度。
    • 通过添加规范的表达式以及 XML 链接层状结构,来保持脚本的灵活性。这样,测试就可以接受频繁变更的对象以及切换。
    • 通过深入思考包含对象以及导航的方式,来增加灵活性,并降级动态 Web 程序需要的包裹维护难度。

    多花点时间在测试上,您就可以少花点时间去调整 Web 程序中不可避免变更的脚本了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14780873/viewspace-622535/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14780873/viewspace-622535/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值