BDD 行为驱动开发(Behavior-Driven Development)学习记录之一

1.1 BDD 行为驱动开发(Behavior-Driven Development)

最佳的TDD实现者从外部工作,从客户的角度出发,从客户验收测试失败来描述系统的行为。 作为BDD实现者,则需要谨慎地将验收测试写为团队中任何人都可以阅读的示例。 我们利用编写这些例子的过程,从客户获得有关我们在开始之前是否在做正确的事情的反馈。 在这样做的时候,会刻意地开发一种共同的,无所不在的语言来谈论系统。

1.2 Cucumber 简介

  Cucumber是一个测试框架。有人说,这个框架非常适合UI自动化测试,他不 仅能把用例中的测试步骤以非常友好的形式展现出来,而且能够非常灵活的构建场景。
  Cucumber 是一个能够理解用普通语言 描述的测试用例的行为驱动开发(BDD)的自动化测试工具,用Ruby编写,支持Java和·Net等多种开发语言。
  Cucumber可以让人们用近似自然的语言去描述Feature(什么是Feature在后面有讲述)和场景,根据Feature驱动开发。用作软件技术人员和非技术之间验收测试的桥梁。它是一个命令行工具。运行后,会执行features中的内容。feature中的step会调用stepdefinitions(Ruby代码)可以用标签来组织场景支持40多种语言高质量集成Ruby。   

  优点:
Cucumber支持不同的语言,例如Java、.net、Ruby
它充当业务与技术间桥梁的角色。可以通过在纯英文文本中创建一个测试用例来实现这一点。
它允许在不知道任何代码的情况下编写测试脚本,它允许非程序员参与。
它以端到端测试框架为目的
由于简单的测试脚本架构,Cucumber提供了代码可重用性

1.3 Cucumber三大组成

  Cucumber有三个重要组成部分,Features、Step_definitions、Cucumber command

  • features:用来存放自然语言的用例文件
  • step_definitions:用来存放java代码实现的测试用例
  • jars:cucumber-jvm的相关jar包都放在这里
  • implementation:存放被测试的代码,也就是项目的实现文件

1.4 Features ->用来描述我们需要测试的功能

  语法规则:

  基于Gherkin。Gherkin是一种简单的英语文本语言,它有助于工具–Cucumber解释和执行测试脚本。支持语言:# language: en (zh-CN)等
  Features文件必须以.features命名。包含title,多个scenarios,每个scenario包含多个step。
  Step定义必须以关键字Given,When,Then,And开始。

  • Scenario: 用来描述测试场景
  • Given: 前置条件
  • When: 描述测试步骤
  • Then: 断言

+ feature : read requirement

    +scenario : testing situation,including

        + Given/

        + when/

        + then

1.5 Step_definitions

  根据feature文件中定义的step编写对应的测试代码 

1.6 Cucumber command

  运行:*.feature文件。cucumber会分析feature文件中定义的step,然后去step -       definitions寻找相匹配的step,执行step中的代码。运行结果以html的形式保存,fail的情况查看对应log日志。在IDEA上可以直接点击测试类进行运行,具体会在后面的例子中进行说明。 

1.7 Cucumber的开发过程
创建feature文件,包括feature,scenarios和step。
创建step_definitions。IDEA中可右击自动创建。
cucumber –format progress。格式化输出。可修改为html,xml等格式输出。
添加断言:
一个场景失败,Cucumber将此场景标记失败,转去执行下一场景。
一个step失败,会跳过这个scenario的其余step,从而终止这个scenario。

2.IDEA 实践

2.1 Create Maven project in IDEA

Click next to the end

 

2.2 Add dependencies in pom,xml

<dependencies>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-java</artifactId>
            <scope>test</scope>
            <version>1.2.4</version>
        </dependency>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-jvm</artifactId>
            <version>1.2.4</version>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>1.2.4</version>
            <exclusions>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <!--<version>2.9</version>-->
        </dependency>
    </dependencies>

3.在test目录下创建resources目录,并标记为testResource目录,在其下创建test.feature文件,并进行编写。

 

在resource目录下创建cucumber.bat,执行bat,cucumber会读取test.feature文件的内容,生成step定义代码,把这个生成的内容,粘贴进去自己定义的java类里xxxx\Stepdefs.java:

这个写的比较全:

https://blog.csdn.net/winteroak/article/details/81585299

posted @ 2020-05-13 17:04  tzmok  阅读(378)  评论(0编辑  收藏  举报