本文所有内容均参考自Gauge官方文档s
#初始化Java项目
会在指定的文件夹下创建一个新的Gauge项目,如果没有安装Java和Html-report插件会自动安装
执行项目
通过文件执行
1
| gauge specs-dir1/ specs-dir2/
|
1
| gauge specs-dir1/specs1.spec specs-dir2/spesc2.spec
|
1
| gauge specs/specs.spec:16
|
后面的数字是要执行的Scenario所在的行数,从0开始
1
| gauge specs-dir1/specs1.spec:10 specs-dir2/specs2.spce:20
|
##通过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
|
1
| gauge --tags admin specs
|
带有admin 的所有的Specification或Scenario都会被执行
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同时有login和admin Tag的时候才会被执行
- 执行含有空格的
Tag1
| 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 按照字母表的顺序排序后分组,可以指定某一组执行
把specs文件夹下的所有.spec 文件按字母表的顺序分成4组,只执行第二组
钩子可以理解为Java中的AOP(Aspect Oriented Programming),把Specification或Scenario当做一个切面,在执行之前和执行之后做一些操作
- 根据上下文执行
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 }
|