一.简介
Cucumber 是一个能够理解用普通语言描述的测试用例的行为驱动开发(BDD)的自动化测试工具,,用Ruby**编写,支持Java和·Net等多种开发语言。
二.Cucumber三大组成
1、由Features、Step_definitions、Cucumber command组成
2.Features
- 基于Gherkin。支持语言:# language: en (zh-CN)等
- Features文件必须以.features命名。
- 包含title,多个scenarios,每个scenario包含多个step。
3.Step_definitions
- Step定义必须以关键字Given,When,Then,And开始,根据正则匹配对应的关键字
- 根据feature文件中定义的step编写对应的测试代码。
4.Cucumber command
- 运行*.feature文件。cucumber会分析feature文件中定义的step,然后去step -definitions寻找相匹配的step,执行step中的代码
- 运行结果以html的形式保存,fail的情况查看对应log日志
三.cucumber开发过程
1.首先使用cucumber原型Maven插件创建一个新的项目目录
mvn archetype:generate -DarchetypeGroupId=io.cucumber -DarchetypeArtifactId=cucumber-archetype -DarchetypeVersion=6.10.4 -DgroupId=hellocucumber -DartifactId=hellocucumber -Dpackage=hellocucumber -Dversion=1.0.0-SNAPSHOT -DinteractiveMode=false
2、创建feature文件,包括feature,scenarios和step
Feature: Is it Friday yet?
Everybody wants to know when it's Friday
Scenario: Sunday isn't Friday
Given today is Sunday
When I ask whether it's Friday yet
Then I should be told "Nope"
3.创建step_definitions
package hellocucumber;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
import static org.junit.Assert.*;
class IsItFriday {
static String isItFriday(String today) {
return "Nope";
}
}
public class StepDefinition {
private String today;
private String actualAnswer;
@Given("^today is Sunday$")
public void today_is_Sunday() {
today = "Sunday";
}
@When("^I ask whether it's Friday yet$")
public void i_ask_whether_is_s_Friday_yet() {
actualAnswer = IsItFriday.isItFriday(today);
}
@Then("^I should be told \"([^\"]*)\"$")
public void i_should_be_told(String expectedAnswer) {
assertEquals(expectedAnswer, actualAnswer);
}
}
3.Gherkin方法
- Feature (功能)-------------test suite (测试用例集)
- Scenario(情景)-----------test case (测试用例)
- Scenario Outline (or Scenario Template):如下,和examples更配哦,多用于逻辑相同时,多组参数传参
Scenario Outline: eating
Given there are <start> cucumbers
When I eat <eat> cucumbers
Then I should have <left> cucumbers
Examples:
| start | eat | left |
| 12 | 5 | 7 |
| 20 | 5 | 15 |
- Given(给定)-------------setup(创建测试所需环境)
- When(当)----------------test(触发被测事件)
- Then(则)-----------------assert(断言,验证结果)
- Background(背景):您会发现自己在一个功能的所有场景中重复相同的给定步骤,因为它在每个场景中都是重复的,这表明这些步骤对于描述场景不是必需的;它们是附带的细节。您可以通过将这些给定的步骤分组到background部分,将它们移动到后台。
- And(or But):如果你有连续的“给定”、“何时”或“然后”
- “”"(定义多行字符串):方便地将较大的文本段传递给步骤定义
- |(用来定义表格):数据表便于将值列表传递给步骤定义