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

TestCafe如何封装E2E测试步骤到独立类并在冒烟测试中调用

TestCafe 冒烟测试步骤抽离实现方案

TestCafe 中要把同类步骤抽成独立类,核心是要把测试控制器对象 t 传入步骤类的方法中,所有TestCafe原生API都要基于这个传入的t调用,具体实现流程如下:


第一步:创建独立步骤类

比如新建auth-step.js文件,封装所有认证相关操作,你原有的页面对象可以直接复用:

// auth-step.js
import AuthPage from './auth-page.po.js'; // 引入你已有的AuthPage页面对象

export default class AuthStep {
  // 封装完整登录流程,包含参数、操作、结果校验
  static async login(t, username, password, authUrl, loginUrl) {
    await AuthPage.setUserName(username);
    await AuthPage.setUserPassword(password);
    // 你原来的登录校验逻辑也可以封装进来,不用散在主用例里
    await t.expect(getUrl()).eql(authUrl);
    await t.expect(getUrl()).eql(`${loginUrl}auth`, { timeout: 100000 });
  }
}

注意:所有需要调用TestCafe原生API(比如t.expect、t.click)的地方,都必须使用方法传入的t实例,不能单独引入TestCafe的全局t对象,否则会出现上下文报错


第二步:主冒烟测试用例中调用封装好的步骤

直接引入步骤类,调用对应的方法,传入当前测试的t对象和所需参数即可:

// smoke-test.js
import { test } from 'testcafe';
import AuthStep from './auth-step.js';
// 后续可以继续引入其他步骤类,比如MainStep、OrderStep等按业务分类的步骤封装

test("Smoke Test", async (t) => {
  console.log("Starting test");
  // 原来的4行认证相关代码直接缩为1行
  await AuthStep.login(t, "testtest@hotmail.com", "123456", authUrl, loginUrl);
  // 后续其他业务步骤也按同样逻辑封装调用即可
  // await MainStep.setUserType(t, userName);
  // .....
})

可选进阶优化

如果你的步骤类很多,不想每次调用都传t,也可以做统一的步骤管理器,在测试用例开头初始化一次即可:

// step-manager.js 统一管理所有步骤类
import AuthStep from './auth-step.js';
import MainStep from './main-step.js';

export default class StepManager {
  constructor(t) {
    this.auth = new AuthStep(t);
    this.main = new MainStep(t);
  }
}

// 改造步骤类,把t放在构造函数里,不用每次调用传参
class AuthStep {
  constructor(t) {
    this.t = t;
  }
  async login(username, password, authUrl, loginUrl) {
    await AuthPage.setUserName(username);
    await AuthPage.setUserPassword(password);
    await this.t.expect(getUrl()).eql(authUrl);
    await this.t.expect(getUrl()).eql(`${loginUrl}auth`, { timeout: 100000 });
  }
}

// 主用例中使用更简洁
test("Smoke Test", async (t) => {
  const step = new StepManager(t);
  await step.auth.login("testtest@hotmail.com", "123456", authUrl, loginUrl);
  await step.main.setUserType(userName);
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:06:04