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

Cypress如何从上一测试结束处继续执行并拆分长测试用例

解决方案

1. 解决用例间需要重新登录的问题

Cypress 12及以上版本默认开启testIsolation测试隔离配置,每条it用例执行完成后会自动清除所有Cookie、LocalStorage、会话缓存,重置页面到空白页,所以你拆分用例后会需要重复登录。
只要关闭该配置即可保留上一条用例的执行状态,直接从上次结束的位置继续执行,有两种配置方式可选:

  • 全局配置:在cypress.config.js的e2e配置项中添加testIsolation: false
  • 单describe块配置:在测试文件的describe第二个参数里加配置,不影响其他测试
describe("Full system test", { testIsolation: false }, () => {
  // 原有逻辑
})

2. 解决Faker重复生成测试数据的问题

你当前写的before钩子本身就只会在整个describe块执行前运行一次,只要你的../../faker/user模块是一次生成后不会自动刷新数据的,所有用例复用this.User就不会出现数据重新生成的问题。如果你的faker模块每次调用都会重新生成,调整成单例模式即可:

// faker/user.js 调整示例
const faker = require('@faker-js/faker');
// 一次性生成后导出,不会每次require都重新生成
module.exports = {
  username: faker.internet.userName(),
  email: faker.internet.email(),
  password: faker.internet.password()
}

3. 调整后完整可运行的测试代码

/// <reference types="cypress" />

import "cypress-audit/commands";

// 关闭当前测试块的测试隔离,保留用例间状态
describe("Full system test", { testIsolation: false }, () => {
  before(function () {
    // 仅在所有用例执行前生成一次测试数据,所有用例复用
    this.User = require("../../faker/user");
  });

  it("Registers and creates profile", function () {
    cy.visit(Cypress.env("home_page"));
    cy.Register({ user: this.User });
    cy.contains("Vacancies").click();
    cy.UpdateProfile({ user: this.User });
    cy.contains("Vacancies").click();
    cy.AddCompanyDetails({ user: this.User });
    cy.contains("Vacancies").click();
    cy.AddTeamMember({ user: this.User });
  });

  it("Creates a vacancy and adds candidates", function () {
    // 直接复用之前的登录态和页面状态,不需要重新登录
    cy.CreateVacancy({ user: this.User });
    cy.AddCandidate({ user: this.User });
    cy.AddAdditionalDocs({ user: this.User });
  });
});

额外优化建议

如果担心后续用例增多后前置依赖失败导致所有后续用例挂掉,可以配合Cypress自带的测试筛选功能,单独运行某条用例调试,不影响整体测试流程。调整后你的测试报告就会按照拆分后的用例分别展示执行结果,和你预期的展示效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:45:03