1.1 什么是BDD(行为驱动开发)
  首先了解一个概念,BDD(BehaviorDrivenDevelopment:行为驱动开发)为用户提供了从 开发人员和客户的需求创建测试脚本的机会。因此,开始时,开发人员,项目经理,质量保证,用户验收测试人员和产品所有者(股东)都齐聚一堂,集思广益,讨论应该传递哪些测试场景,以便成功调用此软件/应用程序。这样他们想出了一组测试场景。所有这些测试脚本都是简单的语言,所以它也可以服务于文档。

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

组件之间的工作原理如图:

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

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。
1.8 实践
1.首先创建一个MAVEN 项目。

  一路next直到创建完成。

2. 在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文件,并进行编写。

Feature: Mernagria

1.Scenario: registe new pet
2.Given I am on the "new pet" page
3.And I click the "registe" button
4.Then I should go to the "register" page

对应传统测试工具:

1.Feature:待测功能的名称。
2.Description(可选):描述测试中的功能。
3.Scenario:什么是测试场景。
4.When:为了执行下一步骤,应该匹配的特定条件。
5.Then:如果满足WHEN中提到的条件,应该会发生什么。

此时test.feature文件中会有提示,

4.创建feature文件对应的step定义类。
按住ALT+Enter,创建对应的java类,也就是step定义类文件,

得到一个新的类以及对应的方法体。

。其中MyStepdefs是上一步自动生成的step定义类,其中的方法体则是根据前面test.feature文件中的第一句自动生成的,我们也可以一次性生成所有的对应方法,或者一步一步生成。最终结果如下 MyStepdefs.java 。

import cucumber.api.PendingException;
import cucumber.api.java.en.And;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;

/**
* @desc: XXXX
* @version:1.0.0
* @author:Ying
* @Date: 2018/8/6
*/
public class MyStepdefs {
@Given("^I am on the \"([^\"]*)\" page$")
public void iAmOnThePage(String arg0) throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}

@And("^I click the \"([^\"]*)\" button$")
public void iClickTheButton(String arg0) throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}

@Then("^I should go to the \"([^\"]*)\" page$")
public void iShouldGoToThePage(String arg0) throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
}
5.创建测试启动类。
在test/java路径下 创建DemoRun java类,代码如下:

import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith;

/**
* @desc: XXXX
* @version:1.0.0
* @author:Ying
* @Date: 2018/8/6
*/
@RunWith(Cucumber.class)
@CucumberOptions(features = "src/test/resources")
public class DemoRun {
}
其中@RunWith注解就是指定运行的是黄光测试框架,@CucumberOptions则是指定对应的feature文件所在的位置,此处是src目录下的test下的resources文件夹。
最终的文件结构如下:

右键运行DemoRun,得到如下输出:

从中看就是我们的测试,一个Scenarios,三个Steps 一个挂起,2个跳过。

如果我们把第一个step改为

@Given("^I am on the \"([^\"]*)\" page$")
public Boolean iAmOnThePage(String arg0) throws Throwable {
// Write code here that turns the phrase above into concrete actions
// throw new PendingException();
System.out.println("这是第一步");
return true;
}
再次运行,得到如下结果

若3个都改为返回ture,则全为pass。

最后还要说一点,除了可以直接点击DemoRun方法运行测试以外,我们还可以在test/java 路径下新建一个目录,比如run文件夹,然后在其中创建和前面MyStepdefs内容一样的java类。创建完成后,右击resources目录下的test.feature文件,选择”Create featuer test”,如下图所示

注意,在Glue中填写Step定义类的路径,此处为run文件夹。创建完成后点击运行

效果与前面的直接点击DemoRun一样。

至此,我们的第一个小Demo已经跑起来了。下一期会讲述如何将demo与我们的web项目联系起来。

参考:https://www.jianshu.com/p/b934ce61c9dc
参考:https://blog.csdn.net/henni_719/article/details/53586051
参考:https://blog.csdn.net/zhanlurbh/article/details/51377907
————————————————
版权声明:本文为CSDN博主「ying105525」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010867670/article/details/81459923

cucumber测试框架的更多相关文章

  1. 消灭Bug!十款免费移动应用测试框架推荐

      对于移动应用开发者而言,Bug往往是最让人头疼的一大问题.不同于时时刻刻可以修补的Web App,移动App中的Bug往往隐藏得很深,甚至有时候等到用户使用才显现出来,这么一来开发者搞不好就会赔了 ...

  2. 十大免费移动程序测试框架(Android/iOS)

    十大免费移动程序测试框架(Android/iOS) 概述:本文将介绍10款免费移动程序测试框架,帮助开发人员简化测试流程,一起来看看吧. Bug是移动开发者最头痛的一大问题.不同于Web应用程序开发, ...

  3. 前端测试框架对比(js单元测试框架对比)

    前端测试框架对比(js单元测试框架对比) 本文主要目的在于横评业界主流的几款前端框架,顺带说下相关的一些内容. 测试分类 通常应用会有 单元测试(Unit tests) 和 功能测试(Function ...

  4. 行为驱动:Cucumber + Selenium + Java(五) - 使用maven来实现cucumber测试和报告

    在上一篇中,我们介绍了Selenium + Cucumber + Java框架下的测试用例参数化/数据驱动,这一篇我们来使用maven去搭建cucumber框架以及实现测试报告. 5.1 为什么要用m ...

  5. 【转】Java学习---10个测试框架介绍

    [原文]https://www.toutiao.com/i6594302925458113027/ JAVA 程序员需要用到 10 个测试框架和库 Java 程序员需要用到十大单元测试和自动化集成测试 ...

  6. BDD测试框架Spock概要

    前言 为了找到一个适合自己的.更具操作性的.以DDD为核心的开发方法,我最近一直在摸索如何揉合BDD与DDD.围绕这个目标,我找到了Impact Mapping → Cucumber → Spock ...

  7. 5个最佳的Android测试框架(带示例)

    谷歌的Android生态系统正在不断地迅速扩张.有证据表明,新的移动OEM正在攻陷世界的每一个角落,不同的屏幕尺寸.ROM /固件.芯片组以及等等等等,层出不穷.于是乎,对于Android开发人员而言 ...

  8. 从头写一个Cucumber测试(一) Selenium Test

    转载:https://yaowenjie.github.io/%E7%BC%96%E7%A8%8B%E7%9B%B8%E5%85%B3/cucumber-test, 背景(废话不读系列)   前段时间 ...

  9. 2020 | 可替代Selenium的测试框架Top15

    本文首发于 微信公众号: 软测小生 Selenium是一种开源自动测试工具.它可以跨不同的浏览器和平台在Web应用程序上执行功能,回归,负载测试.Slenium是最好的工具之一,但确实有一些缺点. 业 ...

随机推荐

  1. python自动化测试之DDT数据驱动

    时隔已久,再次冒烟,自动化测试工作仍在继续,自动化测试中的数据驱动技术尤为重要,不然咋去实现数据分离呢,对吧,这里就简单介绍下与传统unittest自动化测试框架匹配的DDT数据驱动技术. 话不多说, ...

  2. apache httpd多后缀解析漏洞复现

    apache httpd多后缀解析漏洞复现 一.漏洞描述 Apache Httpd支持一个文件拥有多个后缀,不同的后缀执行不同的命令,也就是说当我们上传的文件中只要后缀名含有php,该文件就可以被解析 ...

  3. [POJ2823] Sliding Window 「单调队列」

    我们从最简单的问题开始: 给定一个长度为N的整数数列a(i),i=0,1,...,N-1和窗长度k. 要求:   f(i) = max{ a(i-k+1),a(i-k+2),..., a(i) },i ...

  4. C#中谁最快:结构还是类?

    前言 在内存当道的日子里,无论什么时候都要考虑这些代码是否会影响程序性能呢? 在现在的世界里,几乎不会去考虑用了几百毫秒,可是在特别的场景了,往往这几百毫米确影响了整个项目的快慢. 通过了解这两者之间 ...

  5. 一份关于.NET Core云原生采用情况调查

    调查背景 Kubernetes 越来越多地在生产环境中使用,围绕 Kubernetes 的整个生态系统在不断演进,新的工具和解决方案也在持续发布.云原生计算的发展驱动着各个企业转向遵循云原生原则(启动 ...

  6. JS面向对象编程(一):封装

    js是一门基于面向对象编程的语言.      如果我们要把(属性)和(方法)封装成一个对象,甚至要从原型对象生成一个实例,我们应该怎么做呢?  一.生成对象的原始模式            假定把猫看 ...

  7. TIJ读书笔记-第21章-并发

    一本Think in java,从去年6月份开始读,读了快一年了,也快读完了,然而回头想想,却好像什么也不记得了,好记性不如烂笔头,那就从现在开始记录一下吧.由于现在在读的是并发,那就先从这章开始吧. ...

  8. 【iOS】this class is not key value coding-compliant for the key ...

    一般此问题 都是由 interface build 与代码中 IBOutlet 的连接所引起的. 可能是在代码中对 IBOutlet 的名称进行了修改,导致 interface build 中的连接实 ...

  9. 跟着阿里p7一起学java高并发 - 第19天:JUC中的Executor框架详解1,全面掌握java并发核心技术

    这是java高并发系列第19篇文章. 本文主要内容 介绍Executor框架相关内容 介绍Executor 介绍ExecutorService 介绍线程池ThreadPoolExecutor及案例 介 ...

  10. sentos中bonding(网卡绑定技术)1

    一.GRUB添加kernel参数 1.# vim /etc/sysconfig/grubGRUB_CMDLINE_LINUX="......      net.ifnames=0" ...