百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

「BDD系列」 Cucumber 框架Java版从零开始

yuyutoo 2025-02-17 14:38 1 浏览 0 评论

欢迎开启Cucumber之旅。Cucumber是当前最流行的行为驱动开发框架(Behavior-Driven Development BDD)之一,同时拥有大量的粉丝。我们在本系列培训里面将更深入地了解Cucumber以及其遵循软件开发模型。

Cucumber 是一个支持行为驱动开发 (BDD) 的测试框架。 它让我们可以用自然语言描述测试场景,例如关键字假如、当、那么等.Cucumber 支持多种开发语言,例如Java、JavaScript、Python、Go、PHP、C#、VB.NET等。

1 Cucumber 介绍

2.1 Cucumber

Cucumber是一个行为驱动开发工具(Behaviour-Driven Development,简称BDD).Cucumber读取以纯文本形式编写的可执行规范,并验证软件是否按照这些规范的要求执行。这些规范由多个示例或场景组成。例如:

1
2
3
4
场景: 用户输入错误的密码登录系统
  假设 用户输入了正确的用户名但密码错误
  当 用户点击登录按钮
  那么 系统提示用户名或密码错误

每个场景都是Cucumber需要执行的测试步骤列表,Cucumber验证待测软件是否满足场景步骤,并为每个测试场景步骤生成测试报告显示验证通过或失败情况。

2.2 Gherkin

Gherkin是一套语,通过套语法Cucumber就可以理解(解析)纯文本的语法结构,Cucumber执行的场景用例就是用Gherkin语法写的。
Gherkin的功能包括:

  • 明确的可执行的规范
  • 使用Cucumber进行自动化测试
  • 记录系统的实际行为

Cucumber可以使用不同的自然语言来描述场景,用户团队可以选择自己熟悉的语言来使用Cucumber。Gherkin文档以.feature的文本文件格式来保存,通常可以上传到Git或SVN等版本控制服务器上进行版本管理。

2.3 步骤定义

步骤是Gherkin和自动化测试代码的连接器。步骤定义约定了应该执行的步骤,步骤中可以实现对待测对象(UT、API、UI)的测试执行代码。

2 安装Cucumber及相关工具

这里只介绍Cucumber-JVM 的安装,Cucumber-JVM是Cucumber的Java版,支持Java常见的工程管理工具Maven、Grandle。JDK 推荐使用JDK 1.8

2.1 安装JDK

Oracle JDK 下载地址:

1
https://www.oracle.com/java/technologies/downloads/#java8

? Open JDK 下载地址:

1
https://www.openlogic.com/openjdk-downloads

2.2 安装Maven

Maven 建议使用3.6.0以上版本。

Maven 下载地址:

1
https://maven.apache.org/download.cgi

2.3 安装IDE

2.3.1 IntelliJ IDEA

Intellij IDEA 推荐使用Cucumber插件,Cucumber插件具有下列功能:

语法和错误高亮显示;自动补全;步骤定义快速修复;步骤定义和步骤间快速切换;功能特性文件中国际化语言支持;

Intellij IDEA 下载地址:

1
https://www.jetbrains.com/zh-cn/idea/promo/

2.3.2 Eclipse


Cucumber Eclipse Plugin 插件具有以下特性:

支持Cucumber-Java8 Lambda语法功能特性文件内容辅助步骤定义向导功能特性步骤自动生成国际化关键字高亮产品特性格式化展现产品特性运行

Eclipse 下载地址:

1
https://www.eclipse.org/downloads/packages/

3 创建Cucumber项目

3.1 引入依赖

创建一个Maven项目,pom.xml文件中引入Cucumber所需的依赖包。
pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62

    4.0.0

    org.bddall
    cucumber-java-starter
    0.0.1
    jar
    Cucumber-Java Starter

    
        UTF-8
        1.8
        4.13.2
        6.10.4
        3.8.1
        2.22.2
    

    
        
            io.cucumber
            cucumber-java
            ${cucumber.version}
            test
        

        
            io.cucumber
            cucumber-junit
            ${cucumber.version}
            test
        

        
            junit
            junit
            ${junit.version}
            test
        
    

    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                ${maven.compiler.version}
                
                    UTF-8
                    ${java.version}
                    ${java.version}
                
            
            
                org.apache.maven.plugins
                maven-surefire-plugin
                ${maven.surefire.version}
            
        
    

3.2 创建工程目录结构

cucumber-jvm Maven工程目录下一般包括一下目录

  • src/main/java //Java代码
  • src/main/resources //配置文件资源
  • src/test/java //测试Java代码
  • src/test/resources // features 文件和其它配置文件
  • src/pom.xml //Maven工程文件,管理依赖包和构建配置

3.3 一个简单测试场景

在src/test/resources目录下创建一个login.feature文件,文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
# language: zh-CN

功能: 用户登录

  场景大纲: 账号密码登录
  假如 用户进入登录页面
  当 用户需要输入用户名和密码然后点击登录按钮
  那么 用户登录平台并显示当前姓名

    @positive
    例子: 有效用户名和密码
      | UserName    | Password | NickName |
      | devops      | 123456   | bdd      |

在src/test/java目录下创建一个cucumber启动类 RunCucumberTest,启动类配置如下:

1
2
3
4
5
@RunWith(Cucumber.class)
@CucumberOptions(plugin = {"pretty", "html:target/cucumber-report.html"})
public class RunCucumberTest {
}

在src/test/java目录下创建一个步骤定义类 LoginStepdefs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package org.bddall.cucumber;

import io.cucumber.java.zh_cn.假如;
import io.cucumber.java.zh_cn.当;
import io.cucumber.java.zh_cn.那么;

public class LoginStepdefs {
    @假如("用户进入登录页面")
    public void 用户进入登录页面() {
        // Write code here that turns the phrase above into concrete actions
        throw new io.cucumber.java.PendingException();
    }
    @当("用户需要输入用户名devopstools和密码123456然后点击登录按钮")
    public void 用户需要输入用户名devopstools和密码123456然后点击登录按钮() {
        // Write code here that turns the phrase above into concrete actions
        throw new io.cucumber.java.PendingException();
    }
    @那么("用户登录平台并显示当前姓名bdd")
    public void 用户登录平台并显示当前姓名bdd() {
        // Write code here that turns the phrase above into concrete actions
        throw new io.cucumber.java.PendingException();
    }
}

我们将在后续的文章中介绍如何在步骤定义中加入测试业务代码,例如API测试或Selenium的Web应用测试。

3.4 测试结果报告

运行一下命令:

1
mvn test

浏览器打开html测试报告,Cucumber测试报告放在
target/cucumber-report.html

Demo运行效果


相关推荐

史上最全的浏览器兼容性问题和解决方案

微信ID:WEB_wysj(点击关注)◎◎◎◎◎◎◎◎◎一┳═┻︻▄(页底留言开放,欢迎来吐槽)●●●...

平面设计基础知识_平面设计基础知识实验收获与总结
平面设计基础知识_平面设计基础知识实验收获与总结

CSS构造颜色,背景与图像1.使用span更好的控制文本中局部区域的文本:文本;2.使用display属性提供区块转变:display:inline(是内联的...

2025-02-21 16:01 yuyutoo

写作排版简单三步就行-工具篇_作文排版模板

和我们工作中日常word排版内部交流不同,这篇教程介绍的写作排版主要是用于“微信公众号、头条号”网络展示。写作展现的是我的思考,排版是让写作在网格上更好地展现。在写作上花费时间是有累积复利优势的,在排...

写一个2048的游戏_2048小游戏功能实现

1.创建HTML文件1.打开一个文本编辑器,例如Notepad++、SublimeText、VisualStudioCode等。2.将以下HTML代码复制并粘贴到文本编辑器中:html...

今天你穿“短袖”了吗?青岛最高23℃!接下来几天气温更刺激……

  最近的天气暖和得让很多小伙伴们喊“热”!!!  昨天的气温到底升得有多高呢?你家有没有榜上有名?...

CSS不规则卡片,纯CSS制作优惠券样式,CSS实现锯齿样式

之前也有写过CSS优惠券样式《CSS3径向渐变实现优惠券波浪造型》,这次再来温习一遍,并且将更为详细的讲解,从布局到具体样式说明,最后定义CSS变量,自定义主题颜色。布局...

柠檬科技肖勃飞:大数据风控助力信用社会建设

...

你的自我界限够强大吗?_你的自我界限够强大吗英文

我的结果:A、该设立新的界限...

行内元素与块级元素,以及区别_行内元素和块级元素有什么区别?

行内元素与块级元素首先,CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,分别为块级(block)、行内(inline)。块级元素:(以下列举比较常...

让“成都速度”跑得潇潇洒洒,地上地下共享轨交繁华
让“成都速度”跑得潇潇洒洒,地上地下共享轨交繁华

去年的两会期间,习近平总书记在参加人大会议四川代表团审议时,对治蜀兴川提出了明确要求,指明了前行方向,并带来了“祝四川人民的生活越来越安逸”的美好祝福。又是一年...

2025-02-21 16:00 yuyutoo

今年国家综合性消防救援队伍计划招录消防员15000名

记者24日从应急管理部获悉,国家综合性消防救援队伍2023年消防员招录工作已正式启动。今年共计划招录消防员15000名,其中高校应届毕业生5000名、退役士兵5000名、社会青年5000名。本次招录的...

一起盘点最新 Chrome v133 的5大主流特性 ?

1.CSS的高级attr()方法CSSattr()函数是CSSLevel5中用于检索DOM元素的属性值并将其用于CSS属性值,类似于var()函数替换自定义属性值的方式。...

竞走团体世锦赛5月太仓举行 世界冠军杨家玉担任形象大使

style="text-align:center;"data-mce-style="text-align:...

学物理能做什么?_学物理能做什么 卢昌海

作者:曹则贤中国科学院物理研究所原标题:《物理学:ASourceofPowerforMan》在2006年中央电视台《对话》栏目的某期节目中,主持人问过我一个的问题:“学物理的人,如果日后不...

你不知道的关于这只眯眼兔的6个小秘密
你不知道的关于这只眯眼兔的6个小秘密

在你们忙着给熊本君做表情包的时候,要知道,最先在网络上引起轰动的可是这只脸上只有两条缝的兔子——兔斯基。今年,它更是迎来了自己的10岁生日。①关于德艺双馨“老艺...

2025-02-21 16:00 yuyutoo

取消回复欢迎 发表评论: