赛普拉斯:失败后是不是可以完成测试
Posted
技术标签:
【中文标题】赛普拉斯:失败后是不是可以完成测试【英文标题】:Cypress: Is it possible to complete a test after failure赛普拉斯:失败后是否可以完成测试 【发布时间】:2021-11-14 06:13:15 【问题描述】:概述
我想在更新后每周自动测试我们网站的所有 200 个页面,看看更新是否破坏了其中任何一个页面
测试用例
登录并转到站点地图 获取 URL 并检查每个 URL 的 HTTP 状态代码
it('check HTTP status', () =>
cy.visit(Cypress.config('siteMapUrl'))
cy.get('.portlet-separator').should('contain', 'Available Links')
cy.get('.inputwrapper>a')
.each(($el, index, $list) =>
if($list)
cy.get($el)
.invoke('attr', 'href')
.then(href =>
cy.request(Cypress.config('url')+href)
.should('have.property', 'status', 200)
)
)
会发生什么:
一旦 URL 返回状态 200 以外的任何内容,测试就会失败。
我想要什么:
我希望赛普拉斯在返回失败的 URL 之前遍历完整的 URL 列表。
为什么?
如果列表中有多个 URL 损坏,在我们的开发人员修复第一个 URL 之前,我不会在此测试中找到第二个损坏的 URL。然而,我需要在一周开始时生成一个包含所有损坏 URL 的列表
我已经看过this answer,但我想知道在尝试实施之前是否有不同的解决方案
【问题讨论】:
【参考方案1】:您不应在每个 URL 后使用 .should()
- 即使设置了 failOnStatus: false
,这也会立即失败。
而是保存结果并在最后检查。
const failed = []
cy.get(".inputwrapper>a").each(($el, index, $list) =>
cy.get($el)
.invoke("attr", "href")
.then((href) =>
cy.request(
url: Cypress.config("url") + href,
failOnStatusCode: false,
)
.its('status')
.then(status =>
if (status !== 200)
failed.push(href)
)
)
)
.then(() =>
// check inside then to ensure loop has finished
cy.log(`Failed links: `$failed.join(', ')`)
expect(failed.length).to.eq(0)
)
【讨论】:
非常感谢,塞克。这是一个真正令人印象深刻的解决方案。我不知道您可以将结果保存在回调函数中,并且只在最后检查它们。这段代码完美无缺。它在一次测试中运行所有内容并记录所有失败的链接。简直完美。以上是关于赛普拉斯:失败后是不是可以完成测试的主要内容,如果未能解决你的问题,请参考以下文章