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>

  • 相关阅读:
    准备 FRM 考试——方法、工具与教训
    930. 和相同的二元子数组 前缀和
    1906. 查询差绝对值的最小值 前缀和
    剑指 Offer 37. 序列化二叉树 二叉树 字符串
    815. 公交路线 BFS
    518. 零钱兑换 II dp 完全背包
    1049. 最后一块石头的重量 II dp
    5779. 装包裹的最小浪费空间 二分
    5778. 使二进制字符串字符交替的最少反转次数 字符串 滑动窗口
    474. 一和零 dp
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/7477338.html
Copyright © 2011-2022 走看看