跳过失败的断言 - 赛普拉斯测试
Skiping failed Assertions - Cypress Testing
我对赛普拉斯测试有疑问。
我在 Cypress 上没有太多经验,但我用它来测试一些 API REST 调用,为此我使用 [=37= 进行了 cy.request() ] 然后我得到 JSON 响应。
无论如何,在我的 JSON 响应中,我有两个属性:“hyperlinkHTML”和“hyperlinkPDF”,它们都可能有一个 URL,但有时它们是空的。我需要验证这两个属性,如果其中一个不是 URL 我需要检查另一个,但是如果第一个不是 URL cypress returns 断言失败并停止测试。当断言失败时,有一种方法可以跳过测试步骤吗?
我正在尝试这样的事情:
if (expect(documents.hyperlinkHTML).to.match(/^(http|https):\/\//)) {
let hyperlinkHTML = documents.hyperlinkHTML
cy.request({
method: 'GET',
url: hyperlinkHTML,
failOnStatusCode: false
}).then((response)=> {
expect(response.status).to.eq(200);
})
}else if
(expect(documents.hyperlinkPDF).to.match(/^(http|https):\/\//)) {
let hyperlinkPDF = documents.hyperlinkPDF
cy.request({
method: 'GET',
url: hyperlinkPDF,
failOnStatusCode: false
}).then((response)=> {
expect(response.status).to.eq(200);
})
}
但它不断返回断言错误。
如果有人能帮助我,那就太棒了。
无需在 if/else
中使用 expect()
,您可以只检查两个响应是否与 RegEx 匹配,如果两者都不匹配,则触发您自己的 expect()
失败。我们可以使用 RegExp.test.
进行正则表达式检查
const re = new RegExp(/^(http|https):\/\//)
if (re.test(documents.hyperlinkHTML)) {
// hyperlinkHTML request
} else if (re.test(documents.hyperlinkPDF)) {
// hyperlinkPDF request
} else {
// Assertion that will always fail because hyperlinkHTML and hyperlinkPDF have already been evaluated to false.
expect(re.test(documents.hyperlinkHTML) || re.test(documents.hyperlinkPDF)).to.eql(true);
}
您也可以在 if/else
之前执行 expect()
语句,但我更喜欢这种结构的明确性质。
条件测试是 anti-pattern 自动化质量保证 (read more here)
从外观上看,您收到了一个文件,您是否偶然尝试使用相同的断言来测试两件事?我建议在两个单独的测试中潜水。
同样对于自动化 API 测试,我建议使用 Postman,它的自动化请求链非常适合此类场景。希望我有所帮助!
我对赛普拉斯测试有疑问。
我在 Cypress 上没有太多经验,但我用它来测试一些 API REST 调用,为此我使用 [=37= 进行了 cy.request() ] 然后我得到 JSON 响应。
无论如何,在我的 JSON 响应中,我有两个属性:“hyperlinkHTML”和“hyperlinkPDF”,它们都可能有一个 URL,但有时它们是空的。我需要验证这两个属性,如果其中一个不是 URL 我需要检查另一个,但是如果第一个不是 URL cypress returns 断言失败并停止测试。当断言失败时,有一种方法可以跳过测试步骤吗?
我正在尝试这样的事情:
if (expect(documents.hyperlinkHTML).to.match(/^(http|https):\/\//)) {
let hyperlinkHTML = documents.hyperlinkHTML
cy.request({
method: 'GET',
url: hyperlinkHTML,
failOnStatusCode: false
}).then((response)=> {
expect(response.status).to.eq(200);
})
}else if
(expect(documents.hyperlinkPDF).to.match(/^(http|https):\/\//)) {
let hyperlinkPDF = documents.hyperlinkPDF
cy.request({
method: 'GET',
url: hyperlinkPDF,
failOnStatusCode: false
}).then((response)=> {
expect(response.status).to.eq(200);
})
}
但它不断返回断言错误。
如果有人能帮助我,那就太棒了。
无需在 if/else
中使用 expect()
,您可以只检查两个响应是否与 RegEx 匹配,如果两者都不匹配,则触发您自己的 expect()
失败。我们可以使用 RegExp.test.
const re = new RegExp(/^(http|https):\/\//)
if (re.test(documents.hyperlinkHTML)) {
// hyperlinkHTML request
} else if (re.test(documents.hyperlinkPDF)) {
// hyperlinkPDF request
} else {
// Assertion that will always fail because hyperlinkHTML and hyperlinkPDF have already been evaluated to false.
expect(re.test(documents.hyperlinkHTML) || re.test(documents.hyperlinkPDF)).to.eql(true);
}
您也可以在 if/else
之前执行 expect()
语句,但我更喜欢这种结构的明确性质。
条件测试是 anti-pattern 自动化质量保证 (read more here) 从外观上看,您收到了一个文件,您是否偶然尝试使用相同的断言来测试两件事?我建议在两个单独的测试中潜水。 同样对于自动化 API 测试,我建议使用 Postman,它的自动化请求链非常适合此类场景。希望我有所帮助!