新一代BDD框架Gauge+Taiko

新一代BDD框架Gauge+TaikoBDD 是什么 BDD BehaviorDriv 行为驱动开发 如果你不是很了解 BDD 可以参考我四年前的一篇文章说起 BDD 你会想到什么 其中介绍过 BDD 的理论和应用 我们可以这样来概括 BDD BDD 采用统一的领域特定语言 DSL 来描述业务场景和用户行为 让团队各个不同角色对业务需求有一致认识 从而做到更有效的沟通和更高效的协作 BDD 的目的不是自动化测试 但是 BDD 可以有效指导自动化测试 基于 BDD 的自动化测试相当于维护了一份需求活文档 对项目需求的维护和管理非常

BDD是什么

BDD,Behavior Driven Development,行为驱动开发。

如果你不是很了解BDD,可以参考我四年前的一篇文章说起BDD,你会想到什么,其中介绍过BDD的理论和应用。

我们可以这样来概括BDD:

  • BDD采用统一的领域特定语言(DSL)来描述业务场景和用户行为,让团队各个不同角色对业务需求有一致认识,从而做到更有效的沟通和更高效的协作
  • BDD的目的不是自动化测试,但是BDD可以有效指导自动化测试,基于BDD的自动化测试相当于维护了一份需求活文档,对项目需求的维护和管理非常有价值。

BDD应用框架之Cucumber

BDD的应用

BDD是为解决下面三个方面的问题而生:

  1. 协作:多个角色在一个团队,如何从一致理解需求开始高效协作?
  2. 语言:不同的角色业务、开发和测试人员分别说自己的语言,如何统一语言,更有效的沟通?
  3. 文档:编写和维护的成本都很高,如何低成本的维护一份有价值的文档?

Cucumber是一款支持BDD的框架,有助于帮助团队解决以上问题。

Cucumber支持用自然语言描述业务场景,需要遵循Given-When-Then的格式,这样就可以容易的对应到自动化测试的3A步骤Arrange-Act-Assert,从而实现业务场景的自动化测试。

Cucumber的理想是将可执行的需求规范、自动化测试和活文档有机的结合,如下图所示:

Cucumber的理想

理想很丰满,现实很骨感。Cucumber在实际应用中的情况又如何呢?

Cucumber的痛点

Cucumber框架实现Web自动化测试包括两个部分:Feature(特性)文件和Step Definition(测试实现),在实际应用中人们普遍感觉到它的复杂。

  • Cucumber特别强调的是协作,Feature文件通常由偏业务的人员来编写,要求遵循Given-When-Then的格式。这种固定的语法对编写人员要求较高,写起来比较费劲,尤其对新人不友好,很多团队反映要写出好的Feature文件特别费时费力。
  • Cucumber支持多种语言实现测试代码,但它本身并不能实现自动化,对于Web自动化测试需要跟其他自动化工具结合,比如Selenium-WebDriver。实现代码不仅复杂,还有着元素定位难、执行时间长、不够稳定的痛点。

Cucumber-js+Selenium WebDriver实现的代码长这样:

Feature定义:

Feature: Google Search Scenario: Finding some cheese Given I am on the Google search page When I search for "Cheese!" Then the page title should start with "cheese" 

Steps实现

Given('I am on the Google search page', async function () { await driver.get('http://www.google.com'); }); When('I search for {string}', async function (searchTerm) { const element = await driver.findElement(By.name('q')); element.sendKeys(searchTerm, Key.RETURN); element.submit(); }); Then('the page title should start with {string}', {timeout: 60 * 1000}, async function (searchTerm) { const title = await driver.getTitle(); const isTitleStartWithCheese = title.toLowerCase().lastIndexOf(`${searchTerm}`, 0) === 0; expect(isTitleStartWithCheese).to.equal(true); }); 

新一代BDD框架

蓝鲸项目曾经就是用Cucumber+Selenium WebDriver实现的UI层自动化测试,由于上述痛点,大家觉得UI自动化测试越来越难写,我也因此对BDD丧失了信心。

自从遇到了两款新的工具Gauge+Taiko,我又重新对Web系统的实现基于BDD的自动化测试燃起了希望。

Gauge

Gauge是一款开源的轻量级跨平台自动化测试工具,它的愿景是用更少的代码、更少的维护工作实现更多的自动化测试,有如下特性:

  • 采用Markdown格式,支持用自然语言编写Spec,语法自由,编写工作简单易上手,不管是对业务人员还是技术人员都很友好;写出来的文档格式清晰,很好维护。
  • Gauge本身可以实现对Web页面的访问和控制,支持多种语言,各种API封装的很好,代码实现部分比Selenium要简单很多,尤其对于编程技能不是那么强的QA来讲非常友好,易上手,代码的可读性也更强一些。

Taiko

Taiko也是一款开源浏览器自动化测试工具,它的特性如下:

Taiko的特性

  • 交互式的录制体验。Taiko提供类似于irb的REPL,直接输入命令,可以看到浏览器执行结果,同时后续还可以把成功执行的命令直接生成JS代码,非常方便。
  • Taiko不仅提供常见UI自动化测试工具那样根据Id、name、CSS、Xpath等方式选择页面元素的功能,还提供智能选择器(Smart selector),支持直接根据显示的文本来定位各种类型的页面元素,同时还有支持上、下、左、右这种根据某个元素的相对方位去定位元素的API,很好的解决UI测试页面元素定位难的问题。
  • Taiko采用隐式的等待(Wait)方式,也可以手动设置超时时间以防有些访问等待时间过长。这种隐式等待相比其他自动化工具需要手动设置等待时间的显式等待方式要更高效、更稳定。
  • 与Gauge的完美结合:Taiko在REPL里执行的浏览器操作步骤,可以通过一个简单的命令直接生产Gauge支持的Step,只需要再去简单的加上step名称就可以,操作及其简单。

Gauge+Taiko的代码长这样:

Spec定义

# Google Search This is an executable specification file. This file follows markdown syntax. Every heading in this file denotes a scenario. Every bullet point denotes a step. To execute this specification, use npm test Finding some cheese * Goto Google search page * Google for "Cheese!" * Page title starts with "Cheese" 

Steps实现

step("Goto Google search page", async function() { await goto("www.google.com"); }); step("Google for 
  
    ", async (query) => { await write(query); await click("Google 搜尋"); }); step("Page title starts with 
   
     ", async (content) => { await title().then((pageTitle) =>{ assert.ok(pageTitle.startsWith(content)); }); }); 
    
  

总结

协作是人的问题,工具可以起到辅助作用,但是不能解决根本问题,过于严格的工具缺乏灵活性,反而阻碍了高效协作的可能。

Gauge不强调协作,可以作为自动化测试工具独立存在,同时又支持高效协作、支持实现BDD,是一款灵活性更好的框架。它的秘密武器Taiko是一款优秀的Web UI自动化工具,两者的结合堪称完美,让需求规范、自动化测试和活文档的有机结合真正成为可能。

本文只是将Gauge和Taiko跟Cucumber框架从对BDD的角度做简单的对比,更多的关于Gauge和Taiko的高级特性,请参考【延伸阅读】部分相关文章。

延伸阅读

  • 说起BDD,你会想到什么:https://www.bylinzi.com/2015/06/04/when-we-talk-about-bdd/
  • Gauge:https://gauge.org/
  • Taiko:https://taiko.gauge.org/
  • Why I chose Gauge over Cucumber:https://medium.com/@divi6.1990/why-i-chose-gauge-over-cucumber-5b3de478d889
  • TEST AUTOMATION WITH GAUGE:http://www.santiagomontesinos.com/test-automation-with-gauge/

文/ThoughtWorks 林冰玉

更多精彩洞见,请关注微信公众号:ThoughtWorks洞见

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220632.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午8:00
下一篇 2026年3月17日 下午8:01


相关推荐

  • JVM内存逃逸[通俗易懂]

    JVM内存逃逸[通俗易懂]JVM内存逃逸第一次听到JVM内存逃逸的名词时还是很懵逼的,于是赶紧各种查资料,终于搞懂了这个地方。JVM的内存分配主要在是运行时数据区(RuntimeDataAreas),而运行时数据区又分为了:方法区,堆区,PC寄存器,Java虚拟机栈(就是栈区,官方文档还是叫Java虚拟机栈),本地方法区,而内存逃逸主要是对象的动态作用域的改变而引起的,故而内存逃逸的分析就是分析对象的动态作…

    2022年5月30日
    31
  • icinga 被动模式 nsca 安装

    icinga 被动模式 nsca 安装

    2021年8月28日
    70
  • triggerEvent_研究儿童通用的方法

    triggerEvent_研究儿童通用的方法假设有一个id为testA的a元素,然后有以下代码(jquery已存在):$(document).ready(function(){ $(‘#testA’).on(‘testEvent’,function(e,data1,data2,data3){ console.log(e,data1,data2,data3); }); varba=documen…

    2025年5月26日
    10
  • 一张色环图教你搞定配色_24色环颜色调配图

    一张色环图教你搞定配色_24色环颜色调配图一张色环图教你搞定配色!不管是在平面设计或网页制作中,还是在平常生活中的衣服穿搭和室内装潢中,要想打造出非凡的视觉效果,合理的颜色搭配非常重要。下面介绍几种色彩搭配方案供您参考,让你轻易地一靶中的

    2022年8月1日
    9
  • 绕id教程_绕id的苹果手机能使用吗

    绕id教程_绕id的苹果手机能使用吗本人在网上购买二手iphone手机。型号6plus,本身有id,无法激活,听说可以绕id,苦血在网上连找三天三夜,终于找到软件,以及方法,现在给大家介绍一下希望能帮到大家同样有id的机油!第一步下载软件,需要软件苹果绕id工具.rar:https://t00y.com/file/9653514-452382356已经打包免费下载!第二步,找一个不小于2gU盘或者内存卡,利用苹果绕id工具.rar:https://t00y.com/file/9653514-452382…

    2026年2月14日
    8
  • dxva简介

    dxva简介http www nmm hd org doc index php title DXVA E5 92 8Cpsp amp variant zh cnDXVA 和 psp 目录 nbsp 隐藏 1 nbsp 硬件加速介绍篇 1 1 nbsp DXVA 的实现 1 2 nbsp 几种常见的支持 DXVA 的播放器或解码器 1 3 nbsp 支持 DXVA 的视频 2 nbsp 压制篇 x264 版

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号