Cypress 10+如何自动实现类似v9的测试用例筛选运行功能?
Cypress v10实现测试用例搜索筛选的方案
Cypress v10移除了“运行全部测试”按钮,我们通常用「barrel测试」(创建all.spec.cy.js导入所有测试文件)来批量运行测试,但如果想像v9那样通过搜索快速筛选要运行的测试用例,不用手动创建多个barrel文件,有以下几种自动实现的方法:
方法一:利用Cypress GUI自带的文件筛选
Cypress v10的GUI保留了文件搜索功能——在测试文件列表顶部的输入框中直接输入关键词,就能自动筛选出文件名包含该关键词的测试文件,选中后即可运行,效果和v9的搜索筛选一致。
方法二:命令行指定匹配文件
如果习惯用命令行运行测试,可以通过--spec参数指定匹配规则,精准筛选测试文件:
- 筛选文件名包含
login的所有测试文件:
cypress run --spec "cypress/e2e/**/*login*.cy.js"
- 筛选特定目录下的测试文件:
cypress run --spec "cypress/e2e/auth/**/*.cy.js"
方法三:动态生成临时barrel文件
写一个Node.js脚本,根据传入的关键词自动生成临时barrel文件,运行完测试后自动删除,步骤如下:
- 创建脚本文件
generate-temp-barrel.js:
const fs = require('fs'); const path = require('path'); const { execSync } = require('child_process'); // 从命令行获取搜索关键词 const keyword = process.argv[2]; if (!keyword) { console.log('请传入搜索关键词,示例:node generate-temp-barrel.js login'); process.exit(1); } const e2eDir = path.join(__dirname, 'cypress/e2e'); const tempBarrelPath = path.join(e2eDir, 'temp.spec.cy.js'); // 筛选符合条件的测试文件 const matchedFiles = fs.readdirSync(e2eDir) .filter(file => file.endsWith('.cy.js') && file.includes(keyword)) .map(file => `import './${file}';`); // 生成临时barrel文件 const barrelContent = `// 自动生成的临时测试入口 ${matchedFiles.join('\n')}`; fs.writeFileSync(tempBarrelPath, barrelContent); // 启动Cypress GUI运行筛选后的测试 try { execSync('cypress open --spec cypress/e2e/temp.spec.cy.js', { stdio: 'inherit' }); } finally { // 运行结束后删除临时文件 fs.unlinkSync(tempBarrelPath); }
- 运行脚本并传入关键词:
node generate-temp-barrel.js login
方法四:用测试标记(Tags)筛选更细粒度的用例
如果需要筛选单个测试用例而非整个文件,可以借助cypress-grep插件实现标记筛选:
- 安装插件:
npm install cypress-grep --save-dev
- 在
cypress/support/e2e.js中引入插件:
require('cypress-grep')()
- 在测试用例中添加自定义标记:
// test1.spec.cy.js describe('登录模块', { tags: ['auth', 'login'] }, () => { it('用户账号密码登录', { tags: ['positive'] }, () => { // 测试代码 }); it('无效密码登录失败', { tags: ['negative'] }, () => { // 测试代码 }); });
- 筛选运行标记为
login的测试:
- 命令行运行:
cypress run --env grepTags=login
- GUI中搜索框输入
@login,即可筛选出带该标记的所有测试用例。
内容的提问来源于stack exchange,提问作者Florence.P
相关产品推荐
相关产品推荐

