快速业务通道

追求代码质量 - 使用TestNG-Abbot实现自动化GUI测试 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
创建了一个简单的GUI,它执行 一种功能 —— 在底层字典(也就是一个数据库)中查阅一个给定的单词并显示 其释义。不管该应用程序实际的代码如何,测试该 GUI 用户场景包括三个步骤 :

在文本框中输入一个单词。

单击 Find Word 按钮。

验证是否给出了该单词释义。

当然,也存在一些极端的例子,比如一个用户按下了 Find Word 按钮但没有 输入单词,或者,用户输入了一个无效的单词。我将通过一些其他的测试案例说 明如何处理这类场景。

了解 GUI

图 1 显示了已启动的Word Finder GUI。记住该 GUI 之所以简单只有一个 原因:它演示了 TestNG-Abbot 的三个 fixture 类以及一些要引导的测试用例 !

图 1. Word Finder GUI

当使用TestNG-Abbot 进行测试时,应该首先检查 GUI 的组件。Word Finder GUI 由图 2 所示的三个组件组成:

图 2. Word Finder GUI 的组件

如您所见,Word Finder GUI 由一个 JTextField(用来输入要查询的单词) 、一个 JButton(使 GUI 从字典数据库中获取释义)和一个 JEditorPane (显 示释义)组成。

在良好的场景中,如果我输入 pugnacious 然后单击 Find Word 按钮, JEditorPane 将显示 “Combative in nature; belligerent”,如图 3 所示:

图 3. 良好的场景 —— 工作良好!

追求代码质量 - 使用TestNG-Abbot实现自动化GUI测试(3)

时间:2010-12-09 IBM Andrew Glover

使用TestNG-Abbot 进行测试

要开始使用TestNG-Abbot,需要创建一个常规的测试 fixture,它将使用TestNG 的BeforeMethod 和 AfterMethod 注释为您的GUI 创建一个实例。TestNG-Abbot 框架附带了一个方便的AbbotFixture 对象,它简化了 GUI 组件 的使用,实际上也引导了整个测试过程。要在测试 fixture 中使用该对象,需 要在测试前将一个 GUI 实例传递给 fixture 对象的showWindow() 方法,然后 使用名为 cleanUp() 的方法对 fixture 进行清理。

在清单 1 中,我创建了一个 TestNG 测试(实际上并没有对其做任何测试) ,该测试在 fixture 中使用TestNG-Abbot 的AbbotFixture 对象来存放 Word Finder GUI 的实例。

清单 1. 使用AbbotFixture 对象定义 WordFindGUITest

public  class WordFindGUITest {   private AbbotFixture fixture;   @BeforeMethod   private void initializeGUI() {   fixture = new AbbotFixture();   fixture.showWindow(new WordFind(), new Dimension(269,  184));   }   @AfterMethod   public void tearDownGUI() {   fixture.cleanUp();   } }

由于 Word Finder GUI 的用户可见的行为会影响 图 2 所示的三个组件,需 要通过编程对其进行调整,以确保工作能正常进行。比如,验证 图 3 演示的良 好的场景,需要执行下面三个步骤:

获得对 JTextField 的引用并向其添加一些文本。

获得 JButton 的句柄并单击它。

获得对 JLabel 组件的引用并检验是否显示了正确的释义。

检验良好的场景

使用TestNG-Abbot,可以通过这三个方便的fixture 类型执行上面所属的三个步骤:TextComponentFixture 用于 JTextField;ButtonFixture 用于 Find Word 按钮;LabelFixture 用来验证 JLabel 中特定的文本。

清单 2 显示了用于验证 图 3 中演示的内容是否可以正常工作的代码:

清单 2. 测试一个良好场景

@Test public void assertDefinitionPresent() {   TextComponentFixture text1 = new TextComponentFixture (this.fixture,    "wordValue");   text1.enterText("pugnacious");   ButtonFixture bfix = new ButtonFixture(this.fixture,  "findWord");   bfix.click();   LabelF

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号