You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何多次运行测试用例?测试套件(suites)配置解析

测试套件配置解析与多次运行测试用例实现方法

我来帮你拆解这份测试套件(suites)的配置,再聊聊几种实用的测试用例多次运行实现方式。

一、现有测试套件配置解析

先把完整的配置代码贴出来方便理解:

suites: {
  dev: ['./test/show-file.spec.js'],
  smoke: [
    // './test/template.spec.js',
    './test/form-validation.spec.js',
    './test/upload.spec.js',
    './test/empty-folder.spec.js',
    './test/versions.spec.js',
    './test/search.spec.js',
    './test/archive.spec.js',
    './test/move.spec.js',
    './test/copy.spec.js',
    './test/tags.spec.js',
    './test/share.spec.js',
    // './test/signup.spec.js',
    // './test/show-file.spec.js',
  ],
  recovery: [
    './test/show-file.spec.js',
    './test/show-file.spec.js',
    './test/show-file.spec.js'
  ]
}

1. dev 套件

这是一个轻量的开发测试集合,只包含show-file.spec.js一个测试文件,应该是给开发人员在日常开发时快速验证文件展示核心功能用的,跑起来快、针对性强。

2. smoke 套件

这是冒烟测试集合,涵盖了产品核心流程的测试用例:表单验证、文件上传、空文件夹处理、版本管理、搜索、归档、文件移动/复制、标签管理、分享功能等,都是上线前必须确保正常的基础功能。
被注释掉的几个用例(template.spec.jssignup.spec.jsshow-file.spec.js)应该是暂时不需要纳入冒烟测试的,可能是还在开发迭代、或者不属于当前冒烟测试的核心范围。

3. recovery 套件

这个套件里重复添加了多次show-file.spec.js,看起来你是想让这个测试用例重复运行,但这种写法其实是把同一个文件多次加入测试集合,本质上是依赖测试框架多次执行该文件,但这种方式不够灵活,后面会讲更优的方案。

二、实现测试用例多次运行的常用方法

根据不同的测试框架(比如Mocha、Jest、Cypress),有几种更实用的方式:

方法1:利用测试框架的内置/插件式重复运行机制

这是最推荐的方式,不需要修改代码或配置,直接通过命令行参数或插件实现:

  • Mocha:可以安装mocha-repeat插件,然后通过命令指定重复次数,比如要把dev套件重复运行5次:
    mocha --suite dev --repeat 5
    
  • Jest:可以使用jest-repeat插件,或者直接用命令行参数指定测试文件并重复执行:
    jest --testPathPattern=show-file.spec.js --runInBand --repeat=5
    
  • Cypress:Cypress自带重试机制,如果你想让单个用例重复运行(包括失败重试),可以在命令行指定:
    cypress run --spec ./test/show-file.spec.js --retries 4
    
    这里的--retries 4是指失败后重试4次,加上第一次执行,总共会运行5次;如果不管失败与否都要固定重复N次,可以配合第三方插件cypress-repeat

方法2:在测试代码内部实现细粒度循环

如果需要针对单个测试用例(而不是整个文件)重复运行,或者需要在每次运行前做一些自定义的前置操作,可以在spec文件里用循环包裹测试逻辑:

describe('文件展示功能测试集合', () => {
  // 定义要重复的次数
  const repeatTimes = 5;

  Array.from({ length: repeatTimes }).forEach((_, index) => {
    it(`第${index + 1}次执行:验证文件正常展示`, () => {
      // 这里写你的测试逻辑,比如访问页面、断言元素存在等
      cy.visit('/files/123');
      cy.get('.file-content').should('be.visible');
    });
  });
});

这种方式的好处是可以精准控制哪些用例需要重复运行,还能在每次循环里加入差异化的逻辑(比如不同的测试数据)。

方法3:修改套件配置(不推荐)

就像你在recovery套件里做的那样,重复添加同一个测试文件到数组里:

suites: {
  recovery: [
    './test/show-file.spec.js',
    './test/show-file.spec.js',
    './test/show-file.spec.js',
    './test/show-file.spec.js',
    './test/show-file.spec.js'
  ]
}

但这种方式的缺点很明显:调整次数需要修改配置文件,不够灵活;如果文件路径变更,要修改多处;部分测试框架会缓存测试文件,可能不会真正重复执行,所以除非是临时测试,否则不推荐这种写法。

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

火山引擎 最新活动