• 讨伐Cucumber行为驱动


    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 {

    }


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

    
    

    
    
    
    
  • 相关阅读:
    深入分析Spring之IOC之加载BeanDefinition案例详解
    JDK10的新特性:var和匿名类如何运用?正确的案例讲解
    SpringMVC中如何获取请求参数?案例详解
    如何用Spring Boot集成Ehcache缓存,教你三招搞定
    基础练习-4.数列特征
    基础练习-3.字母图形
    基础练习-2. 01字串
    基础练习-1.闰年判断
    入门训练-4. Fibonacci数列
    入门训练-3.圆的面积
  • 原文地址:https://www.cnblogs.com/yjlch1016/p/8325187.html
Copyright © 2020-2023  润新知