不断变动中的 Web 页面以及 Web 程序,使得 Web 应用的测试及测试脚本开发变成一种令人沮丧的工作。通过使用 IBM® Rational® Functional Tester,您就可以开发出能够经受住这些变更的整洁的测试脚本,即便在 Web 应用经历过若干次构建之后,测试脚本仍然能进行有效的测试。
因特网和万维网已经成为我们日常生活的一部分。当然,今天我们所看到的大多数 Web 页面和 Web 程序都是动态的。这些不断变动的页面,使得 Web 界面的自动化测试,变得十分具有挑战性。IBM® Rational® Functional Tester 可以帮助您,实现自动化测试,同时它们链接的正在测试的程序和页面仍然在不断的变动之中。
您的测试也行还包含了在日期选择窗口中选择一个随机的日期。对于通过的测试,随机状态下选择的日期必须得到认知。在 图 1 中显示的日期选择对象,以及向对象存储库添加链接的一般策略,存在以下问题:
添加所有这些日期,会花费您的测试开发时间,去添加链接,以及用数以百计的日期链接来填充对象存储库。
既然不能依赖这么多的链接,您可以创建动态的对象,并使用它们来包含该日期选择窗口,包含使用一年中任意一天的可能性。这可以使您的脚本有足够的灵活性,去支持使用不同的日期。该方法并不需要您向对象数据库添加任何的日期对象。
要点:
在您使用动态创建的对象之后,并且不再需要它时,就将其注销掉。Rational Functional Tester 在整个回馈结束之后,而不是脚本结束之后,才注销联系引用。当对象的联系引用存在时,Rational Functional Tester 会阻止程序中的对象处于完全自由的状态。如果对象一直没有注册,那么垃圾收集器就不会关注没有用的对象,因为 Rational Functional Tester 在引用它。这种引用关系阻止了内存的释放,而这会导致不可预料问题的产生。
为了创建动态的日期选择对象,您需要首先看到对象的属性:
您可以为日期链接使用一个规范的表达式,并决定运行时的对象。在 Value 列中,为对象输入以下值:javascript.:dateHandler(%20\\d+,\\d+,\\d+%20);
规范的表达式包含了 图 1 中可以看到的 35 个可能的日期链接。但是,您需要添加一年中所有可能的日期。
注意:
查看 Rational Functional Tester Information Center 已得到使用规范表达式的详细信息。
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(); } |
指定导航链接可以聚集测试脚本,并浪费您宝贵的时间。例如,导航至如 图 3所示的页面,需要您点击四到五个链接:Rational>Downloads>Plug-ins>Ready for Rational Plug-in Central。您的测试将会包含 列表 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 所示的层级结构。
在您的测试中,假设您想要切换至 Ready for IBM Rational Plug-in Central 页面。按照以下步骤进行操作:
添加单行方法以替换与 列表 2 中的行相似的五个链接行:
方法 gotoPage(String) 首先会检查是否可以从当前的 Web 页面中得到 link_rationalPluginCentral 。如果有链接,那么方法就会点击链接。如果没有链接,那么方法就会检查对象的父类,link_plugins。如果该页面不可用,那么方法就会检查它的父类,link_downloads,如此这般按照层级结构往上追溯。
您不需要包含脚本中的所有这些链接,而且您可以重复使用 XML 层级结构代码以及方法,以进一步提高效率。
提示:
为了给 WebSphere 页面打开 Plug-in Central 页面,您必须在与 列表 3 所示的相似的 XML 层级结构来指定导航。
您可以通过以下操作方式,来构建整洁、紧凑以及灵活的脚本:
多花点时间在测试上,您就可以少花点时间去调整 Web 程序中不可避免变更的脚本了。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/14780873/viewspace-626156/ ,如需转载,请注明出处,否则将追究法律责任。