使用分层的 Selenium 框架进行复杂 Web 应用的自动测试(3)

发表于:2014-08-07来源:IBM作者:王晨点击数: 标签:selenium
} public void clickSearchBtn() { utils.waitForElement((String) elemMap.get(TestGoogleConstants.GOOGLE_SEARCH_BTN), 30); selenium.click((String) elemMap.get(TestGoogleConstants.GOOGLE_SEARCH_BTN)); } p

  }

  public void clickSearchBtn() {

  utils.waitForElement((String)

  elemMap.get(TestGoogleConstants.GOOGLE_SEARCH_BTN), 30);

  selenium.click((String) elemMap.get(TestGoogleConstants.GOOGLE_SEARCH_BTN));

  }

  public void verifyResult(HashMap paraMap){

  stc.verifyTrue(selenium.isTextPresent((String)

  paraMap.get(TestGoogleConstants.VERIFY_STRING)));

  }

  clickSearchBtn 方法无需参数输入,因为其任务只是点击搜索按钮,在 test cases 需要时调用即可。这里只是以一个简单的例子说明如何分解任务,对于实际的 test case,这个过程会复杂许多,但其后的复用与灵活调用完全值得这些工作的付出。

  Test Cases 实现与 Test Tasks 调用

  Test Cases 作为一系列测试步骤的集合,可以通过调用若干 Test Tasks 实现。以贯穿本文的搜索引擎为例,以此调用上一部分定义的 test taskss,重现整个测试过程。简单代码如下所示。

  清单 9. Test Case 代码示例

  @Parameters( { "google_se_para_1" })

  @Test

  public void testGoogle_1(String paraFile) {

  paraMap = (HashMap) XMLParser.getInstance()

  .parserXml(paraFile);

  tgTasks.openSite();

  tgTasks.typeSearchTxtField(paraMap);

  tgTasks.clickSearchBtn();

  tgTasks.verifyResult(paraMap);

  }

  Test Cases 在分层 Selenium 测试框架下,就是按照要求调用已有的 Test Tasks。值得注意的是,在上面两个代码列表里的 paraMap 参数。这个哈希表由我们实现的解析器解析参数定义文件而得到。TestNG 的 Parameters 参数机制,使得 Test Cases 能够灵活地指定参数文件,从而驱动不同的 Test Cases。

  清单 10. 参数定义文件示例

  developerworks

  developerWorks 中国

  建立输入参数解析器(parser)及参数文件

  Test Cases 与 Test Tasks 的顺畅工作,需要输入参数文件及对应的参数解析器的配合。我们以上面代码清单的例子说明参数文件的格式。 标签在最外层,其内的子元素为具体的参数值,如 标签表示一个页面元素与其对应的输入。 元素的 id 属性与清单 6 中的 . properties 文件定义的 locators 对应,而其子元素 则表示该 locator 的输入值。解析器的具体实现可以参见所附的示例源代码。

  回页首

  导出可执行 Jar 包以部署到各类测试服务器

  为了能够把 Selenium 测试脚本导出成一个可执行 Jar 包,我们可以把 testng.xml 中定义的相关内容,在 Java 代码中实现,如下所示。

  清单 11. testng.xml 的 Java 表示

  //suite tag

  XmlSuite suite = new XmlSuite();

  //set suite name

  suite.setName("Test Search Engine");

  //set parameter tag

  HashMap para = new HashMap();

  para.put("google_se_para_1", "/src/resources/google_se_para_1.xml");

  suite.setParameters(para);

  //test tag

  XmlTest testGoogle = new XmlTest(suite);

  testGoogle.setName("LDAP configuration template");

  List classes = new ArrayList();

  classes.add(new XmlClass(TestGoogleTestCase.class));

  testGoogle.setXmlClasses(classes);

  这份代码列表的功能与前文的 testng.xml 完全相同,把这些代码添加到新定义的类 SearchEngineSuite 的 main 函数中,在这个类的方法中启动并关闭 Selenium 服务器,并把相关文件打成一个可执行 Jar,就可以通过命令行的 java – jar 命令,执行 Selenium 测试。当然,因为具有通用性,也可以部署到各类测试服务器,执行测试。

  这里推荐使用 Eclipse 的插件 Fat Jar 导出 runnalbe Jar。首先,填入输出 Jar 的命名,并把 SearchEngineSuite 设置为 Main-Class。然后,勾选”merge individual-sections of all MANIFEST.MF files”,后一项视需求勾选。

  图 2. Fat Jar 导出步骤 1

图 2. Fat Jar 导出步骤 1

  进入下一步,选择要导出的文件,包含源代码以及用到的 Jar 文件,点击完成即可。

  图 3. Fat Jar 导出步骤 2

图 3. Fat Jar 导出步骤 2

原文转自:http://www.ibm.com/developerworks/cn/java/j-lo-selenium/index.html