HelloWood

Gauge中执行测试的常用命令

2018-01-01

本文所有内容均参考自Gauge官方文档s


#初始化Java项目

会在指定的文件夹下创建一个新的Gauge项目,如果没有安装JavaHtml-report插件会自动安装

1
gauge --init java

执行项目

通过文件执行

  • 执行specs文件夹下所有.spec文件
1
gauge specs
  • 执行specs文件夹下的specs.spec文件
1
gauge specs/specs.spec
  • 执行多个文件夹下的所有文件
1
gauge specs-dir1/ specs-dir2/
  • 执行多个文件夹下的指定文件
1
gauge specs-dir1/specs1.spec specs-dir2/spesc2.spec
  • 执行一个特定的Scenario
1
gauge specs/specs.spec:16

后面的数字是要执行的Scenario所在的行数,从0开始

  • 执行多个特定的Scenario
1
gauge specs-dir1/specs1.spec:10 specs-dir2/specs2.spce:20
  • 执行的过程中输出日志
1
gauge --verbose specs

##通过Tag执行

1
2
3
4
5
6
7
8
9
10
11
12
13
Login specification
===================
Tags: login, admin, user login


Successful login scenario
-------------------------
Tags: login-success, admin


failed login scenario
-------------------------
Tags: login-failed, admin
  • 通过单独的Tag执行
1
gauge --tags admin specs

带有admin 的所有的SpecificationScenario都会被执行

  • 通过多个Tag执行
1
2
3
4
5
6
7
8
9
gauge --tags login,admin specs

或者:

gauge --tags "login,admin" specs

或者:

gauge --tags "login & admin" specs

只有当Specification或者Scenario同时有loginadmin Tag的时候才会被执行

  • 执行含有空格的Tag
    1
    gauge --tags "user login" specs
  • Tag支持与、或、非 运算
1
2
3
4
5
6
7
8
!TagA: 执行不含有TagA的Specification或Scenario
TagA & TagB: 执行同时含有TagA和TagB的Specification或Scenario
TagA & !TagB: 执行含有TagA但不含TagB的Specification或Scenario
TagA | TagB: 执行含有TagA或TagB的Specification或Scenario
(TagA & TagB) | TagC: 执行同时含有TagA和TagB或者含有TagC的Specification或Scenario
!(TagA & TagB) | TagC: 执行同时不含有TagA和TagB的或者含有TagC的Specification或Scenario
(TagA | TagB) & TagC: 执行同时含有TagA和TagC或者TagB和TagC的Specification或Scenario


##并发执行

并发执行是根据CPU核心数量创建多个流来提高执行速度,均衡负载

  • 使用并发执行
    1
    2
    3
    4
    5
    gauge --parallel specs

    或者:

    gauge -p specs
  • 指定并发执行的流的数量
1
gauge --parallel -n=4 specs
  • 延迟分配策略

    在执行期间根据执行状态动态的分配执行任务,每个流执行的Specification数量不一定相同

1
2
3
4
5
gauge -n=4 --stategy="lazy" specs

或者:

gauge -n=4 specs
  • 积极加载策略

    在执行之前平均的分配相同数量的Specification给每个流

1
gauge -n=4 --strategy="eager" specs
  • 分组执行策略

    Specifications 按照字母表的顺序排序后分组,可以指定某一组执行

1
gauge -n=4 -g=2 specs

specs文件夹下的所有.spec 文件按字母表的顺序分成4组,只执行第二组


使用钩子(Hook)来查看执行状态

钩子可以理解为Java中的AOP(Aspect Oriented Programming),把SpecificationScenario当做一个切面,在执行之前和执行之后做一些操作

  • 根据上下文执行
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        public class ExecutionHooks {

    @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
    }
    }
  • 根据Tag标记来执行
1
2
3
4
5
6
7
8
9
10
11
12
13
// 在含有tag1和tag2的Specification或Scenario之前执行
@BeforeSpec(tags = {"tag1, tag2"})
public void loginUser() {
// Code for before scenario
}


// 在含有tag1或tag2的Specification或者Scenario执行之后执行
// Tag集合(tagAggregation)的运算符是或
@AfterStep(tags = {"tag1", "tag2"}, tagAggregation = Operator.OR)
public void performAfterStep() {
// Code for after step
}