如何自动删除每个失败的赛普拉斯测试?

How to automatically delete every failing Cypress test?

我继承了一个大型的、过时的存储库,其中包含一组 Cypress e2e 测试,这些测试累计需要几天才能完成 运行。我需要 运行 测试,然后删除失败的测试。根据我目前的经验,大约 80% 的测试都失败了。因此,这项任务的规模很快就会变得难以手动处理。

理想情况下,解决方案是单个 bash 脚本。想到的另一种方法是以某种方式将失败测试列表导出到 CSV(我一直无法弄清楚如何做)然后以某种方式以编程方式删除该列表中的每个文件。我正在使用 VSCode 以防有可以提供帮助的插件。

还有一个次要问题,就是 运行 快速完成所有测试会导致我 运行 内存不足。如果有某种方法可以删除测试 ,然后 ,这样我的整个任务就可以通过一个 bash 脚本完成,那就太棒了。但如果这不可能,我可以 运行 手动测试。

现在,我只是通过将终端输出直接复制到文本文件来访问失败测试列表。这很容易以编程方式完成,但输出甚至没有以易于提取的方式列出文件名。下面的示例(请忽略一些奇怪的格式更改,因为我为此 post 匿名了文件名):

最好的方法是什么?

将失败测试列表导出到 CSV - 当您通过 Cypress module API 运行 测试时,您正在 运行 将它们连接到一个节点脚本中,可以访问每个测试结果和 fs 以写出结果。

这是基本概念

// e2e-run-tests.js
const cypress = require('cypress')
const fs = require('fs')

cypress
  .run({
    // the path is relative to the current working directory
    spec: './cypress/integration/**/*.spec.js',
  })
  .then((results) => {
    console.log(results)
    const tests = results.runs[0].tests
    const fails = tests
      .filter(test => test.state === 'failed')
      .map(test => test.title.join(' - '))     // concat suite and test titles
    fs.writeFileSync('failed-tests.txt', fails)
  })
  .catch((err) => {
    console.error(err)
  })

自动删除测试就像玩上膛的枪一样。

更好的是,一旦有了列表,您就可以使用 cypress-select-tests

来防止再次 运行ning 失败
// cypress/plugins/index.js

const selectTests = require('cypress-select-tests')

const failures = require('./failed-tests.txt')

// return test names you want to run
const pickTests = (filename, foundTests, cypressConfig) => {
  // found tests will be names of the tests found in "filename" spec
  // it is a list of names, each name an Array of strings
  // ['suite 1', 'suite 2', ..., 'test name']

  return foundTests.filter(fullTestName => {
    return !failures.includes(fullTestName)
  })
}

module.exports = (on, config) => {
  on('file:preprocessor', selectTests(config, pickTests))
}