淘先锋技术网

首页 1 2 3 4 5 6 7

编辑推荐:

文章主要介绍了cucumber的相关概念、工作原理,以及cucumber可以通过多少种开发语言来实现与底层驱动的映射等。

本文来自于testerhome,由火龙果软件Luca编辑、推荐。

1. 活文档,一段代码认识cucumber

# language :zh-CN

@baidu1

功能:*** 数据驱动百度搜索

场景大纲:*** 数据驱动百度搜索

#界面-首页

假设我在浏览器打开@@@@@https://www.baidu.com/

#界面-输入查询条件

当我通过ID在输入框@@@@@kw@@@@@输入@@@@@

并且我通过ID点击@@@@@su

#界面-验证查询结果

那么我将会在界面上看到@@@@@

例子:*** 测试数据

|Input |Output |

|java |java |

|github |github |

说明:

cucumber是基于自然语言的BDD(Behaviour-Driven Development)的测试框架,目前支持的已有42种语言之多,我们目前的看到的就是对中文的支持。

# language :zh-CN,这个就是对支持语言的标记。

@baidu1,这个就是当前脚本的标签tag, tag可以看作是脚本的唯一性标记,可以通过tag唯一的制定脚本进行运行。

功能,就是对脚本覆盖的功能进行文字性的描述。

场景大纲,脚本覆盖的场景描述。

例子, 即为自动化测试的数据驱动。

2. 认识cucumber的关键字

cucumber的原生代码是基于ruby的

$ script/cucumber

--i18n zh-CN

| feature | "功能" |

| background | "背景" |

| scenario | "场景" |

| scenario_outline | "场景大纲" |

| examples | "例子" |

| given | "* ", "假如" |

| when | "* ", "当" |

| then | "* ", "那么" |

| and | "* ", "而且" |

| but | "* ", "但是" |

| given (code) | "假如" |

| when (code) | "当" |

| then (code) | "那么" |

| and (code) | "而且" |

| but (code) | "但是" |

通过这些概念的了解,我们就很容易的能读懂这个脚本了,数据驱动实现百度搜索

3. Cucumber的工作原理

5c1edd5cdd39c96e7682c7b27968010c.png

说明:

面向业务:就是通过自然语言对自动化测试脚本的描述,方便的脚本的阅读与维护。

面向技术:写过selenium自动化测试的都知道我们对系统的每一步操作都会对应一行或多行代码。

cucumber的强大之处就在于把看似不相关的面向业务与面向技术实现了映射。

4. cucumber实现web自动化测试

通过前面的讲解,大家明白cucumber实现自动化也是需要底层技术的,底层技术无非就是实现对web

浏览器的驱动,我们使用selenium2 的webDriver来实现。

通过下面的链接大家可以了解到,cucumber可以通过多少种开发语言来实现与底层驱动的映射。

8985ec227c732e67f581d81f56ba4814.png

5. 在idea里面的代码结构

b911e87839bb86d9d25b1514b92f1282.png

说明:

resources目录是用来存放cucumber的feature脚本文件。

java的package里面是放的是selenium的驱动代码,java与feature的映射代码。

6.代码映射与实现

开篇的脚本回过头来再看一下,这个脚本的特点就是方便阅读,但是单单靠这个脚本是不能把自动化跑起来的,需要底层的driver

来实现,下面这段代码就是与之对应的技术实现代码。

package com.XXXX.autoTest.webApp;

import cucumber.api.java.After;

import cucumber.api.java.Before;

import cucumber.api.java.en.Given;

import cucumber.api.java.en.When;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;

public class StepDefinitions {

private WebDriver driver;

@Before

public void setUp() {

System.setProperty("webdriver.chrome.driver",

"res/chromedriver.exe");

driver = new ChromeDriver();

}

@Given("^我在浏览器打开@@@@@(.*)$")

public void openUrl(String url) {

driver.get(url);

}

@When("^我通过ID在输入框@@@@@(.*)@@@@@输入@@@@@(.*)$")

public void inputById(String id, String value)

{

driver.findElement(By.id(id)).sendKeys(value);

}

@When("^我通过ID点击@@@@@(.*)$")

public void clickById(String id) {

driver.findElement(By.id(id)).click();

}

@After

public void tearDown() {

driver.quit();

}

}

通过对照这段代码与开篇的脚本大家不难发现,两者的对应是靠java的注解来匹配的。

7.运行代码

java代码的要集成junit或testng来实现脚本的运行。

21b170ede37e99ac78b00acd6eb6b141.png