
昨晚写完这篇文章已经9点多了,下楼去觅食,天空忽然洋洋洒洒飘起了大片大片的雪花,像个调皮的姑娘,被风裹着扭来扭去,我也满心欢喜。早晨一屁股从床上爬起来,掀开窗,原以为会是一片白雪皑皑。可惜,干净的像什么都没发生过一样。美好总是短暂的!还是继续我们的正题。
Cucumber是一个自动化测试工具,那它使用的程序语言是什么呢?
Cucumber是一个命令行工具,也是一个解释程序,就像ruby命令执行解释.rb文件里的ruby代码一样,Cucumber用来执行解释.feature文件中的Gherkin代码。因此,要学好Cucumber,就要学好Gherkin语法。
Gherkin文件使用’.feature’作为扩展名,用自然语言描述。Gherkin包含以下关键字:
|
Background Scenario Given When Then And But * Scenario Outline Examples |
- Gherkin可以支持多种自然语言,这里我们使用英语。如果选择其他语言,只需要在执行cucumber命令时携带language code参数,例如日语:
$ cucumber —il8n ja。
- 同一个.feature文件里必须使用同一种语言。
(1).关键字 – Feature
每一个.feature文件必须以关键字Feature开始,Feature关键字之后可以添加该feature的描述(这部分是可选的)。下面是feature描述的优秀模板。
Feature: feature description In order to
As a
I want
但是Cucumber并不关心这些具体的描述,其作用类似于注释,仅仅为了便于沟通交流(描述内容中不可以包含Gherkin关键字)。
- 关键字后面的描述属于Gherkin语法的一部分,不会被cucumber解释并执行,但是会作为一种文件形式呈献给利益相关者。
- 注释一般是面向程序员或者测试人员自己的,有助于理解代码。
(2).关键字 – Scenario
一个feature可以包含多个Scenario,每一个Scenario都是一个独立可执行的Test case。换言之,每个Scenario就是该feature的一个测试场景。
Scenario关键字之后可以加上对该Scenario的简单描述(描述内容中不可以包含Gherkin关键字)。
Scenario: Add two numbers
(3).关键字 – Given、When、Then、And和But
在Gherkin语法里,Given、When、Then、And和But用来指示一个Scenario中的step:
– Given:指测试所需要的前提条件
– When:触发被测试件的执行步骤
– Then:执行步骤所期待的结果
– And / But:用来连接Given的多个条件,When的多个步骤,或者Then的多个期待结果
以上期的加法计算器为例:
Scenario: Add two numbers Given the input "2+2" When the calculator is run Then the output should be “4"
(4). 关键字 – Background
Background就是将.feature文件中多个scenario的公共step单独列出来。这样,一旦有改动,只需要在Background中进行修改,不用逐一修改每个scenario。
Background必须置于所有scenario之前。在运行时,Background中的步骤会和之前一样在每个scenario起始处被执行。
Background关键字并不是必选项,它的存在是为了增加scenario的可读性。下面两幅图分别为采用background前后的例子,大家可以体会一下:


(5). 关键字 – Scenario Outline 和 Examples
有时候,多个Scenario具有相同的执行步骤和期待结果,只是测试数据不相同,多次重复会显得乏味且缺乏重点。这时候就可以用Scenario Outline和Examples来存储这些数据。
下图是使用Scenario Outline前后的例子:

两个Scenario具有相同的步骤和结果,是不是乍一眼让人看得云里雾里?如果改成下面的形式呢?

Scenario Outline和Examples是一个组合,不能单独使用。Scenario Outline中用”
那么问题来了,为什么第一幅图有2个Scenario,而第二幅图只有1个Scenario呢?
(6). 关键字 – *
一些人觉得Given、When、Then、And和But关键字很啰嗦,所以喜欢用星号*来代替这些关键字。其实我个人是不建议的。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220981.html原文链接:https://javaforall.net
