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

Cypress 如何避免在不同测试中编写重复步骤?

解决方案:提取公共逻辑+按需注入差异化步骤

完全可以这么做,核心思路是把重复的固定步骤抽成独立函数,把不同的分支逻辑拆成子函数,在测试用例里按需组合调用,彻底消除重复代码。

具体实现步骤:

  1. 抽离公共固定步骤
    把所有测试用例里重复的部分(比如你的前5步、7-10步)封装成单独的函数,每个函数负责一段固定流程。

  2. 拆分差异化逻辑为子函数
    把每个测试用例里独有的步骤(也就是你的第6步三种不同场景)分别写成小的子函数,每个函数只处理对应分支的逻辑。

  3. 在测试用例中组合调用
    在spec文件的it测试块里,只需要按顺序调用公共步骤函数+对应差异化子函数+后续公共步骤函数即可。

代码示例(以Cypress为例):

// 公共步骤:前5步的固定结账前置流程
function setupCheckout() {
  cy.login();
  cy.addItemsToCart();
  cy.proceedToCheckout();
  cy.fillBillingInfo();
  cy.fillShippingInfo();
}

// 公共步骤:7-10步的结账收尾流程
function completeCheckout() {
  cy.confirmOrderDetails();
  cy.submitOrder();
  cy.verifyOrderConfirmation();
  cy.navigateToOrderHistory();
}

// 差异化子函数:使用折扣码
function applyDiscountCode(code = 'DEFAULT_SAVE') {
  cy.expandDiscountSection();
  cy.enterDiscountCode(code);
  cy.clickApplyCode();
  cy.verifyDiscountApplied();
}

// 差异化子函数:不使用折扣码
function skipDiscountCode() {
  cy.skipDiscountSection();
  cy.verifyTotalWithoutDiscount();
}

// 差异化子函数:选择折扣支付方式
function selectDiscountedPaymentMethod() {
  cy.selectPaymentMethod('ExclusiveDiscountCard');
  cy.verifyPaymentDiscountApplied();
}

// 测试用例组合
describe('结账流程测试集', () => {
  it('使用折扣码完成结账', () => {
    setupCheckout();
    applyDiscountCode('SAVE20');
    completeCheckout();
  });

  it('不使用折扣码完成结账', () => {
    setupCheckout();
    skipDiscountCode();
    completeCheckout();
  });

  it('使用折扣支付方式完成结账', () => {
    setupCheckout();
    selectDiscountedPaymentMethod();
    completeCheckout();
  });
});

额外优化点:

如果差异化逻辑有相似性(比如不同折扣码、不同支付方式),可以给子函数加参数,进一步减少重复代码,比如applyDiscountCode支持传入不同折扣码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:55:07