Jasmine+Protractor框架下如何让Allure单步骤失败后继续执行测试用例
解决方案
实现逻辑
- 捕获步骤执行过程中的所有异常,避免异常向上抛至Jasmine执行器导致测试中断
- 对接Allure原生步骤状态设置接口,将传入的
status参数绑定到对应步骤,支持passed/failed/broken/skipped四种Allure标准状态 - 优化异步截图操作的等待逻辑,避免截图、日志上报丢失
修改后的工具函数
function addStep(name, status, stepLogic = () => {}) { try { // 执行传入的步骤业务逻辑 stepLogic(); allure.createStep(name, () => { // 修复原代码字符串模板不生效的问题,替换为反引号 testutils.logger().debug(`${name}`); return browser.takeScreenshot().then((png) => { allure.createAttachment(name, () => Buffer.from(png, 'base64'), 'image/png')(); }); })(); // 手动设置步骤状态 allure.getCurrentTest().stepStatus(status); } catch (error) { // 步骤执行异常时自动标记为失败,记录异常信息 allure.createStep(name, () => { testutils.logger().error(`${name} 执行失败: ${error.message}`); return browser.takeScreenshot().then((png) => { allure.createAttachment(`${name}_失败截图`, () => Buffer.from(png, 'base64'), 'image/png')(); allure.createAttachment(`${name}_错误堆栈`, () => Buffer.from(error.stack, 'utf-8'), 'text/plain')(); }); })(); allure.getCurrentTest().stepStatus('failed'); // 不抛出异常,确保后续步骤继续执行 } }
Jasmine兼容配置
需要在protractor.conf.js中添加如下配置,禁用Jasmine默认的单断言失败中断逻辑:
exports.config = { // 原有其他配置保持不变 jasmineNodeOpts: { stopOnSpecFailure: false, stopSpecOnExpectationFailure: false } }
调用示例
- 正常执行成功的步骤:
addStep("打开测试页面", "passed", () => { browser.get("/test") }) - 标记失败但不中断后续步骤:
addStep("提交表单", "failed", () => { element(by.css("button.submit")).click() }) - 用例执行完成后可统一统计失败步骤数量,手动设置整体用例状态:
allure.getCurrentTest().status(failStepCount > 0 ? "failed" : "passed")
内容的提问来源于stack exchange,提问作者Naveenchandar
相关产品推荐
相关产品推荐

