Cucumber行为驱动,
简称BDD,
其核心思想是把自然语言转换成代码;
但在敏捷开发的过程中,
这种东西极大的束缚了测试人员的手脚,
感觉它像封建时代的八股文,
要遵守严格的韵律,
反正我个人十分反感;
就像在做功能测试的时候,
那种基于Excel文档的测试;
自动化测试的目的是解放双手、提高效率,
而不是跳入另外一个坑。

Cucumber行为驱动的本意是想让各方:
如业务人员、运营人员、产品经理、开发工程师和普通用户都参与到测试用例的设计与执行中来,
让各方都能读懂,
所以才规定了严格的语法,
不允许测试人员去修改格式;
但是现实生活中,
其实只有测试人员在做测试工作,
当你的自动化用例达到100个以上时,
你还采用这种结构,
那要写到什么时候?
敏捷开发的过程中,
开发周期短,
测试周期就更短了。
综上所述,
Cucumber不适合甲方公司!

用Maven构建Cucumber依赖:

    <dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<scope>test</scope>
<version>1.2.5</version>
</dependency> <dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-jvm</artifactId>
<version>1.2.5</version>
<type>pom</type>
</dependency> <dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-testng</artifactId>
<version>1.2.4</version>
</dependency> baiduSearch.feature配置文件:


# language: zh-CN

功能: 百度搜索的测试用例
场景大纲: 分别搜索<word>
假如我打开火狐浏览器
当输入百度的网址后,页面跳转到"https://www.baidu.com/"
当输入<word>,点击搜索按钮之后
那么页面标题会变为<result>
同时关闭火狐浏览器
例子:
|word |result |
|Selenium |Selenium_百度搜索 |
|JMeter |JMeter_百度搜索 |
|Appium |Appium_百度搜索 |

这个文件是可以直接运行的,会在控制台输出:

Undefined step: 假如 我打开火狐浏览器

Undefined step: 当 输入百度的网址后,页面跳转到"https://www.baidu.com/"

Undefined step: 当 输入Selenium,点击搜索按钮之后

Undefined step: 那么 页面标题会变为Selenium_百度搜索

Undefined step: 同时 关闭火狐浏览器

Undefined step: 假如 我打开火狐浏览器

Undefined step: 当 输入百度的网址后,页面跳转到"https://www.baidu.com/"

Undefined step: 当 输入JMeter,点击搜索按钮之后

Undefined step: 那么 页面标题会变为JMeter_百度搜索

Undefined step: 同时 关闭火狐浏览器

Undefined step: 假如 我打开火狐浏览器

Undefined step: 当 输入百度的网址后,页面跳转到"https://www.baidu.com/"

Undefined step: 当 输入Appium,点击搜索按钮之后

3 Scenarios (3 undefined)
15 Steps (15 undefined)
0m0.000s

You can implement missing steps with the snippets below:

@假如("^我打开火狐浏览器$")
public void 我打开火狐浏览器() throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}

@当("^输入百度的网址后,页面跳转到\"([^\"]*)\"$")
public void 输入百度的网址后_页面跳转到(String arg1) throws Throwable {
Undefined step: 那么 页面标题会变为Appium_百度搜索

// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}

@当("^输入Selenium,点击搜索按钮之后$")
public void 输入selenium_点击搜索按钮之后() throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}

@那么("^页面标题会变为Selenium_百度搜索$")
public void 页面标题会变为selenium_百度搜索() throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
@那么("^关闭火狐浏览器$")
public void 关闭火狐浏览器() throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}

@当("^输入JMeter,点击搜索按钮之后$")
public void 输入jmeter_点击搜索按钮之后() throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}

@那么("^页面标题会变为JMeter_百度搜索$")
public void 页面标题会变为jmeter_百度搜索() throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}

@当("^输入Appium,点击搜索按钮之后$")
public void 输入appium_点击搜索按钮之后() throws Throwable {
Undefined step: 同时 关闭火狐浏览器

// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}

@那么("^页面标题会变为Appium_百度搜索$")
public void 页面标题会变为appium_百度搜索() throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();}

测试用例类CucumberBaidu.java:

import cucumber.api.java.zh_cn.假如;
import cucumber.api.java.zh_cn.同时;
import cucumber.api.java.zh_cn.当;
import cucumber.api.java.zh_cn.那么;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.testng.Assert; public class CucumberBaidu { private static WebDriver driver; @FindBy(xpath = ".//*[@id='kw']")
private WebElement inputBox;
//输入框 @FindBy(xpath = ".//*[@id='su']")
private WebElement searchButton;
//搜索按钮 @假如("^我打开火狐浏览器$")
public void openFirefox() throws Throwable{
System.setProperty("webdriver.firefox.marionette",
"src/main/resourcec/geckodriver.exe");
driver = new FirefoxDriver();
PageFactory.initElements(driver, this);
driver.manage().window().maximize();
} @当("^输入百度的网址后,页面跳转到\"(.*)\"$")
public void openBaiduHomePage(String url) throws Throwable{
driver.get(url);
//不需要去声明百度首页的地址,因为它会从配置文件里面读取
} @当("^输入(.*),点击搜索按钮之后$")
public void searchChina(String searchWord) throws Throwable{
inputBox.sendKeys(searchWord);
searchButton.click();
Thread.sleep(2000);
} @那么("^页面标题会变为(.*)$")
public void keyword(String searchResult) throws Throwable{
Assert.assertEquals(driver.getTitle(), searchResult);
Thread.sleep(2000);
} @同时("^关闭火狐浏览器$")
public void quit(){
driver.close();
driver.quit();
}
}

驱动类CucumberDriver.java:
import cucumber.api.CucumberOptions;
import cucumber.api.testng.AbstractTestNGCucumberTests; @CucumberOptions(
features = "baiduSearch.feature",
format = {"pretty",
"html:target/cucumber-html-report",
"json:target/cucumber-json-report.json"}
)
/*指定cucumber.feature文件,在工程的根目录下
命令行/控制台输出日志
生成html测试报告
生成json测试报告*/ public class CucumberDriver extends AbstractTestNGCucumberTests { } 运行一把,查看测试报告:



												

讨伐Cucumber行为驱动的更多相关文章

  1. Cucumber 行为驱动开发简介

    Cucumber 是一个能够理解用普通语言 描述的测试用例的支持行为驱动开发(BDD)的自动化测试工具,用Ruby编写,支持Java和.Net等多种开发语言. 现在看看Cucumber中用到的术语 . ...

  2. Cucumber测试驱动开发

     Cucumber是一种BDD实践开发工具,属于敏捷开发的组成部分.      在敏捷开发中,对用户进行需求分析时,不是像传统的P&D的开发方式,首先编写大量的用户需求分析文档,而是通过一个个 ...

  3. 行为驱动:Cucumber + Selenium + Java(一) - 环境搭建

    1.1 什么是行为驱动测试 说起行为驱动,相信很多人听说过. 行为驱动开发-BDD(Behavior Driven Development)是一个诞生于2003年的软件开发理念.其关键思想在于通过与利 ...

  4. 行为驱动:BDD框架之Cucumber初探

    1.cucumber cucumber早在ruby环境下应用广泛,作为BDD框架的先驱,cucumber后来被移植到了多平台,简单来说cucumber是一个测试框架,就像是juint或是rspec一样 ...

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

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

  6. 行为驱动:Cucumber + Selenium + Java(四) - 实现测试用例的参数化

    在上一篇中,我们介绍了Selenium + Cucumber + Java框架下的使用Tags对测试用例分组的实现方法,这一篇我们用数据表格来实现测试用例参数化. 4.1 什么是用例参数化 实际测试中 ...

  7. 行为驱动:Cucumber + Selenium + Java(三) - 使用标签实现测试分组

    在上一篇中,我们写出了Selenium + Cucumber + Java环境下的第一个BDD自动化测试用例,这一篇我们说说怎么用标签对用例进行分组. 3.1 Cucumber标签 实际工作中,我们的 ...

  8. 行为驱动:Cucumber + Selenium + Java(二) - 第一个测试

    在上一篇中,我们搭建好了Selenium + Cucumber + Java的自动化测试环境,这一篇我们就赶紧开始编写我们的第一个BDD测试用例. 2.1 创建features 我们在新建的java项 ...

  9. 行为驱动:Cucumber + Selenium + Java(二) - extentreports 测试报告+jenkins持续集成

    1.extentreports 测试报告 pom文件 <dependency> <groupId>com.vimalselvam</groupId> <art ...

随机推荐

  1. 剑指offer23 从上往下打印二叉树

    没有把队列的头部弹出,出现内存错误:

  2. Android学习笔记_49_Android中自定义属性(attrs.xml,TypedArray的使用)

    做Android布局是件很享受的事,这得益于他良好的xml方式.使用xml可以快速有效的为软件定义界面.可是有时候我们总感觉官方定义的一些基本组件不够用,自定义组件就不可避免了.那么如何才能做到像官方 ...

  3. hadoop 错误

    错误:DataXceiver error processing WRITE_BLOCK operation 2014-05-06 15:21:30,378 ERROR org.apache.hadoo ...

  4. 【OJ-UVa227】

    耗时一周.哭. 本题重在输入输出.所以对英文题目的理解非常重要.看清楚题目,省时省力. 题目要点: 1.开始有5×5的数据,每行仅有5个字符.注意:样例输入中的尾部空格是无法复制的(UVa官网上),其 ...

  5. java的异常分类

    结构关系 throwable error   exception checked异常 runtime异常 checked异常也叫io异常这种异常一般我们会在程序块加入trycatch处理它. runt ...

  6. EventBus 基础篇

    最近在研究RxJava ,突然想起了事件分发另一个强大的框架Eventbus ,并且项目经常用到,特意整理了下. what is Eventbus? 官方的解释为: EventBus is a pub ...

  7. c#冒泡排序算法和快速排序算法

    依次比较相邻的两个数,将小数放在前面,大数放在后面. 第1趟: 首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放 ...

  8. 【TOJ 1545】Hurdles of 110m(动态规划)

    描述 In the year 2008, the 29th Olympic Games will be held in Beijing. This will signify the prosperit ...

  9. 洛谷P3804 【模板】后缀自动机

    题目描述 给定一个只包含小写字母的字符串 SS , 请你求出 SS 的所有出现次数不为 11 的子串的出现次数乘上该子串长度的最大值. 输入输出格式 输入格式: 一行一个仅包含小写字母的字符串 SS ...

  10. VS中R转义字符处理

    std::string s1 = R"(Name="Hello World ... ")"; std::string s2 = R"-(Name=&q ...