“摆脱传统的手工测试,具备写代码的能力,至少精通一种脚本语言和自动化测试框架”。这是TW每一位优秀QA的必备素质,也是我对自己的基本要求。

初来TW时,接触到由Cucumber+Appium+Ruby构建的安卓自动化测试框架,初次涉及安卓测试,其中的每一部分都对我来说都是新鲜且充满诱惑的。希望能通过一段时间的学习、分享和实践,对安卓自动化测试有深入的了解。今天先来分享一下Cucumber(Cucumber支持多种语言,这里主要介绍与Ruby语言的集成)。


Cucumber简介:

(1). Cucumber是一种开源的BDD自动化测试工具,能够理解用普通语言描述的测试用例。Cucumber诞生于Ruby社区,但它几乎能够适用于所有系统,支持Ruby、Java、Python等40多种开发语言。

(2). Cucumber用自然语言来描述客户想要的系统行为,如:Feature(特性)和Scenario(场景)。

(3). Cucumber用作软件技术人员和非技术之间验收测试的桥梁。

(4). Cucumber是一个命令行工具。

(5). Cucumber用标签来组织场景。

(6). Cucumber自带强大的HTML自动化测试报告。

Cucumber的组成结构:

Cucumber作为一种自动化测试工具,由三大部分组成:  

Features、Step_definitions、Cucumber command

java编写测试自动化脚本 cucumber java 自动化测试_自动化测试

Cucumber用以下关键字来设计测试用例:

  • Feature (功能)
  • Scenario(情景)
  • Given(给定)
  • When(当)
  • Then(则)

怎么来理解Cucumber编写的测试用例呢?我们可以将其与传统的自动化测试工具进行类比:

java编写测试自动化脚本 cucumber java 自动化测试_Ruby_02

Cucumber的工作原理:

Cucumber是一个命令行工具,运行后,会执行features中的内容,每个feature中包含多个Scenario, Scenario中的step会调用step definitions中的编写的测试代码。

java编写测试自动化脚本 cucumber java 自动化测试_Ruby_03

Features

  1. Features文件必须以.features命名。
  2. 语法规则:基于Gherkin。
  3. 包含title,多个scenarios,每个scenario包含多个step。
  4. Step定义必须以关键字Given,When,Then,And开始。

Step_definitions: 

  1. 根据feature文件中定义的step编写对应的测试代码。
  2. step definitions用ruby语言编写,必须以.rb命名

Cucumber command: 

  1. 运行:*.feature文件。cucumber会分析feature文件中定义的step,然后去step definitions寻找相匹配的step,执行step中的代码。
  2. 运行结果以html的形式保存,fail的情况查看对应log日志
  3. 命令行:$ cucumber

Cucumber的开发过程

第一步:创建feature文件,包括feature,scenarios和step。

第二步:创建step_definitions,即ruby代码的实现。如果只有step,没有step definitions,会报undefined错。

第三步:cucumber --format progress。格式化输出。可修改为html,xml等格式输出。

* 添加断言: 

一个场景失败,Cucumber将此场景标记失败,转去执行下一场景。

一个step失败,会跳过这个scenario的其余step,从而终止这个scenario。

执行Cucumber用例:

在一个包含features文件夹的目录里,编译feature文件:$ cucumber test.feature --dry-run

 * 日志说明:黄色-未定义step,绿色-通过,红色-报错。

下图是一个执行Cucumber测试用例,并成功通过的画面。

java编写测试自动化脚本 cucumber java 自动化测试_自动化测试_04

下图是一个执行Cucumber测试用例,但执行失败的画面。

java编写测试自动化脚本 cucumber java 自动化测试_自动化测试_05