如何确保赛普拉斯请求执行的顺序



在我的赛普拉斯测试中,我正在尝试调用两个单独的API端点。

我可以拨打电话,但我需要确保它们以正确的顺序执行。

以下是我的请求的简化版本:

cy.request('POST', apiUrl + 'Session', {username: merchant_username}
).as('postSession')
cy.request('POST', apiUrl + 'TestCase', {username: merchant_username}
).as('postTestCase')

按此顺序执行调用非常重要,因为其中一些调用依赖于其他调用的值。

我正在尝试从postSession响应中检索sessionId

cy.request({
method: 'POST',
url: apiUrl + 'session',
}).as('postSession')
cy.get('@postSession').should(response => {
sessionId = response.body.SessionId;
})

然后在postTestCase的请求正文中使用它:

cy.request({
method: 'POST',
url: apiUrl + 'TestCase',
body: {
"SessionId": sessionId
}
})

如果我在postSession之后.then()并将postTestCase放入其中,则请求工作正常,但如果可能的话,我想避免这样做。

cy.get('@postToken').should(response => {
sessionId = response.body.SessionId;
}).then(() => {
cy.request({
method: 'POST',
url: apiUrl + 'TestCase',
body: {
"SessionId": sessionId
}
})
})

我也尝试使用cy.wait(),但第二个请求中的sessionId为空白。

cy.wait('@postSession')
cy.wait('@postTestCase')

有没有办法确保postSessionpostTestCase之前执行,而不会在postSession后将postTestCase放入.then()内?

不幸的是,在发布此答案时,赛普拉斯 GitHub 存储库上有一个悬而未决的问题,其中包含await的建议,根据此链接。

因此,目前只有"嵌套"请求方式是可能的。

例如您的代码段:

cy.request({
method: 'POST',
url: apiUrl + 'session',
}).then((response) => {
const sessionId = response.body.SessionId;

cy.request({
method: 'POST',
url: apiUrl + 'TestCase',
body: {
"SessionId": sessionId
},
});
});

你需要做这样的事情:

cy.request({
method: 'GET',
url: 'https://' + host + '/lending/loan',
headers: default_headers
}).then(res => {
cy.request({})
.then(res => {})
})

相关内容

  • 没有找到相关文章

最新更新