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

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

自动化测试框架Tellurium使用方法介绍

发布: 2011-2-28 09:40 | 作者: 方剑 | 来源: 领测软件测试网采编 | 查看: 94次 | 进入软件测试论坛讨论

领测软件测试网

  测试方法

  Tellurium采用一种新的方式,通过UI module的概念来进行自动化测试。使用对象封装Web UI的元素,因此不再需要手动生成和重构UI的定位器。UI module是个简单的复合UI对象,由嵌套的基本UI对象组成。

  这个框架可以在两种模式下运行。第一种模式是作为Selenium框架的wrapper来工作。也就是说,Tellurium core基于UI module中的UI对象属性,生成运行时定位器。生成的运行时定位器然后通过Tellurium扩展传递给Selenium core来调用。

  Tellurium还在开发它自己的驱动引擎,即Tellurium Engine,以更好更有效地支持UI module。

  首先,Tellurium Core把UI module转换成JSON的表示形式。

  然后在使用UI module时,JSON表示的数据被第一次传递给Tellurium Engine。

  接着Tellurium Engine使用Santa算法,定位整个UI module,并将其存在缓存中。

  在接下来的调用中,会直接使用缓存的UI module,而不需要重新定位了。

  此外,Tellurium Core把多条命令合并成一条批处理命令,叫做宏命令,然后在一次调用中把这条批处理发送给Tellurium Engine。这样可以减少请求/响应带来的延迟。

  下面这个例子,使用了该项目网站上的问题搜索UI,来表述框架背后的思想。

  我们从为问题搜索的UI定义UI module开始吧:

  ui.Form(uid: "issueSearch", clocator: [action: "list", method: "GET"]) {

  Selector(uid: "issueType", clocator: [name: "can", id: "can", direct:

  "true"])

  TextBox(uid: "searchLabel", clocator: [tag: "span", text: "for"])

  InputBox(uid: "searchBox", clocator: [type: "text", name: "q", id: "q"])

  SubmitButton(uid: "searchButton", clocator: [value: "Search", direct:

  "true"])

  }

  然后使用下面这个测试方法:

  public void searchIssue(String type, String issue){

  select "issueSearch.issueType", type

  keyType "issueSearch.searchBox", issue

  click "issueSearch.searchButton"

  waitForPageToLoad 30000

  }

  如果有一天,你需要把Selector修改成输入框,那我们只需要更新对应的UI module:

  ui.Form(uid: "issueSearch", clocator: [action: "list", method: "GET"]) {

  InputBox(uid: "issueType", clocator: [name: "can", direct: "true"])

  TextBox(uid: "searchLabel", clocator: [tag: "span", text: "for"])

  InputBox(uid: "searchBox", clocator: [type: "text", name: "q", id: "q"])

  SubmitButton(uid: "searchButton", clocator: [value: "Search", direct: "true"])

  }

  然后修改命令:

  select "issueSearch.issueType", type

  为:

  type "issueSearch.issueType", type

  其余则保持不变。

  如果有动态的Web内容,比如Google Books的网站,它包含了一个图书分类的列表,每个分类中包含一个图书列表。针对这样UI的UI module会出奇的简单:

  ui.Container(uid: "GoogleBooksList", clocator: [tag: "table", id: "hp_table"]) {

  List(uid: "subcategory", clocator: [tag: "td", class: "sidebar"], separator:

  "div") {

  Container(uid: "{all}") {

  TextBox(uid: "title", clocator: [tag: "div", class: "sub_cat_title"])

  List(uid: "links", separator: "p") {

  UrlLink(uid: "{all}", clocator: [:])

  }

  }

  }}

  Tellurium UID描述语言为定义动态Web内容提供了更多的灵活性。我们来看个复杂点的例子。

延伸阅读

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

32/3<123>

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

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