讨伐Cucumber行为驱动
阅读原文时间:2023年07月16日阅读:1

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

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

}

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

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章