浅谈BDD下的自动化测试框架
一、什么是BDD
BDD(Behavior Driven Development),即行为驱动开发,是敏捷开发技术之一,通过自然语言定义系统行为,以功能使用者的角度,编写需求场景,且这些行为描述可以直接形成需求文档,同时也是测试标准。
二、为什么要使用BDD
传统模式下,从客户提出需求,到输出产品,我们会经历以下流程:
客户:提出需求
需求分析师:分析需求,形成开发可执行的具体 Feature、Story、Taks
开发:实现需求
测试:编写验证步骤,验证最终产品是否满足需求
通常,由于不同的人对需求的理解不同,最终可能导致产品与客户需求存在很大差距。
BDD是基于一种“通用语言”,可以让客户、产品经理等将需求通过同一种语言描述出来,很大程度上避免了因为理解或表达不一致带来的问题,大大提高产品的交付品质。由此BDD的优势也就体现出来了:
更关注业务,以用户使用产品的角度,描述用户行为以及预期结果
不同角色的人都可以参与需求定义及讨论,最终达成一致理解
使用同一种语言描述需求,及测试用例,很大程度上避免了因理解差异导致实现功能与需求不一致的问题
三、常用的BDD测试框架
我们在前面提到过,BDD最终形成的文档即是需求文档,也是测试规范,那么我们如何基于这些测试规范实现自动化测试呢?目前,支持BDD自动化测试的框架有很多,且支持各种不同的语言,例如:
Cucumber:基于Ruby编写的自动化测试框架,支持Java和.Net等多种语言
Behave/Lettuce/Freshen: Python style的测试框架
Jbehave/ beanSpec :基于Java编写的自动化测试框架
SpecFlow:.Net测试框架
测试框架选型需要根据实际情况而定,例如项目组技术背景,用例覆盖范围,产品性能要求等等,接下来我们详细了解一下Cucumber。
四、BDD自动化
测试框架Cucumber
Cucumber简介
Cucumber是应用比较广的BDD自动化测试工具之一,它理解我们使用Gherkin语言编写的测试用例,自动解析场景对应的步骤定义,进行系统行为验证。Cucumber基于Ruby编写,支持Java和.Net等多种开发语言。
基于Cucumber的BDD的测试流程如下:
.feature:定义需求场景及步骤描述
步骤定义:步骤描述的具体实现,即可执行的步骤代码
运行测试:执行测试用例
生成报告:Cucumber支持生成多种格式的测试报告
如何编写feature文件
.feature文件用来描述功能,每个feature包含一个或多个Scenario,而每个Scenario
又包含一个或多个步骤描述,以下是示例代码:
当我们在eclipse中使用了Cucumber插件后,它会自动检测每个步骤描述是否有对应的实现,如果没有则会有警告提示。
Feature文件使用Gherkin语言编写,然后通过注解将Gherkin脚本与实际测试代码关联起来,比较常用Gerkin的关键字如下:
Feature:对需要的简要描述
Scenario/Scenario Outline:场景描述,即feature所包含的功能点
Given:预置条件
When:具体的动作,例如User Navigate to the LogIn Page
Then:预期结果
And/But:可以与Given、When、Then同时使用,使得step描述更清晰易懂
虽然Cucumber本身在技术上并不区分Given、When、Then这三个关键字,但在实际使用中还是推荐按照词组意思描述步骤。
如何实现步骤定义(Step definition)
在实现测试步骤前,我们需要在maven项目中添加Cucumber相关依赖:
cucumber-java
cucumber-jvm-deps
cucumber-junit
selenium-java(由于示例需要打开浏览器,所以添加了selenium相关依赖)
使用Eclipse可以快速生成实现步骤的java方法,在feature文件上右键选择Run As/Cucumber Feature执行feature文件,当feature中存在未实现的步骤时,Console会打印对应的java方法,将代码拷贝到java文件中,完善测试步骤即可,以下是实现测试步骤的代码示例:
如何执行用例
完成feature以及测试代码后,可以直接在Eclipse中通过以下方式执行用例:
在feature文件点击右键,选择Run As > Cucumber Feature
TestRunner点击右键,选择Run As > JUnit Test,TestRunner定义如下:
也可以通过以下命令行执行测试用例:
Junit命令:java -cp [jar files separated by comma including junit jar file and your junit test case jar file] org.junit.runner.JUnitCore [your junit test case class]
Maven命令:mvn test,我们更推荐使用maven,因为它可以与jenkins集成,方便续持续集成。mvn test的运行结果如下图:
使用mvn test执行测试用例时,默认执行src/test/java目录及子目录下所有满足以下规则的类:
以Test开头的java类(即Test*.java)
以Test结尾的Java类(即*Test.java)
以TestCase结尾的Java类(即*TestCase.java)
Cucumber测试报告
执行测试用例时,Cucumber默认在console中输出测试结果,当然也可以根据需要,通过配置Cucumber Options的Plugin参数,修改报告输出格式,当前支持的报告格式有以下几种:
Pretty Report
HTML Reports
JSON Report
JUNIT XML Report
Pretty Report:使得Console输出的log更具可读性,需要设置CucumberOptions的Plugin参数为pretty。
运行结果如下:
HTML Reports:将测试结果输出到html文件中, plugin参数配置如下:
HTML格式测试报告:
JSON Report:测试结果以JSON格式输出,plugin参数配置如下:
JSON报告示例:
Junit XML Report:测试结果以XML格式输出,plugin参数配置如下:
HTML报告示例:
Cucumber与Jenkins集成
用例编写完成且测试通过后,如何与Jenkins集成并定时触发执行,得到测试结果呢?
首先需要配置Jenkins全局工具配置(JDK和Maven):
然后安装Cucumber reports :
插件安装完成后,在Jenkins中创建Maven项目,做如下配置且保存:
打开项目,并点击“立即构建”,待构建完成后,即可从项目首页查看报告:
Jenkins 的 Cucumber reports 插件可以从不同维度统计测试结果,以下是从 feature的角度统计的结果,例如 Features、Tags、Steps 等。
点击 Feature 名称,即可查看报告详情。
以上便是我们如何基于 Cucumber 完成自动化测试的简单例子,希望能给大家带来帮助。
精选提问:
问1:Cucumber 单元测试和集成测试都是用了这个框架?
答:功能测试和集成场景测试使用了这个框架,单元测试是开发做的,没有用这个框架。
问2:微课堂前面提到的story和taks是什么意思?
答:story 是用户故事,在敏捷中使用As xxx So that xxx去描述用户场景,而BA会根据story进行插卡,讲stroy拆分成可开发的小卡(task)供dev开发使用。
问3:为什么选择了Cucumber?有没有做API自动化测试?使用的什么工具框架robootframework?
答:Cucumber可以将测试用例描述和测试用例执行整合在一起,用自然语言描述出来的测试用例,直接被执行,也就是Gherkin。同时Gherkin对于测试人员并没有什么技术要求,只要精通业务即可,所以我们选择使用Cucumber。
API自动化测试,我们用的rest-assured这个框架,另外也可以使用postman,将测试好的api导出json,再通过npm安装newman这个包,就可以直接运行json文件了。
问4:BDD与敏捷Scrum的关系是什么?
答:BDD是行为驱动开发,是敏捷开发技术,鼓励所有的角色all in 互相协作。scrum是软件开发管理上方法论。
原文发布时间为:2018-08-02
本文来自云栖社区合作伙伴“EAWorld”,了解相关信息可以关注“EAWorld”。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
初识 JSP---(注释/小脚本/声明/指令/动作/内置对象)
注释 java : // /* */ /** */ html : <!-- --> jsp <%-- --%> jsp注释和html注释的区别 jsp注释对jsp引擎有作用,当jsp引擎看到这个注释后,生产servlet文件是会忽略他 html注释对jsp引擎没有作用,jsp引擎把他当成普通标签输出到浏览器,所以在浏览器的 查看源文件时可以看到这个注释,但是浏览器看到这个注释之后,不会把它显示到页面上 小脚本 写在<% %>中的Java代码成为Java小脚本,这些代码,通过jsp引擎转换成servlet后,这些代码 会放在service方法当中 脚本片段 就是在Java脚本中间包括html标签 <% if(true){ %> <a href="http://www.baidu.com">百度</a> <% }else{ %> <a href="http://www.taobao.com">淘宝</a> <% } %> 声明 <%! %> 在jsp文件转换为...
- 下一篇
XAMPP环境的搭建
XAMPP是一个强大的集成软件包(什么是集成软件包?就是多个软件打包一起安装了,比如office办公软件包括了word、Excel、PPT) XAMPP包括了Apache,MySQL,PHP,Perl,利用该软件可以直接对MySQL进行可视化操作。 ps:它的原名叫LAMPP,后面的版本为了区别,改名为XAMPP。 主要内容: 下载与安装XAMPP XAMPP的使用方法 下载与安装XAMPP 这里了由于我是win10的64位系统,所以使用xampp 7.1.1 xampp 7.1.1是一款功能强大的建站工具,是众多不懂的asp、PHP等编程的站长们想要轻松建立一个网站的软件,而且这款软件完全开源,能够让我们的用户免费创建各种网站,如果你想要拥有一个自己的网站,那就不要错过这款软件哦。 下载地址:链接:https://pan.baidu.com/s/1_aXP2FMx0zz6LgsHDfv4Vw 密码:qwf8 1、直接双击运行后缀为.exe的执行文件,进行安装,一路点击下一步,默认安装即可 XAMPP的使用方法 这里由于我之前安装过tomcat,所以出现了一点问题,请看日志,这些问...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Red5直播服务器,属于Java语言的直播服务器
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题