自动化测试框架cucumber_BDD测试框架之Cucumber使用入门
▼
关注测试局| 会上瘾
1什么是Cucumber
cucumber早在ruby环境下应用广泛,作为BDD框架的先驱,cucumber后来被移植到了多平台,简单来说cucumber是一个测试框架,就像是juint或是rspec一样,不过cucumber遵循的是BDD的原则。
2何为BDD?
BDD就是行为驱动开发,是一种软件开发流程或者说是软件开发实践,具体学术化的东西这里就不介绍了,归根到底,cucumber具有让你用自然语言编写用例的能力。
使用自然语言编写用例有很多好处,最直观的好处就是你的客户在一定的情况下是能够看懂你的测试用例的。最为项目的最核心因素,客户决定了项目该做成什么样,具有什么功能,不需要实现哪些功能。
客户是需求的源泉,如果我们的测试用例很够很好的跟需求结合起来,比如说我们用自然语言写的测试用例如果能让用户认同,那么在这种情况下,测试用例基本等同于原始的需求文档了。需求文档是开发的凭据,这样一来根据测试用例来实现具体的需求就一定是客户所希望完成的需求了,毕竟这些需求是经过用户首肯的。这样一来,我们就等同于是让测试用例驱动了开发,这就是所谓的测试驱动开发的一种不太严谨的初体验了。
cucumber就是这样一种可以把需求转换为测试用例,让测试用例即需求的测试框架。
3Features介绍
feature(功能),每一个feature文件都要 开始于Feature(功能),Feature之后的描述可以随便写,知道出现Scenario(场景),一个feature中可以有多个 Scenario,每个Scenario包含(step)步骤列表,步骤使用Given、When、Then、But、And这些关键 词,cucumber对这些关键词的处理是一样的,但是我们在使用的时候需要按照场景区分。
4Step denfinitions介绍
Cucumber中定义的每一个step(步骤)都需要有一个step definition对应,默认的话是使用Ruby来编写定义的脚本(现在有cucumber-js等也支持javascript、java等来编写),支持通过正则表达式从step中传递参数。
Step definition的详细说明可以参考
https://github.com/cucumber/cucumber/wiki/Step-Definitions
5Given When then(假如 当 那么)
Cucumber的步骤中会包含Given、When、then这些词组,cucumber本身在技术实现上不区分这三个词组,但是在使用上推荐按照词组的意思来使用。
Given-用例开始执行前的一个前置条件,类似与编写代码setup中的一些步骤。
When-用例开始执行的一些关键操作步骤,类似点击元素等。
Then-观察结果,就是平时用例中的验证步骤。
And-一个步骤中如果存在多个Given操作,后面的Given可以用And替代。
But-一个步骤中如果存在多个Then操作,第二个开始后面的Then可以用But替代。
6Cucumber使用
查看cucumber支持的语言 cucumber --i18n help,查看支持语言的关键字 cucumber –i18n zh-CN(目前中文不太会用)。
先跑起来个demo吧
先编写feature文件(即需求,要做的事)
在maven工程的test目录下创建\resources\feature\demo.feature文件
demo.feature
Feature: 验证计算器计算功能
打开计算器进行计算
@CalculatorTest
Scenario: 打开计算器进行计算1+1
Given 打开计算器面板
When 已经输入1并按下+
And 输入 "1"
And 按下=号
Then 等待计算结果
编写代码测试代码(部分术语参考第5大项)
Calculator(测试用例部分)
package com.cucumber.demo;
import cucumber.api.java.en.And;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
public class Calculator {
@Given("^打开计算器面板$")
public void openCalculator() throws Exception {
System.out.println("打开计算器面板");
}
@When("^已经输入1并按下+")
public void alreadyInput1() {
System.out.println("已经输入1并按下+");
}
@And("^输入 \"([^\"]*)\"$")
public void input1(String num) throws Throwable {
System.out.println("输入"+num);
}
@And("^按下=")
public void pressEaualButton(){
System.out.println("按下=");
}
@Then("^等待计算结果")
public void wait_the_query_result() throws InterruptedException {
System.out.println("等待计算结果");
}
}
RunCukesTest(执行测试部分)
package com.cucumber.demo;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(
features = {"src/test/resources/feature/"},
format = {"pretty", "html:target/cucumber", "json:target/cucumber.json"},
glue = {"com.cucumber"},
tags = {"@CalculatorTest"}
)
public class RunCukesTest {
}
pom文件
xml version="1.0" encoding="UTF-8"?>
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
Cucumber_Test
Cucumber_Test
1.0-SNAPSHOT
UTF-8
info.cukes
cucumber-core
1.2.3
info.cukes
cucumber-java
1.2.3
junit
junit
4.12
info.cukes
cucumber-junit
1.2.3
org.seleniumhq.selenium
selenium-java
2.47.1
org.apache.maven.plugins
maven-surefire-plugin
2.12.4
org.picocontainer
picocontainer
2.14
info.cukes
cucumber-picocontainer
1.2.3
org.apache.maven.plugins
maven-surefire-plugin
once
-Dfile.encoding=UTF-8
7如何执行
选中RunCukesTest,右键run test即可
maven test
8运行结果
9测试报告
10感受
用着不太习惯,正则表达式这个有点烦,测试报告应该可以在扩展,后期再去尝试改造。
优点:个人觉得给人看,逼格很高,层次分明。
参考链接:
https://www.cnblogs.com/dami520/p/3168864.html
https://www.cnblogs.com/nbkhic/p/4874889.html
【向左滑动关注 " 乐迪宝贝屋 " 】
自动化测试框架cucumber_BDD测试框架之Cucumber使用入门相关推荐
- python测试框架untest_Python测试框架之unittest和pytest
目前搜狗商城接口测试框架用的是unittest+HTMLTestRunner,case数有1097条,目前运行一次自动化测试,时长约为30分钟,期望控制在10分钟或者更短的时间内.近期打算重新优化框架 ...
- [Automation] 自动化测试工具和测试框架大集合
8 Open Source Test Automation Tools for Desktop Applications written in WinForms/ WPF: Tool Comment ...
- python nose框架_Python测试框架nose的介绍
下面以一个例子说明nose. 目录结构如下(foo模块以及foo的测试代码): test@local:~$ tree /tmp/foomodule/ /tmp/foomodule/ |-- foo | ...
- 10个自动化测试框架,测试工程师用起来
快速实现质量是必要的,因此质量保证得到了很多关注.为了满足卓越的质量和更快的上市时间的需求,自动化测试将被优先考虑.对于微型.小型和中型企业(SMEs)来说,自动化自身的测试过程是非常必要的,而最关键 ...
- 华为python自动化测试框架_10个自动化测试框架,测试工程师用起来
摘要:快速实现质量是必要的,因此质量保证得到了很多关注.为了满足卓越的质量和更快的上市时间的需求,自动化测试将被优先考虑.对于微型.小型和中型企业(SMEs)来说,自动化自身的测试过程是非常必要的,而 ...
- 自动化测试框架 2019_2019年用于自动化的5个最佳Java测试框架
自动化测试框架 2019 几十年来,Java一直是开发应用程序服务器端层的首选编程语言. 尽管JUnit一直在与开发人员一起帮助他们进行自动化的单元测试,但随着时间的推移和测试的发展,当自动化测试不断 ...
- python测试框架untest_python自动化测试框架unittest
对于刚学习python自动化测试的小伙伴来说,unittest是一个非常适合的框架: 通过unittest,可以管理测试用例的执行,自动生成简单的自动化测试报告: 首先我们尝试编写编写一个最简单的un ...
- 2019年用于自动化的5个最佳Java测试框架
几十年来,Java一直是开发应用程序服务器端层的首选编程语言. 尽管JUnit一直在与开发人员一起帮助他们进行自动化的单元测试,但是随着时间的推移和测试的发展,当自动化测试不断增长时,已经开发了许多基 ...
- 使用python构造大量测试数据_python实例编写(6)--引入unittest测试框架,构造测试集批量测试(以微信统一管理平台为例)...
---恢复内容开始--- 一.python单元测试实例介绍 unittest框架又叫PyUnit框架,是python的单元测试框架. 先介绍一个普通的单元测试(不用unittest框架)的实例: 首先 ...
最新文章
- 技术图文:进一步完善自动化交易系统 - 03
- Pytorch的backward()相关理解
- (转载)计算机科学中最重要的32个算法
- isp 图像算法(二)之dead pixel correction坏点矫正
- WinForm 捕获最小化事件
- 计算机的主存储器可以分为哪两类,2017年计算机应用基础模拟试题「答案」(2)...
- 3/100. Merge Two Binary Trees
- modern android5.1,Modern摩登印
- 如何删除在Github中创建的项目
- TJUSCSST第二次作业
- 【代码源 Div1 - 109】#454. Minimum Or Spanning Tree(最小生成树,边权按位或,贪心,并查集) CF1624G
- Java 连接SQLite数据库
- html给td内容加删除线,【原创】tr上加删除线-且满足一个页面多表格
- 嵌入式软件测试参考书籍
- 关于计算机信息技术论文,信息技术论文
- UWB人员定位解决方案
- 2022山东省安全员C证复训题库模拟考试平台操作
- oracle使用text类型,oracle数据库中text类型用什么类型表示
- 解决SQL Server报错:229、262、5123
- 20款前端特效动画及源码
热门文章
- SQL Server中的命名规范(个人使用)
- 导入eclipse工程到Android Studio中
- 1. vi 与 vim 有什么区别呢,它们之间有什么关系?
- linux设置ulimit值永久生效
- 上海往事之参加上海分公司组织的TeamBuilding
- elasticsearch mapping
- Pure-FTPd服务器
- oracle for 记录数,可视化工具dbForge Documenter for Oracle全新上线!让您轻松记录Oracle数据库...
- 把变量赋值给寄存器_用C语言对DSP的寄存器进行操作?
- sqlserⅴer随机函数_SQL server 随机数函数