You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于配置文件跳过Cucumber中无需执行的测试场景

问题:数据迁移测试如何基于配置自动跳过未配置的场景

我们有一套数据迁移系统,可将不同源端的数据迁移到目标端,例如从Oracle到Db2、从Postgres到Kafka、从MySQL到Hadoop等。

我们的feature文件中包含如下逻辑:

Scenario: Test data migraiton
  Given I have the following source to target mapping
    | source   | target |
    | Oracle   | Db2    |
    | Postgres | Kafka  |
    | MySql    | Hadoop |
  When I try to run migration basic test
  Then I get abc
  ...
  Then I get xyz

如果用户新增了Oracle源端相关代码,在代码合入前不需要运行全量测试套件。因此我们计划所有用户共用同一份feature文件,提供配置文件供用户调整需关注的数据库,仅运行对应数据库的测试。

配置文件示例如下:

books:
  Oracle:
    credentials:<database credentials>
    url:<url>
  Db2:
    credentials:<database credentials>
    url:<url>

注意:上述示例配置缺少Kafka、Hadoop、MySQL、Postgres的相关信息。

而构建系统需要运行全量测试套件,使用完整的configuration.yaml文件即可满足该需求。

我们希望找到高效的实现方案,不需要到处添加if判断校验当前{source,target}组合是否在configuration.yaml中定义,若未定义则跳过对应组合的测试。


解决方案

你这个场景通过改造基础步骤的底层逻辑即可实现,完全不需要在业务测试代码中添加冗余判断,具体实现如下:

核心实现方案

  • 不需要修改现有Feature文件内容,仅调整I have the following source to target mapping这个公共步骤的实现逻辑:
    1. 步骤执行前优先加载当前环境的configuration.yaml配置,提取books节点下所有已配置的数据库名称集合
    2. 遍历Feature文件中传入的源目映射表,仅保留source和target都属于上述已配置数据库集合的组合
    3. 将过滤后的有效组合存入测试上下文,后续的When、Then步骤仅针对这些有效组合循环执行
  • 配置适配逻辑天然满足不同场景需求:
    • 开发人员本地测试时,仅在配置文件中保留自己需要测试的数据库信息,过滤后只会执行对应源目组合的测试
    • 构建系统执行全量测试时,使用包含所有数据库配置的完整yaml文件,所有源目组合都会被保留,自动执行全量测试

可选优化(适配单端改动测试)

如果需要支持仅测试单个源端/目标端的场景(比如仅修改了Oracle源端的代码,需要执行所有Oracle作为源的迁移测试),可以结合Cucumber的标签功能实现:

  1. 给每个测试组合或者Scenario打上对应标签,例如@Oracle、@Db2、@Oracle_to_Db2
  2. 新增全局Before Hook,测试执行前读取配置的数据库集合,如果当前Scenario的标签没有匹配到配置中的数据库,直接调用测试框架的跳过方法终止当前场景执行即可,不需要改动现有业务测试逻辑

内容的提问来源于stack exchange,提问作者Sunny Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:54:02