zoukankan      html  css  js  c++  java
  • Cucumber

    转载:http://blog.csdn.net/liangliang103377/article/details/49928279

    Cucumber是BDD(行为驱动开发)中成熟的一个框架,官方网址: http://cukes.info/

    1、cucumber安装

    1、安装ruby
    2、gem install cucumber 安装cucumber

    2、cucumber介绍

    cucumber是一种可以使用文本描述语言来执行自动测试用例的工具,使用的语言叫做Gherkin.

    Gherkin用于描述软件的行为而不需要了解具体的实现,使用Gherkin主要有两个目的文档和自动测试用例(我们希望能够和手工测试用例也统一)。Gherkin支持超过40种语言,包括英文、中文。Gherkin可以在任何地方新增注释,注释以#开头,每一个文件都是已.feature结尾,在feature文件中输入功能描述、场景、步骤,当执行这个功能时每一个步骤都需要编写ruby代码块来实现具体的功能,当前cucumber支持多种语言,除了ruby还可以使用java、javascript来编写具体定义层的实现。

    3、Features介绍
    feature(功能),每一个feature文件都要开始于Feature(功能),Feature之后的描述可以随便写,直到出现Scenario(场景),一个feature中可以有多个Scenario,每个Scenario包含(step)步骤列表,步骤使用Given、When、Then、But、And这些关键词,cucumber对这些关键词的处理是一样的,但是我们在使用的时候需要按照场景区分。

    4、Step denfinitions介绍

    Cucumber中定义的每一个step(步骤)都需要有一个step definition对应,默认的话是使用Ruby来编写定义的脚本(现在有cucumber-js等也支持javascript、Java等来编写),支持通过正则表达式从step中传递参数。Step definition的详细说明可以参考

    https://github.com/cucumber/cucumber/wiki/Step-Definitions

    5、Given When then(假如 当 那么)

    Cucumber的步骤中会包含Given、When、then这些词组,cucumber本身在技术实现上不区分这三个词组,但是在使用上推荐按照词组的意思来使用。
    Given-用例开始执行前的一个前置条件,类似与编写代码setup中的一些步骤
    When-用例开始执行的一些关键操作步骤,类似点击元素等
    Then-观察结果,就是平时用例中的验证步骤
    And-一个步骤中如果存在多个Given操作,后面的Given可以用And替代
    But-一个步骤中如果存在多个Then操作,第二个开始后面的Then可以用But替代

    6、 Cucumber使用

    查看cucumber支持的语言 cucumber --i18n help

    查看支持语言的关键字 cucumber –i18n zh-CN

    创建Demo

    1、新建一个demo文件件

    2、demo文件夹下新建features文件夹

    3、features文件夹下新建”中文.feature”文件,后缀必须是.fearure结尾

    中文的话最前面必须增加# language: zh-CN

    # language: zh-CN

    功能:第一个中文程序

    中文实现

    场景:中文实现场景

    假如当前是中文

    当输入是测试

    那么能看到中文测试

    4、新建step_denfinitions文件夹

    5、step_denfinitions中新建step_steps.rb文件编写步骤定义(这里默认使用Ruby编写)

    Given /^当前是(.*)/ do |action|

     @action= action

    end

    When /^输入是(.*)/ do |subject| @subject = subject

    end

    Then /^能看到(.*)/ do |greeting|

      if greeting != "#{@action}#{@subject}"     raise "期望看到<" + greeting + ">,实际看到<" + "#{@action}#{@subject}>"

      end

    end


    6、 执行编写的脚本,在features文件夹的同一目录下运行cucumber命令,则会自动查找features额文件夹下的所有.features结尾的文件进行执行

    7、如果按照tag执行,可以使用cucumber –tags @P0  则只执行P0优先级的用例

    7、Cucumber-tags功能

    详细介绍见:https://github.com/cucumber/cucumber/wiki/Tags


    @billing 

    Feature: Verify billing    

    @important   

    Scenario: Missing product description 

    Scenario: Several products

    对Feature或者Scenario都可以增加tag来进行标注,运行时可以选择只运行哪些tag
    cucumber –tags @billing

    8、Cucumber-Hooks功能

    详细介绍见:https://github.com/cucumber/cucumber/wiki/Hooks

    Cucumber提供了一些钩子,可以在cucumber的生命周期中调用,可以在support目录下新建文件自定义钩子中的一些处理。

    比如下面的代码会在每一个场景的第一个step执行之前调用

    Before do |scenario|  

            # The +scenario+ argument is optional, but if you use it, you can get the title, 

            # description, or name (title + description) of the scenario that is about to be  

            # executed.  

            Rails.logger.debug "Starting scenario: #{scenario.title}"

    end

    9、Cucumber-Custom Formatters功能

    详细介绍见:https://github.com/cucumber/cucumber/wiki/Custom-Formatters

    在执行时增加format参数可以输出详细的结果,另外也可以编写自己的format

    cucumber --format debug 

    当前也存在一些一直的format插件,可以把cucumber的运行结果转为html等格式,具体可以见介绍页的最后。

    Cucumber –f html –out “test.html”会自动生成html的结果文件

    
    10、Cucumber-Profiles功能 
    

    详细介绍见:https://github.com/cucumber/cucumber/wiki/Profiles

    可以在当前的工作目录下新建config目录,下面新建cucmber.yml文件,可以在文件中定义一些组合的命令用于cucumber调用

    # config/cucumber.yml

    ##YAML Template

    ---

    html_report: --format progress --format html --out=features_report.html   bvt: --tags @bvt

    定义完成后可以在cucumber中通过下面命令调用

    cucumber –p bvt

    cucumber –profile html_report

    11、Running Features

    运行编写好的Feartures,详细见:

    https://github.com/cucumber/cucumber/wiki/Running-Features

    cucumber -–help 查看命令的帮助
    cucumber 默认运行features目录下面的所有feature
    cucumber -–require features features/first.feature 只运行指定feature文件中的用例
    cucumber features –name “hello” 运行指定Scenario名称的用例
    cucumber features/first.feature:11 运行文件中指定行数对于的Scenario用例

    12、持续集成结合

    详细见:https://github.com/cucumber/cucumber/wiki/Continuous-Integration

    cucumber支持运行时生成junit格式的xml结果文件,用于在Jenkins中自动来解析xml文件生成结果内容

    cucumber –f junit –out “junit”

    通过上面的命令可以执行所有的feature,每一个feature文件都会生成一个xml的结果文件,可以用于在和持续集成整合。

    13、Cucumber-jvm

    cucumber默认是使用Ruby来编写step_denfinitions中的步骤,但是一些测试工具是使用java或者javascript来编写的,比如selenium使用java,不要害怕,cucumber提供了很多不同语言的扩展,也支持java、javascript等。

     

    Cucumber-jvm详细信息见:

    https://github.com/cucumber/cucumber-jvm

     

    使用流程:

    1、 下载cucumber-jvm相关jar包

    下载地址:https://oss.sonatype.org/content/repositories/releases/
    cucumber-core.jar 核心包
    cucumber-java.jar通过java编写需要下载这个包
    cucumber-html.jar生成结果为html文件需要下载这个包
    cucumber-junit.jar生成结果为junit格式需要这个包
    junit.jar java代码中使用junit
    jchronic.jar

    2、eclipse中新建一个一般的java工程,引入下载的jar包
    3、新建基于java的step_denfinitions文件,这里只需新建一般的java文件即可
    下面是一个demo的例子

    package com.netease.cucumber.java;

     

    import junit.framework.Assert;

    import cucumber.api.java.zh_cn.*;;

     

    publicclass ChineseDemo {

        private String action;

        private String subject;

     

        @假如("^当前是(.*)")

        publicvoid isChinese(Stringaction){

           this.action = action;

        }

        @当("^输入是(.*)")

        publicvoid input(Stringsubject){

            this.subject = subject;

        }

     

        @那么("^能看到(.*)")

        publicvoid outPut(Stringgretting){

            Assert.assertEquals(action + subject, gretting);

        }

    }



    编写完成上面的java文件后,就需要编写你的features文件了

    # language: zh-CN
    功能:第一个中文程序
    中文实现

    @P0
    场景:中文实现场景
    假如当前是中文
    当输入是测试
    那么能看到中文测试

    运行用例

    这里使用了官方提供的一个build文件来运行,支持通过命令行的方式,具体支持哪些参数官方也没有详细的文档,暂时只了解到下面一些

    详细的build文件可以参考:

    https://github.com/cucumber/cucumber-jvm/blob/master/examples/java-helloworld/build.xml

    这里简单介绍一下具体运行的几个参数

    <target name="runcukes"depends="compile-test">

           <mkdir dir="target/cucumber-junit-report"/>

           <!--cucumber.api.cli.Main这里是cucumber-jvm的运行入口方法 -->

           <java classname="cucumber.api.cli.Main"fork="true" failonerror="false"resultproperty="cucumber.exitstatus">

               <classpath refid="classpath"/>

               <!-- 这里参数是生成junit格式的xml文件,后续可以和ci平台整合 -->

                <arg value="--format"/>

               <arg value="junit:target/cucumber-junit-report.xml"/>

            

               <!-- 这里是生成一份html格式的结果报告 -->

               <arg value="--format"/>

               <arg value="html:target/cucumber-html-report"/>

               <!-- com.netease.cucumber.java这个包名下面定义了自己编写的step,features下面定义了详细的用例执行步骤 -->

               <arg value="--glue"/>

               <arg value="com.netease.cucumber.java"/>

                <arg value="features/"/>

                <!-- 按照tags选择需要运行的用例 -->

                <arg value="--tags"/>

               <arg value="@P0"/>

           </java>

  • 相关阅读:
    HBase 超详细介绍
    写在之前
    【CF】38E Let's Go Rolling! (dp)
    [CF] E. Camels
    CF9D How many trees? (dp)
    [CF] 8C Looking for Order
    CF dp 题(1500-2000难度)
    NOIP原题板刷
    Codeforces Round #595 (Div. 3) 题解
    CSP-S2019 停课日记
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/7477338.html
Copyright © 2011-2022 走看看