• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

用 TestNG-Abbot 实现自动化 GUI 测试

发布: 2008-4-03 17:28 | 作者: Andrew Glover | 来源: IBM | 查看: 151次 | 进入软件测试论坛讨论

领测软件测试网

了解 GUI

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


图 1. Word Finder GUI
Word Finder GUI 启动时的屏幕快照

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


图 2. Word Finder GUI 的组件
Word Finder GUI 示意图

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

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


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





回页首


使用 TestNG-Abbot 进行测试

要开始使用 TestNG-Abbot,需要创建一个常规的测试 fixture,它将使用 TestNG 的 BeforeMethodAfterMethod 注释为您的 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 演示的良好的场景,需要执行下面三个步骤:

  1. 获得对 JTextField 的引用并向其添加一些文本。
  2. 获得 JButton 的句柄并单击它。
  3. 获得对 JLabel 组件的引用并检验是否显示了正确的释义。

检验良好的场景

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

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


清单 2. 测试一个良好场景
@Testpublic void assertDefinitionPresent() { TextComponentFixture text1 = new TextComponentFixture(this.fixture,   "wordValue"); text1.enterText("pugnacious"); ButtonFixture bfix = new ButtonFixture(this.fixture, "findWord"); bfix.click(); LabelFixture fix = new LabelFixture(this.fixture, "definition"); fix.shouldHaveThisText("Combative in nature; belligerent.");}

注意 fixture 对象通过一个逻辑名称和特定的 GUI 组件连接在一起。例如,在 Word Finder GUI 中,通过编程将 JButton 对象与 “findWord” 名称联系起来。请注意在定义按钮时,我是如何通过调用组件的 setName() 方法做到这点的,如清单 3 所示:


清单 3. 定义 Find Word 按钮
findWordButton = new JButton();findWordButton.setBounds(new Rectangle(71, 113, 105, 29));findWordButton.setText("Find Word");findWordButton.setName("findWord");

同样要注意,在 清单 2 中,我是如何通过将 “findWord” 名称传递给 TestNG-Abbot 的 ButtonFixture 对象而获得对按钮的引用。“单击” 按钮(调用 click 方法)然后使用 TestNG-Abbot 的 LabelFixture 对象插入单词的释义,多么酷!不过不要就此满足。


延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

32/3<123>

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网