在我的赛普拉斯测试中,我正在尝试调用两个单独的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')
有没有办法确保postSession
在postTestCase
之前执行,而不会在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 => {})
})