【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

Twist 2.0 支持行为驱动开发和协同测试

  • 2010-04-26
  • 本文字数:3257 字

    阅读完需:约 11 分钟

ThoughtWorks 工作室最近发布了最新版的敏捷测试自动化工具——Twist,该版本是第二个重大修改版本。Twist 2.0 帮助测试人员、开发人员以及业务分析师进行协同测试。它允许使用行为驱动开发(BDD)以及领域特定语言(DSL)技术实现自动化测试,同时它也支持使用 Groovy 动态语言来编写测试脚本。

Twist 提供了一个用户界面,为手动及自动功能测试创建可复用的自动化测试脚本。它还为分布式项目和团队提供了持续可见的测试活动。最新版的特性包括:

  • 执行混合测试:在相同的测试场景中,同时允许有手动和自动测试步骤,以提高手动测试与自动测试的协作
  • 测试场景重用:提供高层次的测试场景和测试步骤(手动及自动),可以在多个项目中重用和共享
  • 支持 Sahi Web 测试驱动:测试人员可以选择使用 Sahi Selenium 做 Web 测试
  • SWTBOT 支持:允许 Twist 用户测试基于 Java SWT 的应用程序
  • 数据驱动的场景:建立即时的数据驱动测试,提高测试覆盖率

InfoQ 采访了 ThoughtWorks 工作室的 Chad Wathington,获取更多有关他们自动化测试工具最新版本的细节。

InfoQ:发布 Twist 最新版的主要动力是什么?

在 Twist 2.0 中,我们正不断增加必要的功能以帮助团队在大型自动化功能测试上取得成功。我们已经让编写数据驱动的测试变得更加简单。我们增加了 Groovy 的支持,使测试编写工作更快更简单。我们让你可以轻而易举地增加新的测试抽象层。我们让它可以运行同时包含手动步骤和自动步骤的测试,帮助用户进行探索式测试。我们将继续我们的目标,最终给测试人员、企业用户以及开发人员提供合适的工具,支持构建、协作以及维护大型测试套件。

InfoQ:可以进一步解释一下企业用户编写场景以表达需求的情况吗,比如他们要遵循什么样的语法,比如工具如何帮助他们记录需求(通过代码自动完成)等?

我们假设,至少企业用户应该能够轻松地阅读 Twist 场景。对于更高级的用户,他们懂一点逻辑,懂得如何创建测试场景,可以使用编辑器和功能测试的领域特定语言去构造测试。Twist 也支持手动测试,因此技术较弱的用户可以先创建手动测试,而技术用户可以在团队准备就绪时将其转化成自动化测试。 Twist 的场景编辑器实质上是一个富文本编辑器,让企业用户编写测试相关的内容时有很大的灵活性。场景可以执行的部分,就是你可以构建实际领域特定语言的地方,用普通的英语编写(或者任何其它语言),因此几乎不需要学什么特别的语法。我们特意选择了比许多 ATDD 和 BDD 框架更加灵活的方式,没有神奇的词汇或者强制的语句结构。

在应用程序中的任何地方,Ctrl+Space 组合键都提供自动完成 / 上下文帮助,这种方式可以很好地重用你的领域特定语言。最后,任何双引号中的单词都是一个参数,没有特别的变量语法。就是这么简单。

InfoQ:Twist 同其它诸如 JBehave easyb ,或者 Cucumber 等 BDD 框架比起来怎么样?

Twist 有几个关键的不同。与其说它是一个框架,不如说它是一个整合的开发环境(IDE)——开发 Twist 是为了给测试人员、企业人员以及开发人员有关测试的 IDE 支持。Twist 帮助你使用测试套件进行工作,而不只是单独的测试,归根到底,管理套件是环节中最艰难的问题。所以,通过自动完成,我们让你可以很方便地搞清楚你创建的领域特定语言中有什么。我们让它可以非常容易地从测试语义上创建额外的抽象层,而不只是在代码中。我们让它可以很容易地重构你的测试套件,而且我们也提供了混合手动测试和自动测试的能力。大多数 BDD 工具是开发人员的工具,但它们已慢慢走向测试人员。我们构建的工具适合测试人员、开发人员以及企业用户。

InfoQ:与其它像 DBUnit 之类的数据测试框架相比,Twist 2.0 的数据驱动测试场景怎么样?

我们的起点不同。DBUnit 是关于跨测试执行(test runs)去维护数据库完整性(事实上,在 Twist 测试中,你可以使用 DBUnit 作为测试初始化和运行结束的一部分)。我们正努力给大家提供一种方式,通过大型数据集驱动测试场景。比如说我们在 Twist 中写下以下测试: 在登录时合并银行帐号:

  • 用帐户“johndoe”和密码“abc123”登录

在帐户合并页面上:

  • 出现合并提示时,“接受”它
  • 选择用户名“johndoe”作为主帐户
  • 接受许可条款
  • 验证你已经成功合并了你的帐户

编写完这个测试后,你可能想尝试不同的组合,比如说参数是双引号括起来的单词。你可以在这个测试上右单击并自动创建一个数据表,该表会使用指定的数据集运行 n 次。Twist 会帮你管理参数,因此你的测试仍然是可读的——在你的场景中没有变量名——只有一个清晰的表格。我们认为,这就像是把语义和意图散布到类似 FIT 的普通列固件(column fixture)中。

InfoQ:Groovy 脚本功能为开发人员提供了什么样的现代化编程特性?

因为 Groovy 是一门动态语言,它可以大幅度提高简洁性和可读性。Groovy 一流的闭包支持,让一些在 Java 中十分艰巨的任务变得轻而易举。迭代集合是一个最普通的例子。例如 with(),它是 Groovy 对象上的方法,让 Selenium 扁平化的 API 看起来更加清晰。不像在 Java 中的写法: ```

selenium.open(“ http://foo.com ”);
selenium.click(“link=foobar”);
assertTrue (selenium.isTextPresent(“myfoo”));

复制代码
在 Groovy 中,你可以写成:

selenium.with {
open “ http://foo.com
click “link=foobar”
assertTrue isTextPresent(“myfoo”)
}

复制代码
- Groovy 的标准库包超越了 Java 中提供的功能。例如,在许多情况下,使用 groovy.sql 做数据库的工作比 JDBC 简单。它也可以很好地访问任何用 Java 编写的东西。
- 你也可以使用 [元编程(metaprogramming)](http://groovy.codehaus.org/Dynamic+Groovy) 技术。例如,如果你需要即时对 Selenium 类增加新的功能,你可以给它打动态补丁(monkey patch),这比编写一个新的子类去连接 Spring 快得多, 默认情况下,会在 Twist 场景中注入驱动。

InfoQ:您能否详细描述一下该产品公告中的一段声明,并解释一下该工具怎么会对不重写测试脚本有所帮助:“简化维护——改动应用程序无需重写测试脚本”。

Twist 的设计可以很好地抽象测试场景,恰巧既在语义上有意义,也具有说明性,可以帮助你维护测试。因此,假如你把测试编写成像单击按钮、在小窗口中键入文本、勾选这个框,那么测试将很难维护,大家使用 Selenium 之类的标准驱动框架时通常会这样做。但如果你说,把小窗口 x 加入到我的购物车里,我的账单地址是“abc”,接着结帐,你不考虑如何做这些事情,那么你就有了模块化测试套件的组成部分。当那些动作底下的机制改变时,你可以在一个地方修改好。我们减少了 GUI 应用程序测试的许多脆弱性。 另一个关键部分是重构。Twist 支持在你的基于领域特定语言的测试场景和你的代码间做双向重构(Groovy 除外)。因此,本质上讲,你可以相当容易地做跨测试套件的改动。比如说,你想改变你的应用程序只用用户名登录的想法(这始于用户故事 1),转而使用用户名和口令登录。你可以用另一种方式登录,在你的一个场景中同时接受用户名和口令,它会应用到全局,甚至是代码。在代码级别,你可以重构引入参数,接着你的测试场景将同样使用新的参数。或者,比如你想引入 OpenID 。你可以在代码级别重载登录有关的测试代码,然后,你的场景就会接受要么用户名和口令,要么 Open ID。你可以做很大的改动,基本上不需要重写一些测试。

InfoQ:Twist 可以作为单独的产品与其他像 Hudson 之类的持续集成工具或 Subversion 一起工作吗?

是的。Twist 场景是纯文本,因此可以签入到任何源代码控制管理系统。Twist 也可以在任何持续集成环境中运行(随同 Twist 我们一起发布了一个自定义的 Ant 任务),它的报表与 JUnit 兼容,所以你们的标准构建工具以及持续集成工具可以解析它们。

InfoQ:Twist 产品未来在新功能和增强功能方面的路线图是怎么样的?

我们将继续改进场景编辑器,让创建测试以及维护过程更加简单和丰富。我们打算让它可以更容易地做探索式测试。同时我们也将让测试管理变得更加简单,并改进同我们其他的产品 Mingle Cruise 的整合。我们的路线图中有更多的计划,但目前我们就说那么多吧。

查看英文原文 Twist 2.0 Supports Behavior Driven and Collaborative Testing

2010-04-26 08:252066
用户头像

发布了 38 篇内容, 共 81327 次阅读, 收获喜欢 1 次。

关注

评论

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

浪潮云洲×天人集团:打通数据脉络 驱动降本增效

浪潮云

【从零开始学爬虫】采集西瓜直播视频

前嗅大数据

大数据 爬虫 数据采集

加油站三维可视化监控系统,安全管理智慧运营

一只数据鲸鱼

数据可视化 智慧城市 3D可视化 数字孪生 加油站

FIL的最新消息?FIL的价格还能回到150吗?

区块链 分布式存储 IPFS fil挖矿最新消息? fil价格

我看JAVA 之 垃圾回收GC

awen

Java JVM 垃圾回收 GC

网络攻防学习笔记 Day81

穿过生命散发芬芳

网络攻防 7月日更

终于有10年阿里老兵把SpringCloud微服务实战经验全总结出来了

进击的王小二

Java 架构 微服务 Spring Cloud

腾讯云 TRTC 这次玩大了!冲出国门联手日本直播平台.yell Live打造在线直播互动能力

腾讯云音视频

面试阿里太难了!二本毕业、两年crud经验,侥幸通过面试定级P6

Java 程序员 架构 面试

基于Spring Boot+Security+Redis权限管理系统,权限控制采用RBAC

Java架构追梦

Java 源码 架构师 springboot 权限管理系统

Redis 的集群容错与故障转移

U2647

redis redis哨兵模式 集群 redis cluster Leader

已收藏!深入浅出Android性能调优

欢喜学安卓

android 程序员 面试 移动开发

使用Docker运行OnlyOffice的Node.js示例

一个需求

onlyoffice

面向资源的架构(ROA)概述

码语者

SOA ROA

为什么别的程序员能月薪 20k ,而你一个月只能拿 6K 的低保?差别就在这!

白亦杨

Java 编程 程序员 技术宅

年包70W,五轮拿下阿里Offer,全靠阿里内部整理的面试指南(真题分享)

Java 程序员 架构 面试

亿万级信令服务演化

anyRTC开发者

音视频 实时通信 实时消息

倒计时 | 7.24 阿里云 Serverless Developer Meetup 杭州站报名火热进行中!

Serverless Devs

阿里云 Serverless 云原生

全球首个AI组合亮相,有人直呼惊艳,也有人害怕恐惧

程序员生活志

PHA矿机挖矿系统搭建

Geek_23f0c3

区块链 云算力模式系统开发源码 PHA矿机挖矿

简单好用的照片恢复软件推荐

淋雨

EasyRecovery 文件恢复 硬盘数据恢复

为什么别的程序员能月薪 20k ,而你一个月只能拿 6K 的低保?差别就在这!

Java 编程 程序员 技术宅

深入原生冰山安全体系,详解华为云安全服务如何构筑全栈安全

华为云开发者联盟

容器 数据安全 云安全 Web应用防火墙 华为云安全

浅谈:前端路由原理解析及实践

尔达Erda

开源 云原生 大前端 UI 路由器

云小课|ModelArts Pro 视觉套件:零代码构建视觉AI应用

华为云开发者联盟

AI 零代码 ModelArts Pro 行业落地 视觉套件

想象中的论文答辩和真实的论文答辩,我太难了……

程序员生活志

流程审批系统如何通过低代码平台实现?

优秀

低代码 流程审批系统

音视频开发进阶指南,最新大厂Android校招面试经验汇总

欢喜学安卓

android 程序员 面试 移动开发

手把手教你在Modelarts平台上进行视频推理

华为云开发者联盟

视频 modelarts 推理 预处理 视频推理

什么是共识?(理论篇)

趣链科技

955.WLB 不加班公司名单!再新增 5 家公司!

程序员生活志

Twist 2.0支持行为驱动开发和协同测试_研发效能_Srini Penchikala_InfoQ精选文章