新一代BDD框架Gauge+Taiko

BDD是什么BDD,Behavior Driven Development,行为驱动开发 。
如果你不是很了解BDD,可以参考我四年前的一篇文章说起BDD,你会想到什么,其中介绍过BDD的理论和应用 。
我们可以这样来概括BDD:

  • BDD采用统一的领域特定语言(DSL)来描述业务场景和用户行为,让团队各个不同角色对业务需求有一致认识,从而做到更有效的沟通和更高效的协作;
  • BDD的目的不是自动化测试,但是BDD可以有效指导自动化测试,基于BDD的自动化测试相当于维护了一份需求活文档,对项目需求的维护和管理非常有价值 。
BDD应用框架之CucumberBDD的应用BDD是为解决下面三个方面的问题而生:
  1. 协作:多个角色在一个团队,如何从一致理解需求开始高效协作?
  2. 语言:不同的角色业务、开发和测试人员分别说自己的语言,如何统一语言,更有效的沟通?
  3. 文档:编写和维护的成本都很高,如何低成本的维护一份有价值的文档?
Cucumber是一款支持BDD的框架,有助于帮助团队解决以上问题 。
Cucumber支持用自然语言描述业务场景,需要遵循Given-When-Then的格式,这样就可以容易的对应到自动化测试的3A步骤Arrange-Act-Assert,从而实现业务场景的自动化测试 。
Cucumber的理想是将可执行的需求规范、自动化测试和活文档有机的结合,如下图所示:
新一代BDD框架Gauge+Taiko

文章插图
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 SearchScenario: Finding some cheeseGiven I am on the Google search pageWhen I search for "Cheese!"Then the page title should start with "cheese"【新一代BDD框架Gauge+Taiko】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的自动化测试燃起了希望 。
GaugeGauge是一款开源的轻量级跨平台自动化测试工具,它的愿景是用更少的代码、更少的维护工作实现更多的自动化测试,有如下特性:
  • 采用Markdown格式,支持用自然语言编写Spec,语法自由,编写工作简单易上手,不管是对业务人员还是技术人员都很友好;写出来的文档格式清晰,很好维护 。
  • Gauge本身可以实现对Web页面的访问和控制,支持多种语言,各种API封装的很好,代码实现部分比Selenium要简单很多,尤其对于编程技能不是那么强的QA来讲非常友好,易上手,代码的可读性也更强一些 。
TaikoTaiko也是一款开源浏览器自动化测试工具,它的特性如下:
新一代BDD框架Gauge+Taiko

文章插图
Taiko的特性