Gauge是一流的命令行工具,这意味着你可以完全从命令行进行操作。或者如果你更喜欢使用IDE,那么Gauge也可以与多个IDE进行良好的集成。

命令行接口

Gauge具有良好的命令行支持,安装gauge,列出运行支持的子命令/标志。

$ gague

这个命令行接口是跨平台的。在GNU/Linux和OSX,你可以使用任意终端,在windows上你可以使用cmd或者Powershell。

help

由于子命令或者标识是通过版本被添加或者被弃用,所以建议通过gauge它本身来获取参考。

$ gauge help

创建项目

创建或者初始化项目通过执行:

$ gauge init

更多细节,请看如何 创建gauge项目

执行测试

在Gauge项目内,你可以通过调用spec的路径来执行测试。按照惯例,spec存储在项目根目录中的./spec/子目录中。
语法是:

$ gauge run [flags] <path-to=specs>

Gauge命令行实用程序允许多种方式执行要执行的spec。用于执行测试的有效路径可以是:包含spec的目录路径或者sepc文件路径或者scenarios路径或者三种的混合。

为执行在已有文件夹 specs 内的所有用例,使用:

$ gauge run specs/

这将给出一个彩色的控制台输出,其中包括执行细节以及执行摘要。

指定场景

可以通过在spec中指定该场景的跨度中的行号来执行spec的单个场景,要执行下列spec中的 Admin Login 场景,请使用命令:

$ gauge run specs/login_test.spec:4

1
2
3
4
5
6
7
Configuration
=============

Admin Login
------------
* User must login as "admin"
* Navigate to the configuration page

这仅执行在行号4(即login_test.spec中的 Admin Login)中存在的场景。在上述spec中,由于跨度,指定行号4-7会执行相同的场景。

也可以选择性的执行多种场景如下:

$ gauge run specs/helloworld.spec:4 specs/helloword.spec:7

这些场景也可以属于不同的spec文件。
你也可以指定一个具体的scenario或者scenario列表来执行。要执行scenario,gauge将获取spec文件的路径,后跟冒号和零索引数字(译者注:从0开始的索引)的scenario。
例如:要执行名为 spec1.spec 的spec文件的第二个scenario,你应该执行:

$ gauge run specs/spec1.spec:1

要指定多个scenarios,请添加多个这样的参数。例如,要执行名为 spec1.spec 的spec文件的第一和第三个scenario,你应该执行:

$ gauge run specs/spec1.spec:0 specs/spec1.spec:2

指定目录

你可以指定存储spec文件的一个单独目录,Gauge扫描这个目录,并取出可用的spec文件。例如:

$ gauge run specs/

你也可以指定存储spec文件的多个目录,Gauge扫描所有的目录内可用的spec文件并在一次运行过程中执行它们。例如:

$ gauge run specs-dir1/ specs-dir2/ specs-dir3/

指定文件

你可以指定spec文件的路径,在这种情况下,Gauge仅执行提供的spec文件。例如,要执行一个单独的spec文件:

$ gauge run specs/spec1.spec

或者,执行多个spec文件:

$ gauge run specs/spec1.spec specs/spec2.spec specs/spec3.spec

详细报告

默认情况下,在执行测试中,gauge提供spec级别的报告。你可以使用 --verbose 标志来启用详细的步骤级别报告。例如:

$ gauge run –verbose specs/

执行中的错误

spec文件解析错误

如果spec文件不符合预期的语法或者无法解析参数,则会发生这种情况。例如:

[ParseError] hello_world.spec : line no: 25, Dynamic parameter could not be resolved

spec文件未实现的步骤

如果spec文件包含未用项目编程语言实现的步骤,则会出现验证错误。必须要为执行的spec中的所有步骤提供适当的底层代码实现。例如:

login.spec:33: Step implementation not found. login with “user” and “p@ssword”

启动语言执行插件失败

如果项目中语言特定插件未安装则执行会失败。

数据驱动执行

  • 在任何步骤前,数据表格以markdown表格格式定义在spec的开头
  • 数据表格应该有标题行,且至少有一行数据
  • 表格中的标题名称,用在有角括号 <> 的步骤中,用于将数据表中特定列引用为参数
  • 一次执行,每个场景都会执行表格中的每一行数据
  • 表格很容易的在IDE中被创建,使用模版 table:<no of columns> ,然后点击 Tab
  • 表格参数以多标记表格格式编写

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Table driven execution
======================

|id| name |
|--|---------|
|1 |vishnu |
|2 |prateek |
|3 |navaneeth|

Scenario
--------
* Say "hello" to <name>

Second Scenario
---------------
* Say "namaste" to <name>

在上面的示例,步骤使用数据表格中的 name 列作为动态参数。

ScenarioSecond Scenario 都会首先执行第一行数据 1,vishnu,然后连续地执行表格中第二和第三行的值。

执行选中的表格数据行

默认情况下,spec中的场景会针对所有数据表格行运行。可以使用标志 --table-rows针对选定的数据表行运行,并指定应执行场景的行号。如果有多个行号,则应以逗号分隔。
例如:

$ gauge run –table-rows “1” specs/hello.spec
$ gauge run –table-rows “1,4,7” specs/hello.spec

针对哪些场景运行,也可以指定表格行范围。 例如:

$ gauge run –table-rows “1-3” specs/hello.spec

这将针对表格行1,2,3执行场景。

执行标签

标签允许你快速过滤将要执行的spec和场景。执行标有某些标签的所有specs和场景,使用下面的命令:

$ gauge run –tags tag1,tag2 spec

或者

$ gauge run –tags “tag1, tag2” specs

这仅执行标记有 tag1tag2 的场景和spec。

示例:
spec

在上述spec中,如果想要标记有”search”和”admin”的所有场景被执行,使用下列命令:

$ gauge run –tags “search & admin” SPEC_FILE_NAME

标签表达式

标签可以通过表达式被选中,例如:

TagsSelects specs/scenarios that
!TagAdo not have TagA
TagA & TagBhave both TagA and TagB.
TagA & !TagBhave TagA and not TagB.
TagA | TagBhave either TagA or TagB.
(TagA & TagB) | TagChave either TagC or both TagA and TagB
!(TagA & TagB) | TagChave either TagC or do not have both TagA and TagB
(TagA | TagB) & TagChave either [TagA and TagC] or [TagB and TagC]

并行执行

可以并行执行spec以更快的运行测试并分发负载。
这可以通过命令完成:

$ gauge run –parallel specs

或者

$ gauge run -p specs

这根据机器的核数量创建多个执行流,并在执行者之间分配负载。并行执行流数量可以通过 -n 标志指定。例如:

$ gauge run –parallel -n=4 specs

这会创建四个并行执行流。

执行流数量的指定应该是由机器的可用CPU核数量决定,超过此数量可能会导致不良结果。要进行优化,请尝试使用线程执行并行执行(译者注:下一节)。

使用线程并行执行

在并行执行中,每个执行流会启动一个新的工作者进程。这可以通过使用多线程取代进程来优化。这样进行并行执行只有一个工作进程且启动多个线程。为使用它,设置 enable_multithreading 环境变量为true。这个属性也可以添加到默认/自定义环境。

enable_multithreading = true

必要条件:

  • 线程安全测试代码
  • 语言执行插件应该支持多线程

目前,这个功能只有 Java语言插件支持。

执行一组spec

spec可以分成组,并且 --group-g 标志提供执行特定组的功能。可以通过下面的命令完成:

$ gauge run -n=4 -g=2 specs

上述创建4组(由 -n 标志提供)spec,并且执行第二个(由 -g 提供)组。spec按照字母顺序排序,然后分成组,保证每个组都有相同的spec集合,无论执行多少次。
例如:

$ gauge run -n=4 -g=2 specs

$ gauge run -n=4 -g=2 specs

上面的两条命令将会执行同样的一组spec。

lazy分配测试执行你的测试套件

此功能允许你在执行期间动态分配spec给工作流,而不是在执行开始时。这使得Gauge可以优化你的代理/执行环境的资源。这是非常有用的,因为某些spec可能需要比其他spec更多的时间,因为它们中的场景数量或者被测功能的性质。以下命令将在指定数量的流中分配测试:

$ gauge run -n=4 –strategy=”lazy” specs

或者

$ gauge run -n=4 specs

假设你有100个测试用例,你选择运行4个流/核心;在执行期间,lazy分配将动态地将下一个spec分配给已完成先前执行的流并等待更多工作的流。

lazy分配测试是默认的行为。根据需求,另一种叫做 eager 的策略也是有用的。在这种情况下,100个测试用例在执行之前分发,从而使它们的数量相等。

$ gauge run -n=4 –strategy=”eager” specs

lazy策略只有在你未使用 -g 标志时生效。这是因为分组依赖于开始执行之前测试的分配。结合lazy策略使用它将不会对你的测试套件执行产生影响。

重新执行一个执行流

spec可以分成组, --group-g 提供执行具体组的功能。可以通过下列命令完成:

$ gauge run -n=4 -g=2 specs

上述创建4组(由 -n 标志提供)spec,并且执行第二个(由 -g 提供)组。spec按照字母顺序排序,然后分成组,保证每个组都有相同的spec集合,无论执行多少次。例如:

$ gauge run -n=4 -g=2 specs

$ gauge run -n=4 -g=2 specs

上面的两条命令将会执行同样的一组spec。

Hook中的当前执行上下文

  • 要获取有关当前spec,场景,步骤执行的其他信息,可以在hooks方法中添加一个附加的 ExecutionContext 参数。
1
2
3
4
5
6
7
8
9
10
11
@BeforeScenario
public void loginUser(ExecutionContext context) {
String scenarioName = context.getCurrentScenario().getName();
// Code for before scenario
}

@AfterSpec
public void performAfterSpec(ExecutionContext context) {
Specification currentSpecification = context.getCurrentSpecification();
// Code for after step
}
1
2
3
This feature is not yet
supported in Gauge-CSharp. Please refer to
https://github.com/getgauge/gauge-csharp/issues/53 for updates.
1
2
3
4
5
6
7
before_spec do |execution_info|
puts execution_info.inspect
end

after_spec do |execution_info|
puts execution_info.inspect
end

基于标签过滤Hooks执行

你可以指定执行hooks可以运行的标签,这将确保hook仅在具有所需标签的场景和spec上运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// A before spec hook that runs when tag1 and tag2
// is present in the current scenario and spec.
@BeforeSpec(tags = {"tag1, tag2"})
public void loginUser() {
// Code forbefore scenario
}

// A after step hook runs when tag1 or tag2
// is present in the currentscenario and spec.
// Default tagAggregation value is Operator.AND.
@AfterStep(tags = {"tag1", "tag2"}, tagAggregation = Operator.OR)
public void performAfterStep() {
// Code for after step
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// A before spec hook that runs when tag1 and tag2
// is present in the current scenario and spec.
[BeforeSpec("tag1, tag2")]
public void LoginUser() {
// Code for before scenario
}

// A after step hook runs when tag1 or tag2
// is present in the current scenario and spec.
// Default tagAggregation value is Operator.AND.
[AfterStep("tag1", "tag2")]
[TagAggregationBehaviour(TagAggregation.Or)]
public void PerformAfterStep() {
// Code for after step
}
1
2
3
4
5
6
7
8
9
10
11
12
# A before spec hook that runs when
# tag1 and tag2 is present in the current scenario and spec.
before_spec({tags: ['tag2', 'tag1']}) do
# Code for before scenario
end

# A after step hook runs when tag1 or tag2 is present in the current scenario and spec.
# Default tagAggregation value is Operator.AND.

after_spec({tags: ['tag2', 'tag1'], operator: 'OR'}) do
# Code for after step
end

标签不能被指定在 @BeforeSuite@AfterSuite hooks上

Gauge项目模版

Gauge提供的模版可用于引导初始化Gauge项目的过程以及合适的构建依赖工具,webdriver等。运行下面的命令,列出所有gauge项目可用的模版:

$ gauge init –templates

这些模版也可以在 Bintray网站Gauge模版 处找到。

通过模版初始化Gauge项目

假如你想使用Java编写测试代码以及Selenium作为驱动来初始化Gauge项目。

你可以通过使用 java_maven_selenium gauge模版快速设置此项目,该项目已准备好开始使用selenium编写测试 。

要使用模版初始化gauge项目,从运行 gauge init --templates后展示的名字选择其一然后在初始化gauge项目时将此名作为参数传入。

例如,为创建使用 java_maven_selenium 模版的gauge项目,你需要运行下面的命令:

$ gauge init java_maven_selenium

此模版将maven作为构建工具以及selenium作为webdrvier来创建gauge项目, 这将会下载gauge模版 java_maven_selenium 然后使用有用的示例代码设置你的项目。

现在,你可以开始编写spec然后执行它们。

步骤别名

多个步骤名称对应相同的实现,所有步骤名称的参数的数量和类型必须与实现上的参数数量想匹配。

用例

可能在一些情况下,在创作spec的时候,你可能希望以不同的方式表达相同的功能,以使得spec更容易阅读。

示例1

User Creation
=============
Multiple Users
--------------
* Create a user "user 1"
* Verify "user 1" has access to dashboard
* Create another user "user 2"
* Verify "user 2" has access to dashboard

在名为Multiple Users的场景里,第一和第三步的底层功能是一样的,但是它们的表达是不一样的。这有助于更清楚的传达意图和功能。在这样的情况下,应该使用步骤别名功能,以便你可以在代码级别实践DRY原则,同事确保功能被清楚的表达。

实现

1
2
3
4
5
6
7
8
public class Users {

@Step({"Create a user <user_name>", "Create another user <user_name>"})
public void helloWorld(String user_name) {
// create user user_name
}

}
1
2
3
4
5
6
7
8
public class Users {

[Step({"Create a user <user_name>", "Create another user <user_name>"})]
public void HelloWorld(string user_name) {
// create user user_name
}

}
1
2
3
step 'Create a user ','Create another user ' do |user_name|
// create user user_name
end

示例2

User Creation

  • User creates a new account

  • A “welcome” email is sent to the user

    Shopping Cart


  • User checks out the shopping cart
  • Payment is successfully received
  • An email confirming the “order” is sent

在此用例中,两个场景的最后一行(发送邮件)底层功能是一样的,但是使用别名后表达更清楚。底层的步骤实现可能是这样的。

实现

1
2
3
4
5
6
7
public class Users {

@Step({"A <email_type> email is sent to the user", "An email confirming the <email_type> is sent"})
public void helloWorld(String email_type) {
// Send email of email_type
}
}
1
2
3
4
5
6
7
8
public class Users {

[Step({"A <email_type> email is sent to the user", "An email confirming the <email_type> is sent"})]
public void HelloWorld(string email_type) {
// Send email of email_type
}

}
1
2
3
step 'A email is sent to the user', 'An email confirming the is sent' do |email_type|
email_service.send email_type
end

失败用例重新运行

Gauge提供仅重新执行上次执行过程中失败场景的功能。失败场景运行可以通过使用gauge标签 --failed 。假如你运行 gauge run specs 后3个场景失败了,你通过下面的命令,可以仅仅重新执行失败场景而不是执行所有的场景。

$ gauge run –failed

这个命令甚至会设置在你上次运行中提供的标志,例如:如果你已经执行了下列命令:

$ gauge run –env=”chrome” –verbose specs

并且三个场景在这次运行过程中失败了, gauge run --failed 命令设置 --env--verbose 标志为对应的值然后仅仅执行失败的三个场景。这个情况下 gauge run --failed 相当于命令:

$ gauge run –env=”chrome” –verbose specs

重构

改写步骤

Gauge允许你改写项目中的步骤,改写步骤运行:

$ gauge refactor “old step“ “new step name”

这里 <> 用来表示步骤中的参数。参数可以在改写过程中被添加,被移除或者被修改。这样会修改所有的spec文件以及代码文件(用于支持重构的语言插件)。

示例

假设我们的spec文件有以下步骤:

  • create user “john” with id “123”
  • create user “mark” with id “345”

现在,如果你需要添加一个额外的参数 last name 在这个步骤里,我们可以执行下面的命令:

$ gauge refactor “create userwith id“ “create userwithand last name

这将修改所有的spec文件已反映修改。

  • create user “john” with id “123” and last name “watson”
  • create user “mark” with id “345” and last name “watson”

项目结构体

在初始化特定语言的gauge项目时,将使用以下文件创建项目框架:

通用Gauge文件

GAUGE_PROJECT_ROOT环境变量保存创建Gauge项目的路径。

├── env
│ └── default
│ └── default.properties
├── manifest.json
├── specs
│ └── example.spec

Env目录

env目录包含多个环境特定的目录,每个目录都有.property文件,用于定义在特定环境执行期间设置的环境变量。env/default目录是在项目初始化的时候创建,包含执行过程中设置的默认环境变量。

学习更多关于 管理环境 的内容。

Specs目录

specs目录包含此项目所有的spec文件,它们是用简单的markdown语法编写的业务层spec。一个简单的spec示例(example.spec)被建在specs目录中,它易于理解spec的格式。学习更多关于 spec 的内容。

manifest文件

manifest.json文件包含spec特定的配置,其中包括项目中所需的插件信息。

项目初始化后,manifest.json文件将具有一下内容:

{
  "Language": "<language>",
  "Plugins": [
    "html-report"
  ]
}
  • Language:编写测试代码的编程语言,Gauge使用对应的Language runner来执行specs。
  • Plugins:项目所用的Gauge插件,一些插件会在每个Gauge项目中默认被使用。插件可以通过执行下面的命令添加到项目中:

$ gauge add

例如:

$ gauge add xml-report

在运行上面的命令之后,manifest.json文件将会具有以下内容:

{
“Language”: ““,
“Plugins”: [
“html-report”,
“xml-report”
]
}

C#项目文件

当创建一个新的Gauge C#项目时,项目中创建的C#特定文件如下:

├── foo.csproj
├── foo.sln
├── manifest.json
├── packages.config
├── StepImplementation.cs

├── env
│ └───default
│└──────default.properties

├───packages
└───< Nuget Package Binaries>
├───Properties
│└──────AssemblyInfo.cs

└───specs
│└──────hello_world.spec

packages.config

nuget. 包含Gauge依赖,根据你的项目需要,添加更多依赖到这个列表。

StepImplementation.cs

包含定义在 hello_world.spec 内的简单步骤的实现。

default.properties

这定义了gauge C#执行插件的默认配置,目前的配置参数是:

  • gauge_reports_dirs - gauge报告目录的路径,应该是相对于项目的目录或者绝对路径。
  • overwrite_reports - 如果在每次执行中gauge报告不允许被覆盖则设置为false,在每次执行中一个新的时间戳目录将被创建,默认情况下这个配置是true。

Java项目文件

Java项目中被创建的具体项目文件有:

 ├── libs
 └── src
        └── test
            └── java
                  └── StepImplementation.java
 ├── env
        └── default
            └── java.properties

libs

包含此项目额外的Java依赖文件

src

Src目录包含具有步骤实现的测试代码的class文件

java.properties

定义了Java运行插件的配置,更多细节请见 配置

Ruby项目文件

Ruby项目中被创建的具体文件有:

├── env
│   └── default
│       └── ruby.properties
└── step_implementations
    └── step_implementation.rb

step_implementations 文件夹

包含所有的用ruby编写的步骤实现测试代码 .rb 文件

ruby.preperties

定义ruby执行插件的配置。

IDE支持

列出的IDE插件可用于gauge,使得编写spec和测试代码更简单。

  • Intellij IDEA
  • Visual Studio

Intellij IDEA

Gauge项目可以通过Intellij Idea创建和执行,插件可以通过JetBrains插件库下载。

此插件目前仅支持Gauge和Java。

安装

插件可通过JetBrains插件库下载安装。

从IDE安装Gauge Intellij IDEA插件步骤:

  • 打开Setting对话(比如 ⌘快捷键)

  • 在左侧窗口中选择Plugins

  • 在Plugins页面打开右侧窗口,点击 Install JetBrains pluginBrowse repositories 按钮

  • 搜索Gauge,左键点击Gauge然后选择下载和安装
    这里写图片描述

  • 确认你打算下载并安装所选插件

  • 点击关闭

  • 在Setting对话框点击OK,然后重启Intellij IDEA让安装生效

备注:你安装的插件是默认打开的,如果有需要,你可以按照打开与禁用插件的描述来禁用它。

查看此 步骤 ,手动下载和安装插件或者更新插件。

创建一个新的Gauge项目然后开始编写你的测试。

现在探索Gauge Intellij IDEA插件的所有 功能

安装每日版本

每日构建版本在Intellij 插件库也是可用的。

创建JAVA项目

  • File - New Project
  • 选择 Gauge
  • 选择项目位置和JAVA SDK
  • 完成

备注:如果 gauge-java 未安装,第一次会下载它。

这里写图片描述

使用Gauge-maven-plugin的maven项目

  • File - New Project

  • 选择 Maven

  • 选择 create from Archetype

  • 选择gauge原型 - com.thoughtworks.gauge.maven

  • 如果 com.thoughtworks.gauge.maven 原型未被添加,选择 Add Archetype

    1. 输入GroupId:com.thoughtworks.gauge.maven
    2. 输入Artifactid:gauge-archetype-java
    3. 输入Version:1.0.1 或者 最新版本号

这里写图片描述

  • 为你的项目输入 groupIdartifactId
  • 输入 Project Name 然后结束
  • 该项目将以批处理模式创建,观察控制台进度
  • 项目创建 close and re-open the project 后打开自动完成功能
  • 打开 auto-import ,在 File > Settings > Maven > Importing 下,选中 Import Maven projects automatically 勾选框

查看 gauge-maven-plugin 获取更多使用gauge maven插件的信息。

语法高亮

Gauge Specs采用markdown语法,此插件使得spec,场景,步骤和标签高亮。

未实现的步骤也会高亮。

这里写图片描述

自动完成

当前项目中存在的步骤可以通过调用’*’之后自动完成弹出 ctrl+ space 来列出。选择一个步骤,插入参数高亮显示,你可以按 tab
键在参数之间循环并进行编辑。

这里写图片描述

实现步骤

如果你在spec文件中有未实现的步骤,那么它将被注释为’undefined step’。当你的鼠标悬停在步骤上时,会显示一个智能标签。点击智能标签打开快速修复弹出窗口。可以选择实现的目的地(译者注:文件),新类或者现有类的列表。然后,它将生成具有所需注释和参数的步骤。

这里写图片描述

导航

从步骤文本跳转到步骤的实现。

用法: 右键点击 -> Go to -> Declaration

格式化

可以使用操作菜单 ctrl+shift+a 中的spec格式的键盘快捷方式轻松格式化spec文件。这格式化spec包括表格和步骤的缩进。

执行

  • specs可以通过 右键点击 - > run spec 来执行
  • 执行一个目录里的所有spec文件可以通过 右键点击 -> run specifications

单场景执行

通过右键点击想要执行的场景然后选择这个场景来执行单个场景。 右键点击 -> run -> 场景名

备注:如果右键点击在场景意外的上下文中完成,默认情况下,将执行第一个场景。
这里写图片描述

并行执行

为并行执行多个specs

  • 右键点击在 specs 目录上然后选择 create specifications 选项
  • 在新的运行配置中勾选 In Parallel 选项,这将会分发specs的执行,依赖机器拥有的核数量
  • 你也可以指定 Number of parallel execution streams (并行执行流数量),这是一个可选项

警告 :根据当前系统性能选择并行节点。例如在2核机器上,最多可以选择4个并行流。非常大的数字可能会影响性能。

  • 点击 OK , 现在你可以运行这个新配置来并行执行spec。

调试

调试可以与spec执行相同的方式执行。

  • 右键点击一个spec文件或者specs目录 - > 调试 。执行将在标记的断点处停止。

运行配置

你可以编辑运行配置来修改:

  • 将要执行的场景或者spec文件
  • 对应的执行环境
  • 添加标签过滤此次执行
  • 选择并行执行流

这里写图片描述

更改步骤

  • 右键点击 -> Refactor -> 重命名 在步骤上来更改它
  • 参数将会在更改对话的 <> 中,它们可以重新排序,移除或者添加新的参数
  • 这个更改将会影响到项目中对应的所有步骤

查找用途

  • 右键点击 -> Find Usages 在步骤或者concept来查看用途

这里写图片描述

提取concept

  • 在编辑器中选择要转化为concept的步骤

  • 在主菜单或者选择的上下文菜单上,选择Refactor| 提取到concept或者按 ⌥⌘C

  • 在提取concept对话框中打开

    1. 使用要传递的参数指定concept名称,例如: say “hello” to “gauge”.
    2. 从spec文件下拉列表中选择文件名,或者指定相对于项目的新文件名/路径
    3. 单击确定
  • 选中的步骤将会被指定的concept名字取代

这里写图片描述

Intellij IDEA Gauge插件具有更多的功能来简化编写specs。

新建spec和concept文件

你可以右键点击specs目录中的任何目录,并创建新的spec或者concept文件,它们将创建一个让你开始(编写)的模版。

这里写图片描述

新建markdown表格

在spec文件或者cpt文件中创建markdown表格是非常简单的,你可以通过事先定义的表格模版指定你需要的表格列数。

例如,创建四列的表格
这里写图片描述

然后在模版中填写列名

这里写图片描述

编写spec标题

要在markdown中编写spec标题,可以使用预定义的标题模版。

这里写图片描述

然后填写模版中spec的标题
这里写图片描述

编写场景标题

使用预定义的场景标题模版是很容易编写markdown格式的场景标题的。
这里写图片描述

然后填写模版中的场景名

这里写图片描述

HTML预览标签

以markdown编写的spec文件可以被作为HTML预览。

这是markdown格式下的spec文件

这里写图片描述

点击编辑器底部的 HTML Preview 标签,它显示spec文件的HTML等效预览。

这里写图片描述

因为specs是以markdown格式编写,所以它们可以使用任何markdown转HTML的转换器来进行转换成HTML。

Visual Studio

Gauge项目可以通过gauge插件在VS内安装和执行,此插件可以从VS市场安装。

安装

  • 通过 Tools -> Extensions and Updates 打开VS扩展管理
  • 找到 Visual Studio Gallery 然后搜索 Gauge VS2013
  • 点击 download 然后选择 Install 选项
  • 重启VS让修改生效

此扩展在VS市场所在

这里写图片描述

创建一个新的Gauge项目

  • 点击 File -> New Project
  • 在Visual C#类别下选择 Gauge Test Project

这里写图片描述

  • 选择项目位置和项目名称
  • 点击 OK

这会创建一个新的Gauge项目,然后添加执行此Gauge项目所需的元数据。

或者,你也可以通过命令行创建一个新项目:

$ mkdir
$ cd
$ gauge init csharp

这样会创建可以通过VS打开的 <project_name>.sln 文件

语法高亮

Gauge Specs文件通过Markdown语法编写,这个插件高亮Specs,场景,步骤和标签。未实现(译者注:通过代码实现)的步骤也会高亮。

这里写图片描述

自动完成

此插件同VS智能提示挂钩,并引入步骤文本的自动完成。引入的步骤文本是已定义的步骤,已定义的concept和已实现步骤文本的结合。

提示:按ctrl+空格显示智能提示菜单。

这里写图片描述

步骤实现

如果你在spec文件有未实现的步骤,它会有红色下划线高亮。将鼠标悬停在步骤文本的末尾以获取智能标签来实现它。单击智能标签将弹出一个窗口。实现的位置可以选择一个新的类或者已有类的列表。这将会生成具有所需注释和参数的步骤。

这里写图片描述

导航

从步骤文本跳转到它的对应实现。

用法: 右键点击 -> Go to Declaration 或者按F12

格式化

Spec文件可以轻易通过 右键点击 -> Format File 来格式化。

格式化spec包括表格和步骤的缩进。

使用测试资源管理器执行

备注:有关 Unit Test explorer 的所有功能,请参阅 Unit Test Explorer 的MSDN文档。

当你构建测试项目时,所有的测试场景会实现在测试资源管理器上。如果测试资源管理器不可用,选择VS菜单上 Test -> Windows -> Test Explorer .

这里写图片描述

执行测试

  • 执行所有的场景,选择 Run All
  • 执行一个spec文件的所有场景,选择 Run ,然后选择菜单上的分组
  • 执行一个或者多个场景,选择你想执行的但个场景,打开所选场景的上下文菜单,然后选择 Run Selected Tests

并行执行测试

如果各个场景没有依赖关系阻止它们以任何顺序执行,请使用工具栏上的 ute_parallel 切换按钮打开并行测试执行。

如果你想使用Gauge并行执行请参考 命令行并行执行

测试结果

测试资源管理器窗口顶部的通过/失败栏会随着场景的运行而变化,在运行结束时,如果所有的测试通过,通过失败条都会变为绿色,如果测试失败,则会变为红色。

当你运行,编写并重新运行测试时,测试资源管理器将以失败测试,通过测试,跳过测试和未运行测试的默认组来实现结果。你可以更改测试资源管理器对你的测试进行分组的方式。你可以从测试资源管理器工具栏执行大量的查找,组织和运行测试的工作。

这里写图片描述

特点

按spec组合的场景,定义的标签。(真的没看懂,如果你也没看懂,请看原文,如果看懂了,麻烦告诉我!)

查询和过滤测试列表

测试资源管理器可以用作如VS文档中提到的查找和过滤测试列表功能。

调试

调试可以以spec执行同样的方式来执行。

在测试资源管理器的某个场景上操作 右键点击 -> Debug Selected Tests ,执行将在标记的 断点 处停止。

更改步骤

  • 在步骤上操作 右键点击 -> Rename 来更改它
  • 参数可以被重新排序,移除,或者添加新的参数
  • 此更改会影响此项目中所有的specs

查找用处

在步骤上操作 右键点击 -> Find all References

创建spec和concept文件

  • 你可以右键点击spec目录或者任何嵌套目录,选择 add -> New Item -> 找到 Visual C# Items 下的 Gauge
  • 选择 Specification 或者 concept 文件类型
  • 输入文件名然后点击 Add

这里写图片描述