初识Cucumber
“摆脱传统的手工测试,具备写代码的能力,至少精通一种脚本语言和自动化测试框架”。这是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
Cucumber用以下关键字来设计测试用例:
Feature (功能)
Scenario(情景)
Given(给定)
When(当)
Then(则)
怎么来理解Cucumber编写的测试用例呢?我们可以将其与传统的自动化测试工具进行类比:
Cucumber的工作原理:
Cucumber是一个命令行工具,运行后,会执行features中的内容,每个feature中包含多个Scenario, Scenario中的step会调用step definitions中的编写的测试代码。
Features:
Features文件必须以.features命名。
语法规则:基于Gherkin。
包含title,多个scenarios,每个scenario包含多个step。
Step定义必须以关键字Given,When,Then,And开始。
Step_definitions:
根据feature文件中定义的step编写对应的测试代码。
step definitions用ruby语言编写,必须以.rb命名
Cucumber command:
运行:*.feature文件。cucumber会分析feature文件中定义的step,然后去step definitions寻找相匹配的step,执行step中的代码。
运行结果以html的形式保存,fail的情况查看对应log日志
命令行:$ 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测试用例,并成功通过的画面。
下图是一个执行Cucumber测试用例,但执行失败的画面。