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
相关产品推荐
相关产品推荐

