gpt4 book ai didi

url - Cypress :是否有可能在失败后完成测试

转载 作者:行者123 更新时间:2023-12-05 04:44:48 24 4
gpt4 key购买 nike

概览

我想在更新后每周自动测试我们网站的所有 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 之外的任何其他内容,则测试失败。

我想要什么:

我希望 Cypress 在返回失败的 URL 之前遍历完整的 URL 列表。

为什么?

如果列表中有多个 URL 损坏,在我们的开发人员修复第一个 URL 之前,我不会通过此测试找到第二个损坏的 URL。然而,我需要在本周初生成一个包含所有损坏 URL 的列表

我已经看到了this answer但我想知道在我尝试实现这个之前是否有不同的解决方案

最佳答案

您不应该在每个 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)
})

关于url - Cypress :是否有可能在失败后完成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69256076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com