动态读取 Excel 中的 Cucumber 标签并在运行时传入测试执行

胖枫君_5965

胖枫君_5965

2026-05-20

392人浏览

原创

动态读取 Excel 中的 Cucumber 标签并在运行时传入测试执行

本文介绍如何绕过 Cucumber Runner 类中 @CucumberOptions 的静态限制,通过 Java 主程序动态读取 Excel 中存储的标签(如 @Login),并将其注入到 Cucumber 测试执行环境中,实现标签驱动的灵活测试触发。

本文介绍如何绕过 cucumber runner 类中 `@cucumberoptions` 的静态限制,通过 java 主程序动态读取 excel 中存储的标签(如 `@login`),并将其注入到 cucumber 测试执行环境中,实现标签驱动的灵活测试触发。

在标准的 Cucumber-JVM + JUnit 框架中,@CucumberOptions 注解中的 tags 属性必须在编译期确定,无法在运行时通过变量动态赋值。这是因为 JUnit 在加载 Runner 类时会提前解析注解,而此时 ExcelReader 等业务逻辑尚未执行。因此,直接在 @CucumberOptions(tags = tag) 中使用字符串变量会导致编译错误或无效行为。

✅ 正确的解决方案是:弃用 JUnit IDE 运行方式,改用 Java main 方法 + JUnitCore API 手动触发测试,并通过系统属性 cucumber.options 动态设置参数。

✅ 实现步骤详解

1. 移除 Runner 类中的静态 tags 配置

确保 Runner.java 中不声明 tags,仅保留必需配置:

@RunWith(Cucumber.class)
@CucumberOptions(
    features = "src/test/resources/Features",
    glue = "stepdefs", // 替换为你的 step definition 包名
    monochrome = true,
    plugin = {"pretty", "html:target/cucumber-report"}
)
public class Runner {
}

⚠️ 注意:glue 值需与实际 Step Definition 类所在包一致;plugin 可按需增删。

2. 编写主启动类(支持动态标签注入)

创建 Main.java,在 main 方法中完成三件事:

Excel XLSX Formula Cleanup
Excel XLSX Formula Cleanup

诊断并修复涉及公式、命名范围、Power Query 刷新、数据透视表、VBA/宏保存等问题的 Microsoft Excel XLSX 工作簿

下载
  • 调用 ExcelReader 获取目标标签(例如 "@Login" 或 "@Smoke and not @WIP");
  • 通过 System.setProperty("cucumber.options", "...") 设置运行时参数;
  • 使用 JUnitCore 启动 Runner。
import org.junit.internal.TextListener;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;

public class Main {
    public static void main(String[] args) {
        // ✅ 步骤1:从 Excel 动态读取标签(示例中简化为硬编码,实际替换为 ExcelReader.readTag())
        String tagFromExcel = new ExcelReader().readTag("Sheet1", "A1"); // 假设 A1 单元格存 "@Login"

        // ✅ 步骤2:构造 cucumber.options 字符串(支持多标签、逻辑组合)
        String cucumberOptions = "--tags " + tagFromExcel;
        System.setProperty("cucumber.options", cucumberOptions);

        // ✅ 步骤3:手动运行 Runner 类
        JUnitCore junit = new JUnitCore();
        junit.addListener(new TextListener(System.out));
        Result result = junit.run(Runner.class);

        // 可选:输出执行摘要
        System.out.printf("执行完毕:成功 %d,失败 %d%n", 
            result.getRunCount() - result.getFailureCount(), 
            result.getFailureCount());
    }
}

? 提示:ExcelReader 需自行实现(如基于 Apache POI),确保返回格式合规(如 @Smoke、"@Regression and not @Ignored")。注意空格与引号——Cucumber CLI 要求标签字符串整体加引号(如 --tags "@Smoke"),但 System.setProperty 中无需额外包裹双引号,直接拼接即可。

3. 验证 Feature 文件与 Step Definition

确保 Feature 文件中已正确定义对应标签:

Feature: 用户认证流程

  @Login
  Scenario: 成功登录系统
    Given 用户打开登录页
    When 输入有效用户名和密码
    Then 系统跳转至主页

  @Logout
  Scenario: 安全退出系统
    Given 用户已登录
    When 点击退出按钮
    Then 系统返回登录页

Step Definition 示例(stepdefs/StepDefs.java):

public class StepDefs {
    @Given("用户打开登录页")
    public void 用户打开登录页() {
        System.out.println("→ 打开登录页");
    }

    @When("输入有效用户名和密码")
    public void 输入有效用户名和密码() {
        System.out.println("→ 执行登录操作");
    }

    @Then("系统跳转至主页")
    public void 系统跳转至主页() {
        System.out.println("✓ 登录成功");
    }
}

? 关键注意事项

  • 环境兼容性:该方案适用于 Cucumber-JVM 4.x / 5.x / 6.x(cucumber.options 仍被支持),但在 Cucumber 7+ 中已被弃用,推荐迁移至 Cucumber CLI Options 或 cucumber.properties 文件方式。
  • IDE 运行方式变更:不再右键 → Run As > JUnit Test,而是 Run As > Java Application 执行 Main.main()。
  • Maven 构建集成:可通过 maven-exec-plugin 绑定 exec:java 目标,将 Main 设为入口类,实现 CI/CD 自动化。
  • 安全性与可维护性:避免在 Excel 中写入恶意标签表达式(如 @Smoke or @All 可能意外扩大范围),建议对读取的标签做白名单校验。

✅ 总结

通过 JUnitCore + System.setProperty("cucumber.options", ...) 组合,我们成功解耦了标签配置与代码编译,实现了“Excel 驱动测试”的核心诉求。该方法轻量、稳定、不依赖外部插件,是 Cucumber 动态标签场景下的经典实践方案。后续可进一步封装为通用测试调度器,支持并发执行多组 Excel 标签任务。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

excel

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

11137

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

8242

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

7132

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1204

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

968

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1436

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2929

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

20211

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1295

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 44.6万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 3.6万人学习