51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1637|回复: 3
打印 上一主题 下一主题

讨伐Cucumber行为驱动

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-1-24 16:09:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
讨伐Cucumber行为驱动
Cucumber行为驱动,
简称BDD,
其核心思想是把自然语言转换成代码;
但在敏捷开发的过程中,
这种东西极大的束缚了测试人员的手脚,
感觉它像封建时代的八股文,
要遵守严格的韵律,
反正我个人十分反感;
就像在做功能测试的时候,
那种基于Excel文档的测试;
自动化测试的目的是解放双手、提高效率,
而不是跳入另外一个坑。

用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 {

}


运行一把,查看测试报告:




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2018-1-27 08:48:40 | 只看该作者
讨论一下么,cucumber也在我们自动化框架选型的范围。试用了下,用例的可读性是增强了很多,一目了然;但cucumber不支持原生的testng、spring等框架,感觉灵活性降低了很多。要编写用例需要告诉测试人员如何遵循语句的规范,就像在学习一门外语,且必须语法、格式正确才能正确理解。
回复 支持 反对

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

4#
发表于 2018-2-24 15:59:20 | 只看该作者
这种脑残玩意 不知道是谁设计出来 脱离了模块化的自动化案例都是白瞎。还有他这种所谓的规则复杂度 真的比直接写一段代码来的容易吗?还案例清晰度? 案例数量级一多 你会一个一个看里面过程吗?1000个案例 你知道 一个页面的修改 会影响到多少个案例吗? 还有这种方式的自动化 对于UI层面对象的支持度 可能真的就是个笑话
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-26 06:18 , Processed in 0.066134 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表