Cypress 如何避免在不同测试中编写重复步骤?
解决方案:提取公共逻辑+按需注入差异化步骤
完全可以这么做,核心思路是把重复的固定步骤抽成独立函数,把不同的分支逻辑拆成子函数,在测试用例里按需组合调用,彻底消除重复代码。
具体实现步骤:
抽离公共固定步骤
把所有测试用例里重复的部分(比如你的前5步、7-10步)封装成单独的函数,每个函数负责一段固定流程。拆分差异化逻辑为子函数
把每个测试用例里独有的步骤(也就是你的第6步三种不同场景)分别写成小的子函数,每个函数只处理对应分支的逻辑。在测试用例中组合调用
在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
相关产品推荐
相关产品推荐

