📖 前言:Cucumber框架是行为驱动(BDD)框架的一种,通过自然语言站在功能使用者视角,描述编写测试用例。简单来说就是通过feature文件编写脚本,脚本对应java写的方法,会有一个启动器配置对应的规则,按照指定规则执行对应的脚本。
目录
- 🕒 1. 行为驱动(BDD)
- 🕘 1.1 什么是BDD
- 🕘 1.2 BDD与TDD
- 🕘 1.3 BDD与敏捷
- 🕒 2. Cucumber
- 🕘 2.1 Gherkin
- 🕘 2.2 步骤定义(step definitions)
- 🕘 2.3 场景示例
- 🕒 3. 项目实战
🕒 1. 行为驱动(BDD)
🕘 1.1 什么是BDD
BDD(Behaviour-Driven Development)是一种软件团队工作的方式,通过以下方式缩小业务人员和技术人员之间的差距:
- 鼓励跨角色协作,以建立对要解决问题的共同理解
- 通过快速、小规模的迭代来增加反馈和价值流动
- 生成自动检查系统行为的系统文档
我们通过围绕具体的、现实世界的示例进行协作工作来实现这一点,这些示例说明了我们希望系统如何表现。我们使用这些示例从概念到实现进行指导,在持续协作的过程中进行。
🕘 1.2 BDD与TDD
测试驱动开发(TDD, Test-Driven Development)是一种软件开发方法,开发人员在编写实际代码之前先编写测试,通过不断的测试和重构来确保代码的正确性。行为驱动开发(BDD)则扩展了TDD,强调通过自然语言编写的场景来描述和验证系统的行为,使其对所有利益相关者都可理解。BDD不仅关注代码的正确性,还关注系统是否符合用户需求。
特点 | BDD(行为驱动开发) | TDD(测试驱动开发) |
---|---|---|
目标 | 确保系统行为符合用户需求 | 确保代码在细粒度级别上的正确性 |
方法 | 使用自然语言编写场景,描述和验证系统行为 | 在编写实际代码之前先编写测试,遵循“红-绿-重构”循环 |
参与者 | 开发人员、QA工程师、测试人员和非技术利益相关者 | 开发人员和QA工程师 |
语言 | 自然语言(如Gherkin) | 编程语言 |
🕘 1.3 BDD与敏捷
BDD是一种敏捷软件开发的实践,它鼓励软件项目中的所有利益相关者——包括开发人员、测试人员和业务人员——一起参与到软件的行为的定义和验证中来。BDD强调通过使用一种称为“用户故事”的技术来理解软件的行为,用户故事描述了软件的某个功能对用户的价值。
BDD是一种敏捷软件开发实践,旨在鼓励开发人员、测试人员和业务人员等所有利益相关者共同参与定义和验证软件行为。BDD通过“用户故事”来理解和描述软件的行为,确保每个功能都能为用户带来实际价值。
🕒 2. Cucumber
🔎 Cucumber官网文档
🕘 2.1 Gherkin
Gherkin是一组语法规则,使纯文本结构化,以便Cucumber理解。Gherkin有多个用途:
- 明确的可执行规范
- 使用Cucumber进行自动化测试
- 记录系统的实际行为
Cucumber语法在许多语言中有本地化处理,这里就使用英语即可。Gherkin文档存储在.feature文本文件中,通常与软件一起在源代码管理中进行版本控制。
关键字 | 描述 |
---|---|
Feature | 描述功能的名称和简要说明 |
Scenario | 描述具体的测试场景 |
Given | 描述场景的初始上下文或前提条件 |
When | 描述触发的动作或事件 |
Then | 描述预期的结果或输出 |
And | 用于连接多个Given、When或Then步骤 |
But | 用于连接多个Given、When或Then步骤,表示例外情况 |
Background | 在每个场景之前运行的步骤,用于设置通用的前提条件 |
Scenario Outline | 描述具有多个示例的场景模板 |
Examples | 为Scenario Outline提供具体的示例数据 |
🕘 2.2 步骤定义(step definitions)
步骤定义将Gherkin步骤连接到编程代码。步骤定义执行步骤应执行的操作。因此,步骤定义将规范硬连接到实现。
🕘 2.3 场景示例
Feature: Is it Friday yet?Everybody wants to know when it's FridayScenario: Today is FridayGiven today is FridayWhen I ask whether it's Friday yetThen I should be told "Yes"Scenario: Today is not FridayGiven today is MondayWhen I ask whether it's Friday yetThen I should be told "No"
package hellocucumber;import io.cucumber.java.en.Given;
import io.cucumber.java.en.When;
import io.cucumber.java.en.Then;
import static org.junit.jupiter.api.Assertions.*;class IsItFriday {static String isItFriday(String today) {return "Friday".equals(today) ? "Yes" : "No";}
}public class StepDefinitions {private String today;private String actualAnswer;@Given("today is {string}")public void today_is(String today) {this.today = today;}@When("I ask whether it's Friday yet")public void i_ask_whether_it_s_Friday_yet() {actualAnswer = IsItFriday.isItFriday(today);}@Then("I should be told {string}")public void i_should_be_told(String expectedAnswer) {assertEquals(expectedAnswer, actualAnswer);}
}
Gherkin文件:描述了两个场景:
- 今天是星期五:当今天是星期五时,询问是否是星期五,预期回答是“是”。
- 今天不是星期五:当今天是星期一时,询问是否是星期五,预期回答是“否”。
步骤定义:文件包含了实现这些场景的Java代码:
- @Given:设置今天的日期。
- @When:询问是否是星期五。
- @Then:验证回答是否符合预期。
项目结构如下:
src
└── test├── java│ └── hellocucumber│ └── StepDefinitions.java└── resources└── hellocucumber└── is_it_friday_yet.feature
通过运行Cucumber测试,可以验证代码是否正确实现了预期的行为。
🕒 3. 项目实战
🔎 Cucumber项目实战
OK,以上就是本期知识点“Cucumber入门”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~
❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页