写点什么

开源自动测试框架 Tellurium

  • 2009-06-11
  • 本文字数:4086 字

    阅读完需:约 13 分钟

Tellurium 自动测试框架是一款针对 web 应用、基于 UI 模块的自动测试平台。UI 模块是由一组复合的 UI 对象以嵌套的形式组成,比如,Google 的搜索 UI 模块可以表示成:

复制代码
ui.Container(uid: "GoogleSearchModule", clocator: [tag: "td"], group: "true"){
InputBox(uid: "Input", clocator: [title: "Google Search"])
SubmitButton(uid: "Search", clocator: [name: "btnG", value: "Google Search"])
SubmitButton(uid: "ImFeelingLucky", clocator: [value: "I'm Feeling Lucky"])
}

Tellurium 框架还定义了一套全新的领域特定语言来进行 web 测试,比如对于 Google 搜索模块,你可以使用下面的 DSL 来完成一次搜索测试:

复制代码
type "GoogleSearchModule.Input", "Tellurium test"
click "GoogleSearchModule.Search"
waitForPageToLoad 30000

目前 Tellurium 已经发布 0.6.0 版本,InfoQ 中文站就 Tellurium 的方方面面,特地邮件采访了 Tellurium 的创始人方剑先生:

1、请介绍一下您自己,以及所从事的工作?

我的名字是方剑,曾经在上海读书和工作多年。2000 年在美国佐治亚理工(Georgia Institute of Technology)求学。毕业后在一家美国公司做软件开发工作,从事企业级应用(Enterprise Applications)开发,主要负责服务器端框架的设计和开发,商业应用服务(Business Services)的开发, 和一些软件规范的制定。此外,我还有很强的人工智能和计算机网络方面的研究背景。

2、您开始做 Tellurium 这样一个自动化测试框架,是基于怎样的考虑呢?我看到有特色的两点是使用 UI module-based 这样的描述块来定义待测的 UI,以及使用 DSL 来表述测试代码,还有哪些与以往框架不同的设计思想,缘起是什么呢?

在 2007 年,我们公司开始注意到 Selenium 测试框架。由于我们用敏捷开发方法(Agile development),在 Scrum 队伍中,每个人的角色开始变得多样性了。我有个工作(Task)就是用 Selenium 去测试我们的一个应用程序(是用 Dojo Javascript 框架写的)。应该说在当时,Selenium 是一个开创性的框架,如果用他们的复制和重播模式(record and replay)很容易产生测试脚本。但一旦我开始用 Selenium,我发现它还是有一些缺点和不便之处。主要测试脚本是对代码的更新很脆弱(Fragile)。 但是在一个敏捷开发的环境下,一般都有阶段性的用户接受测试(User Acceptance Test),由于程序一直更新,Selenium 测试脚本的维护就变成一个很头痛的问题。而且,对于很多企业级应用,复制和重播模式本身就不太适用,比喻我们有很多数据格(Data Grid),它的内容本身就是动态的。其他的问题包括 Selenium 测试脚本不是结构化的,你可以看到处有 XPath,这更增加了维护的困难。因此,我们决定开发一个在 Selenium 之上的框架来解决这些问题。我做的第一个版本是通过 Spring 框架和物体工厂(Object Factory)来产生 UI 元素(Element),使得框架能把 UI 元素的表达和测试代码分开,自动处理 Javascript 事件,并在一定程度上能处理动态网页内容。 由于这个框架用 XML 来配置 UI 元素,使用起来并不是很方便。在 2008 年,我用 Groovy 重写了整个框架并变成一个开源项目(open source project)。新的版本主要有三个大的改变。首先是采用 UI Module(UI 模块)描述块来定义待测的 UI。这样做的好处是系统自动生成运行时的 Locator,即使你改变了其中的一些元素,框架本身会生产新的 Locator 来适应这种改变。而且框架侧重一个集合的元素,而不是单个元素,这样使得我们可以利用元素之间的关系来帮助我们定位他们在 DOM 中的位置。此外,这样也增加了重用性,比如,我们可以定义一些 Tellurium Widget,在你的测试代码中可以直接定义这个 Widget,而不需要重新定义一个个的单个元素。第二个大的变化是用 DSL 来写测试代码。这样增加了表达性使得用户很容易写和维护测试代码。Tellurium 测试代码可以用 Java, Groovy, 或纯 DSL 脚本来写。Tellurium 本身也支持 JUnit 和 TestNG 测试框架。另一个大的变化是开始用 UI 模板(UI templates)来表述动态网页内容,例如数据格(Data Grid)。这样使得 Ajax 应用程序的测试变得可行和容易。

3、 Tellurium 主要有那些子项目构成?

Tellurium 主要是由 Tellurium Core, Tellurium Engine, Tellurium Widget Extensions, 和 Tellurium UI Module Plugin(TrUMP)子项目构成。Tellurium Core 主要是处理 DSL 和动态生成 Locator. Tellurium Engine 是测试驱动模块,目前还是利用 Selenium Core. Tellurium Widget Extensions 包括一些 DOJO 和 ExtJS Javascript 框架的可重用 Widget 模块。这些 Widget 被编译成一个 jar 文件方便用户调用。TrUMP 是一个 Firefox plugin 来自动生成 UI Module。 另外,Tellurium 还提供两个参考子项目(Reference Projects),分别为 JUnit 和 TestNG 项目,来给用户示范如何创建 Tellurium 测试项目和如何使用 Tellurium 的各种功能。

除此之外,Tellurium 还提供了 Tellurium Maven Archetypes,使得用户可以用一个 Maven 命令就可以创建自己的 Tellurium 测试项目。

4、介绍一下 Tellurium 的代码贡献者们吧?

我主要是负责 Tellurium 的整体设计和很大一部分的代码编程。除我之外,现在还有四个来自美国和英国的队友(team members)。Vivek Mongolu 主要负责 TrUMP 的 UI 设计和实现。Matt Senter 主要负责 Maven 支持,包括代码的编译,发布,和 Maven Repository 的维护。Haroon Rasheed 参加了 Tellurium 参考项目(Tellurium Reference Projects)的开发,Selenium Grid 的支持和其他的维护工作。Mikhail Koryak 参于了 TrUMP 的开发工作,他是 jQuery 方面的专家,负责 Tellurium 的 jQuery 支持。现在参与 Tellurium Engine 的开发。

5、你了解在自动化测试工具这个领域,有着哪些和 Tellurium 类似的竞争对手吗?比如 ThoughtWorks 的 Twist?与它们相比,Tellurium 的优势在什么地方?有什么劣势吗?

Tellurium 脱胎于 Selenium, 它的主要竞争对手还是 Selenium, 毕竟 Selenium 已经推广好几年了。要用户用一个新的框架是要花一定的时间的。此外 Canoo WebTest 也是一个比较流行的网页测试框架(Framework)。但是 Tellurium 还是有它本身的优势的,如 UI Module 的概念,鲁棒性好,可重用性好,表达性好(Expressiveness)。用 Tellurium 写的测试代码的结构性好,比较容易维护。 毕竟 Tellurium 还是一个新的框架,到现在只有一年多的开发时间。有些特色还有待成熟。此外,Tellurium 要用到 Groovy 动态语言,尽管用户并不一定需要了解 Groovy 才可用 Tellurium,但由于 Groovy 相对比较新,所以不少人还是有疑豫的。

ThoughtWorks 的 Twist 基本上是 Selenium + GSpec, 就是在 Selenium 之上增加了行为测试(Behavior Driven Test)的 DSL。其实我很早就考虑到对行为测试的支持,但精力有限,Tellurium 目前还没有这方面的实现。将来会增加的,可以和 EasyB 框架结合来支持行为测试,或直接实现对行为测试的支持。

6、现在 Tellurium 的应用情况是怎样的?来自使用者的反响如何?

现在已经有不少 Tellurium 用户,主要来自美国,印度和欧洲。由于 Tellurium 本身的特色,如易用,可维护性好,新的功能如对 jQuery Selector 的支持,使用者的反应还不错。甚至有的用户在自己的公司里给同事作 Tellurium 的培训。当然,Tellurium 还很年青,而且前一段时间由于全球性经济危机的影响,我们对 Tellurium 的推广还做得很不够。以后会加大对 Tellurium 的推广。

7、Tellurium 在社区采用了哪些方式和开发者们进行交互呢?

我们有自己的用户组 Tellurium user group, 用户提出问题往往能很快地得到解答。我们也有 LinkedIn 用户组让用户之间能更好地交流。此外我们还鼓励用户参加 Tellurium 的设计讨论和推广。我们会每年从用户中推选出一个最活跃用户(most active user)和一个最有价值用户(most valuable user)。Tellurium 将来会设推广队(Evangelism Team),如果某人对 Tellurium 做了很多推广工作,他/她也可以成为 Tellurium 正式成员(team member)。

8、Tellurium 未来的发展有怎样的规划吗?有计划推出中文的社区及文档吗?

尽管 Tellurium 和 Selenium 在概念上有很大的不同,一直到 Tellurium 0.6.0, 我们还是依赖 Selenium Core 作为底层的测试驱动 Engine. Tellurium 0.7.0 将成为 Tellurium 发展史上的一个重要里程碑,我们将开发自己的测试驱动 Engine 使得 Tellurium 能更好,更有效地支持 UI Module,同时可以进行 UI Module 的缓存(Caching)以增加其可用性和提高测试速度。并可对 UI Module 进行部分匹配以增加其鲁棒性。在新的 Tellurium Engine 的支持下,Tellurium widget 将变得更容易,更实用,和更有效。其他的发展规划包括 TrUMP 的改进,行为测试(Behavior Driven Test)的支持,功能测试(functional test)的增强支持, 和 IDE 的支持。 毕竟我来自中国,当然希望得到更多的来自自己国家的用户的参与和支持。现在我们已经开通中文社区和文档项目,会有相关的中文文档逐渐添加进来,我们也热烈欢迎更多国内的开发者能加入进来,帮助支持和推广 Tellurium,谢谢。

9、能给国内的用户一个快速的开始吗?怎么立刻感受到 Tellurium 带来的好处?

我们提供了一份中文版的Tellurium QuickStart ,还有一个短小的演示:十分钟感受Tellurium (10 minutes to Tellurium)。它包括利用Tellurium Maven archetype 去建立一个新的Tellurium 测试项目,再用 Tellurium Firefox plugin TrUMP 去自动生成一个UI Module,然后再写自己的Tellurium 测试代码。 如果用户不熟悉Maven, 他可以下载 Tellurium 参考项目(Tellurium Reference Project)。这个项目是我们用来测试 Tellurium 项目网页的。包括了各种例子,可以直接运行。

更多有关 Tellurium 的信息,请参考 DZone 上的相关资料和Tellurium 的 Wiki 。敬请期待 Tellurium 在 InfoQ 中文站的更多技术文章。


给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。

2009-06-11 20:519970
用户头像

发布了 127 篇内容, 共 43.6 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

阿里云发布「云盒+无影」云端机顶盒解决方案,打造云边端一体化的机顶盒新模式

云布道师

无影 云盒

精准测试之分布式调用链底层逻辑

京东科技开发者

分布式 精准测试 调用链 Spark 源码 企业号 3 月 PK 榜

OMG!Go语言设计模式,这样用简直不要太爽!

博文视点Broadview

复杂度分析:如何分析、统计算法的执行效率和资源消耗

京东科技开发者

数据结构和算法 算法和数据结构 复杂度分析 空间复杂度 企业号 3 月 PK 榜

无处不在的边缘网络感知

阿里云CloudImagine

云计算 边缘云 边缘网络

程序员标配Springboot!终于有人把SpringBoot讲的通俗易懂了

三十而立

PyTorch 深度学习实战 |用TensorFlow训练神经网络

TiAmo

神经网络 tensorflow MNIST

一种异步延迟队列的实现方式

京东科技开发者

架构 软件架构 企业号 3 月 PK 榜 延迟处理

电脑风扇控制软件:Macs Fan Control Pro中文激活版

真大的脸盆

Mac Mac 软件 电脑风扇控制 风扇转速控制

[译]探索 Go 中 io/fs 包以提高测试性能和可测试性

蓬蒿

golang 测试 io/fs

如此丝滑的按钮交互效果

南城FE

css3 前端 设计 动画 交互

技术领导力之路 - 安全感

阿里技术

技术成长

聊聊To B企业的客户成功价值

老张

交付 客户成功

SpringCloud 整合Gateway服务网关

Java你猿哥

spring Spring Cloud Spring Boot ssm

深扒RocketMQ源码之后,我找出了RocketMQ消息重复消费的7种原因

程序员小毕

程序员 RocketMQ 后端 架构师 消息中间件

一个基于序列的弱监督视觉信息抽取学习框架

合合技术团队

人工智能 计算机视觉 OCR

浪潮 KaiwuDB x 河工大 | 推进能源行业数字化转型建设

KaiwuDB

解决方案 数字能源 KaiwuDB

朴素系统优化思维的实践

京东科技开发者

方案 构架 系统优化

SpringBoot快速搭建、自动流程进阶、装配机制、功能扩展点详解

三十而立

Java 程序员 IT

CosineWarmup理论与代码实战

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 3 月 PK 榜

如何防止订单重复支付?

采菊东篱下

Java 编程

阿里菜鸟国际Java研发面经(三面+总结):JVM+架构+MySQL+Redis等

三十而立

面试 java

Spring Boot 如何防护 XSS + SQL 注入攻击 ?终于懂了!

Java你猿哥

sql Spring Boot 后端 ssm XSS

喜马拉雅基于阿里云机器学习平台PAI-HybridBackend的深度学习模型训练优化实践

阿里云大数据AI技术

人工智能 深度学习 开源 gpu 企业号 3 月 PK 榜

Go 第三方 log 库之 logrus 使用

江湖十年

后端 日志 Go 语言

面试滴滴、中信字节跳动等10+公司面经+面试题及答案分享(java岗)

三十而立

真香!阿里最新出品Java面试核心讲(终极版),Github已星标50K

Java你猿哥

Java 后端 ssm 面经 八股文

扩散模型大杀器 ControlNet 解析

Openlab_cosmoplat

人工智能 开源社区 图像

KaiwuDB 荣获第三届 ISIG 产业智能大会年度最佳技术创新奖

KaiwuDB

技术创新 KaiwuDB AIoT数据库

硬核!阿里出品2023版Java架构师面试指南,涵盖Java所有核心技能

Java你猿哥

Java 架构 后端 面经

为什么项目老夭折?这份项目管理指南请收好

得物技术

开源自动测试框架Tellurium_研发效能_张凯峰_InfoQ精选文章