一. step、scenario、spec、suite
开始看gauge可能有点困惑,因为官网给的例子example.spec如下,看的是一脸懵逼
# Specification Heading This is an executable specification file. This file follows markdown syntax. Every heading in this file denotes a scenario. Every bulleted point denotes a step. To execute this specification, run gauge run specs * Vowels in English language are "aeiou". ## Vowel counts in single word tags: single word * The word "gauge" has "3" vowels. ## Vowel counts in multiple word This is the second scenario in this specification Here's a step that takes a table * Almost all words have vowels |Word |Vowel Count| |------|-----------| |Gauge |3 | |Mingle|2 | |Snap |1 | |GoCD |1 | |Rhythm|0 |
可以看到,上述markdown描述文件中都有哪些关键词:specifition、scenario、step、tag等等,用类比的方法比较好理解一点:
- step: 一个场景中的每一步,比如登录场景,登录是一步,退出是一步。类似于类中的方法
- scenario:场景,比如登录场景。类似于类
- spe:一个场景的集合。类似于python中的模块,即py文件
- suite:测试套件,可以裂解为多个模块的集合,即一个项目
二. 运行方式
我们以官方给出的模板项目为例:
这是一个关于英语中元音的项目,首先看example.spec,在一开始有个Specifition Heading,用的是markdown中的<H1>标签进行描述的
# Specification Heading
当然你也可以用双下划线:
Specification Heading
==============
下面这句话是说,这是一个可执行的spec file(你可以类比成py文件)。这个文件遵循markdown语法。这个文件中每一个##都表示一个场景,每一个*都表示一个step。执行这个spec文件的方法是 gauge run specs(类似于cmd中运行python文件:python py文件)。这里需要注意gauge run specs,它运行的是整个specs目录,当该目录下有多个spec时,每一个spec文件都会得到执行
This is an executable specification file. This file follows markdown syntax. Every heading in this file denotes a scenario. Every bulleted point denotes a step. To execute this specification, run gauge run specs
关于运行方式,官网至少给出了四种运行方法:
- 运行多个specs目录
- 运行一个specs目录下所有的spec文件
- 运行一个specs目录下指定的spec文件
- 运行一个spec文件下指定的scenarios
可以看到,范围是越来越小。我们对这四种方式分别举四个例子:
第一种,运行多个specs目录
gauge run specs-dir1/ specs-dir2/ specs-dir3/
官网还给出一个说明,就是specs的路径可以通过设置环境变量来指定,这样会将默认的值变为自定义的值。默认值在env下面的default.properties中:
第二种,运行一个specs目录下所有的spec文件
gauge run specs
第三种,运行一个specs目录下指定的spec文件
gauge run specs/spec1.spec
如果要运行多个指定的spec文件,还可以这样:
gauge run specs/spec1.spec specs/spec2.spec specs/spec3.spec
第四种:运行一个spec文件下指定的scenarios
这里看官网可能有点懵,因为官网说了,你可以根据spec文件下的scenario中的行号,来指定单个的scenario,并且还给出了一个login_test.spec的例子,意思是在下面的spec文件中,使用 gauge run specs/login_test.spec:4 命令,可以执行一个Admin Login场景
但是我们看关于场景的定义:一个场景首先要有一个Heading,然后至少包含一个或多个step。当时就有点疑惑了,明明使用的是行号,行号对应的是step,为什么不说运行特定的step,而要说运行特定的场景呢?
但是细细看一下官网文档,会发现关于step的定义,还有很多值得琢磨的地方,step不是孤立的,它依附于一个场景或concepts,事实上,当你观察gauge的测试报告也能发现这一点,gauge基于BDD,它的最小的测试单元是场景,而非step。当多个step都隶属于同一个场景,那么当你从中拿出一个stpe来执行的时候,实际上执行的就是当前的场景。同样gauge run specs/login_test.spec:3或gauge run specs/login_test.spec:5是一样的效果
还可以运行多个不同文件中指定的场景
gauge run specs/helloworld.spec:3 specs/anotherhelloworld.spec:5
执行同一个spec文件中的不同场景
gauge run specs/spec1.spec:3 specs/spec1.spec:7
参考文章
https://docs.gauge.org/latest/execution.html
https://blog.csdn.net/amoscn/article/details/80472143