您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
基于Cucumber的BDD自动化测试
 
作者:Gavin
   次浏览      
 2019-11-1
 
编辑推荐:
文章主要介绍了cucumber的相关概念、工作原理,以及cucumber可以通过多少种开发语言来实现与底层驱动的映射等。
本文来自于testerhome,由火龙果软件Luca编辑、推荐。

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

# language :zh-CN
@baidu1
功能:*** 数据驱动百度搜索
场景大纲:*** 数据驱动百度搜索
#界面-首页
假设我在浏览器打开@@@@@https://www.baidu.com/
#界面-输入查询条件
当我通过ID在输入框@@@@@kw@@@@@输入@@@@@<Input>
并且我通过ID点击@@@@@su
#界面-验证查询结果
那么我将会在界面上看到@@@@@<Output>
例子:*** 测试数据
|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的工作原理

说明:

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

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

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

4. cucumber实现web自动化测试

通过前面的讲解,大家明白cucumber实现自动化也是需要底层技术的,底层技术无非就是实现对web 浏览器的驱动,我们使用selenium2 的webDriver来实现。

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

cucumber github

5. 在idea里面的代码结构

说明:

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;
/**
* Created by Administrator on 2015/10/21.
*/
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来实现脚本的运行。

 
   
次浏览       
相关文章

微服务测试之单元测试
一篇图文带你了解白盒测试用例设计方法
全面的质量保障体系之回归测试策略
人工智能自动化测试探索
相关文档

自动化接口测试实践之路
jenkins持续集成测试
性能测试诊断分析与优化
性能测试实例
相关课程

持续集成测试最佳实践
自动化测试体系建设与最佳实践
测试架构的构建与应用实践
DevOps时代的测试技术与最佳实践