赛普拉斯:是否有可能在失败后完成测试
Cypress: Is it possible to complete a test after failure
概览
我想在更新后每周自动测试我们网站的所有 200 个页面,看看更新是否破坏了其中任何一个
测试用例
- 登录并转到站点地图
- 获取 URLs 并检查每个的 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 returns 状态 200 之外的任何其他状态,测试都会失败。
我想要什么:
我希望 Cypress 在返回失败的 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)
})
概览
我想在更新后每周自动测试我们网站的所有 200 个页面,看看更新是否破坏了其中任何一个
测试用例
- 登录并转到站点地图
- 获取 URLs 并检查每个的 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 returns 状态 200 之外的任何其他状态,测试都会失败。
我想要什么:
我希望 Cypress 在返回失败的 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)
})