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

Cypress 10:重复配置的feature文件仅运行一次,如何按配置次数执行?

让指定Feature文件重复执行多次的解决方案

问题描述

我希望feature1.feature能按照cypress.config.js中的配置运行三次,但执行npx cypress run --config-file cypress.config.js时,该文件仅运行一次。是否可以通过更新配置文件让feature1.feature按配置次数全部执行?

提供的配置文件如下:

const { defineConfig } = require("cypress");
const cucumber = require("cypress-cucumber-preprocessor").default;
module.exports = defineConfig({
  env: {
    url: "https://dev-abc.com/",
  },
  
  e2e: { 
    setupNodeEvents(on, config) {
      on('file:preprocessor', cucumber())
    },
    
    specPattern: 
    [ 
      "**/feature1.feature",
      "**/feature2.feature",
      "**/feature3.feature",
      "**/feature1.feature",
      "**/feature4.feature",
      "**/feature1.feature"
    ],
     testIsolation: false 
    },
  defaultCommandTimeout: 10000,
videosFolder: 'cypress/reports/folder1/mochawesome/videos',
screenshotsFolder: 'cypress/reports/folder1/mochawesome/screenshots',
  reporter: "mochawesome",
  sample: "value",
  reporterOptions: {
reportDir: 'cypress/reports/folder1/mochawesome/logs',
    overwrite: false,
    html: false,
    json: true,
  },
});

原因分析

Cypress会自动对specPattern中的文件路径进行去重处理,所以即使你在数组中多次添加同一个Feature文件路径,Cypress也只会执行一次该文件。

可行解决方案

方案1:动态修改Spec列表(配置文件内实现)

通过setupNodeEvents中的before:run钩子,手动修改spec列表,重复添加目标Feature文件,绕过Cypress的自动去重:

const { defineConfig } = require("cypress");
const cucumber = require("cypress-cucumber-preprocessor").default;

module.exports = defineConfig({
  env: {
    url: "https://dev-abc.com/",
  },
  
  e2e: { 
    setupNodeEvents(on, config) {
      on('file:preprocessor', cucumber());
      
      // 在运行前修改spec列表,重复添加feature1
      on('before:run', () => {
        // 筛选出所有非feature1的spec
        const nonFeature1Specs = config.specs.filter(spec => !spec.includes('feature1.feature'));
        // 找到feature1的路径
        const feature1Spec = config.specs.find(spec => spec.includes('feature1.feature'));
        
        if (feature1Spec) {
          // 重新组合spec列表:其他spec + 三次feature1
          config.specs = [
            ...nonFeature1Specs,
            feature1Spec,
            feature1Spec,
            feature1Spec
          ];
        }
      });
    },
    
    specPattern: 
    [ 
      "**/feature1.feature",
      "**/feature2.feature",
      "**/feature3.feature",
      "**/feature4.feature"
    ],
    testIsolation: false 
  },
  defaultCommandTimeout: 10000,
  videosFolder: 'cypress/reports/folder1/mochawesome/videos',
  screenshotsFolder: 'cypress/reports/folder1/mochawesome/screenshots',
  reporter: "mochawesome",
  sample: "value",
  reporterOptions: {
    reportDir: 'cypress/reports/folder1/mochawesome/logs',
    overwrite: false,
    html: false,
    json: true,
  },
});

方案2:命令行循环执行

如果不想修改配置文件,可通过命令行分两次执行:先运行其他Feature文件,再循环三次运行feature1.feature:

# 执行除feature1外的所有指定Feature文件
npx cypress run --config-file cypress.config.js --spec "**/feature2.feature,**/feature3.feature,**/feature4.feature"

# 循环三次执行feature1.feature
for i in {1..3}; do 
  npx cypress run --config-file cypress.config.js --spec "**/feature1.feature"
done

方案3:复制Feature内部场景

若允许修改feature1.feature文件,可将文件内的所有场景复制三次,这样Cypress会自动执行三次场景,达到重复运行整个文件的效果。

注意事项

  • 动态修改spec列表时,确保feature1.feature的路径匹配正确,避免找不到文件
  • 命令行循环执行会每次重启Cypress,执行时间会有所增加
  • 由于开启了testIsolation: false,重复执行时需注意测试状态的独立性,避免数据污染

内容的提问来源于stack exchange,提问作者Gowtham P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 14:54:53