如何自动删除每个失败的赛普拉斯测试?
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))
}
我继承了一个大型的、过时的存储库,其中包含一组 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))
}