Gauge----自动化测试工具

Gauge是一个自动化测试工具,主要是通过.spec 文件指定执行的步骤,然后由Java代码去测试

  安装:

* 安装插件 Gauge--install-all

*在IDEA中安装Gauge插件

 

  基本思想

 * Gauge的基本思想就是通过.spec 或.md 文件,使用MarkDown语法去规定执行的动作,然后由Java或者其他语言的文件去按照所写的.spec 或者.md 文件的顺序去执行Java文件,从而达到测试的目的

专业术语:

1 Specification

  • 开始的标志,只能有一个,每个specification至少有一个scenaior

 

Specification name          
==================

或者:  

# Specification name

 

2.Scenario

  • 特定场景中的一个情节,一个或多个Scenario组成一个Specification,每个Scenario至少包含一个Step
Scenario  name

----------------------

或者

##scenario name

 

3 Step 

  • specification中的一个可执行部分
  1. 一般的Step         ----正常执行的step,包含在Scenario中
  2. Context step             ----在Scenario执行之前执行的操作,在每个Scenario执行之前都会先执行Context Step
  3. tearDown Step          ----在Scenario执行之后执行的操作,在每个Scenario执行之后都会执行 Teardown Step
* Login into my app
* Search for "gauge"
* Search for "gauge-java"

  

4.Tags

  • 用于标记specification和Scenario
specification sp1

=========

Tags : spec,login

Scenario 

-------------

Tags: scenario,main-page

5.cioncept 

  • 可重用的逻辑组成的单元,写在单独的文件中用于多次使用

6.Parameters 

  • 将参数传递给Java或其他文件
  1. 静态参数: 使用“param”形式  

 

 check "param" exists 
  1. 动态参数:使用<param>形式
check <param> exists

 

  1. Table参数: 使用|id|name|形式

 

|id|name|
|--|--------|
|1|tom|
|2| mike|
  1. 特殊参数: 使用<prefix:value>形式
  • prefix: 参数类型 可以使file table等
  • value: 参数值
File:

    * Verify email text is <file:email.txt>
    * Check if <file:/work/content.txt> is visible

CSV:
    * Step that takes a table <table:data.csv>
    * Check if the following users exist <table : /Users/john/work/users.csv>

7.Comments

  • 备注信息 : 任何没有标记的一行都是注释,备注
Thisis a comment

8.Image

   ![Alt text](/path/to/img.jpg)

    ![Alt text](/path/to/img.jpg "可选的标题")

9.Link

This is [an example](http://getgauge.io "Title") inline link.

[This link](http://github.com/getgauge/gauge) has no title attribute.

  

执行项目

通过文件执行

  • 执行specs文件夹下的specs.spec文件
gauge specs 
  • 执行specs文件夹下的specs.spec文件
gauge specs/specs.spec
  • 执行多个文件夹下的所有文件
gauge specs-dir1/ specs-dir2/
  • 执行多个文件夹下的指定文件
gauge specs-dir1/example.spec specs-dir2/example2.spec
  • 执行一个特定的Scenario
gauge specs/example.spec:16
数字代表该secnaior所在的行,从0开始
  • 执行多个特定的Scenario
gauge specs-dir1/example.spec:16 specs-dir2/example.spec:18
  • 执行的过程中输出日志
gauge --verbose specs

通过Tags执行

如下列specification的Tags

 

    Login specification
    ===================
     Tags: login, admin, user login


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


     failed login scenario
    -------------------------
     Tags: login-failed, admin

 

  • 通过单独的Tag执行
gauge --tag admin specs
带有admin 的所有的SpecificationScenario都会被执行
  • 通过多个Tag执行
gauge --tag "login,admin" specs
只有同时有loginadmin Tag的Specification或者Scenario才会被执行
  • 执行含有空格的Tag
gauge --tag "user login" specs
  • Tag支持与、或、非运算
 !TagA: 执行不含有TagA的Specification或Scenario
 TagA & !TagB: 执行含有TagA但不含TagB的Specification或Scenario
 (TagA & TagB) | TagC: 执行同时含有TagA和TagB或者含有TagC的Specification或Scenario
 (TagA | TagB) & TagC: 执行同时含有TagA和TagC或者TagB和TagC的Specification或Scenario

  

 

Gauge中的钩子(Hook)

  • 钩子可以理解为Java中的AOP(Aspect Oriented Programming),把SpecificationScenario当做一个切面,在执行之前和执行之后做一些操作
  1. suit hook
* 作用于所有的specification和scenaior
//在所有的Specification执行之前执行 @BeforeSuite public void BeforeSuite() { // Code for before suite } //在所有的Specification执行之后执行 @AfterSuite public void AfterSuite() { // Code for after suite }

  2.specification hook

* 作用于specification,在摸个指定的specification之前或者之后执行
//在每一个Specification执行之前执行
    @BeforeSpec
    public void BeforeSpec() {
      // Code for before spec
    }

    //在每一个Specification执行之后执行
    @AfterSpec
    public void AfterSpec() {
      // Code for after spec
    }

  3.Scenario hook

* 作用于Scenario 在每个Scenario之前或者之后执行
 //在每一个Scenario 执行之前执行
    @BeforeScenario
    public void BeforeScenario() {
      // Code for before scenario
    }

    //在每一个Scenario 执行之后执行
    @AfterScenario
    public void AfterScenario() {
      // Code for after scenario
    }

  4.step hook

* 作用于Scenario,在每个scenaior之前或者之后执行  
//在每一个Step执行之前执行
    @BeforeStep
    public void BeforeStep() {
      // Code for before step
    }

    //在每一个Step执行之后执行
    @AfterStep
    public void AfterStep() {
      // Code for after step
    } 
  • Gauge默认会在Scenario执行之后清除缓存,所以会在下个Scenario执行之前创建新的对象,该功能可以在配置中设置清除缓存的等级

  

posted @ 2017-01-23 09:23  果感  阅读(9867)  评论(1编辑  收藏  举报