
在 Cucumber 测试中,理想情况下,每个 Scenario 都应该独立运行,互不依赖。然而,在某些特定情况下,可能需要在不同的 Scenario 之间共享数据。虽然直接在 Scenario 之间传递变量通常是不推荐的做法,因为它会增加测试的复杂性和脆弱性,但本文将介绍一种实现方法,并提供更佳的替代方案。
假设你希望在一个 Scenario 中创建一个文件夹,然后在另一个 Scenario 中在该文件夹内创建子文件夹。以下是一种使用全局变量来实现此目的的方法:
public class MyFeatureClass {
private String folderName = "";
private String folderUuid = ""; // 用于存储文件夹 UUID
@When("^I create folder with \"([^\"]*)\" name api$")
public void createFolder(String name) {
// ... (省略 RestAssured 请求代码) ...
// 假设 getJsonPath(response, "uuid") 返回新创建文件夹的 UUID
folderUuid = getJsonPath(response, "uuid");
folderName = name; // 存储文件夹名称
}
@When("^I send create inside the folder with \"([^\"]*)\" name api$")
public void createInsideFolder(String name) {
// 使用 "folderName" 和 "folderUuid"
String uuid = folderUuid; // 从全局变量获取文件夹 UUID
// ... (省略 RestAssured 请求代码,并使用 folderUuid 作为 parentFolderUuid) ...
}
}注意事项:
更佳实践:使用 Background
Cucumber 提供了 Background 关键字,用于定义在每个 Scenario 之前运行的步骤。这是一种更安全、更清晰的方式来初始化共享状态。
在 .feature 文件中,你可以添加一个 Background:
Feature: Test Folder Creation
Background: Create a base folder
Given I create folder with "BaseFolder" name api
Scenario: Create subfolder inside the base folder
When I send create inside the folder with "SubFolder" name api
Then the subfolder should be created successfully在这种情况下,"I create folder with "BaseFolder" name api" 这个步骤会在每个 Scenario 之前运行,确保在创建子文件夹之前,基础文件夹已经存在。 在 Background步骤中,你可以将必要的信息存储到全局变量,或者更好的方式是,使用依赖注入框架(如 PicoContainer 或 Spring)来管理测试上下文,并在需要时将这些信息注入到 Step Definition 类中。
总结:
虽然可以使用全局变量在 Cucumber Scenario 之间传递数据,但强烈建议避免这种做法,因为它会降低测试的质量。使用 Background 关键字来初始化共享状态,或者使用依赖注入框架来管理测试上下文,是更佳的替代方案。始终记住,保持 Scenario 的独立性是编写可靠、可维护的 Cucumber 测试的关键。
以上就是在 Cucumber 中跨 Scenario 传递变量:一种不推荐但可行的方案的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号