如何在 TestCafe 中发布顺序 POST 请求?
Posted
技术标签:
【中文标题】如何在 TestCafe 中发布顺序 POST 请求?【英文标题】:How to post sequential POST requests in TestCafe? 【发布时间】:2021-03-09 01:18:14 【问题描述】:我正在尝试在 TestCafe 中设置自动 ui 测试。它分为三个部分。
UI 部分(即最后一部分)简单明了,没有问题。它正在确认和关闭已进入帐户的警报。但要触发该警报,我需要执行两个 api post 请求。
第一个是登录并检索不记名令牌。
第二个是使用不记名令牌发布警报以进行授权。
如果我只发布登录请求,我会返回令牌。如果我在第二个请求中对不记名令牌进行硬编码 - 它可以完美运行。
我已经用谷歌搜索试图找到任何帮助以及唯一找到的关于顺序获取请求的建议。我已经尝试过了,但这样做总是首先运行第二个请求 - 然后测试在 401 响应上失败。
下面是我尝试运行的代码。任何建议将不胜感激
let axios = require('axios');
var token = ''
let login = "http://url/login"
let alert = "http://url/alarm"
const firstRequest = axios.post(login ,
'email': 'email@gmail.com',
'password': 'pwd'
.then((response) =>
console.log(response)
token = response.data.token
return token
)
.catch(error =>
console.error(error)
))
const secondRequest = axios.post(alert,
deviceId: 29152
,
headers:
'Authorization': `Bearer $token`
,
)
axios
.all ([firstRequest, secondRequest])
.then(
axios.spread((...responses) =>
const firstResponse = responses [0];
const secondResponse = responses [1];
console.log(firstResponse, secondResponse);
)
)
.catch(errors =>
console.error(errors)
);
【问题讨论】:
async/await 使其顺序可能是一个解决方案。您需要等待 firstRequest 以获取您以后使用的令牌。 【参考方案1】:@pavelsaman 的解决方案是正确的。看起来axios.post
方法返回了一个普通的承诺。这意味着您可以按如下方式使用 async/await 方法:
const firstResponse = await axios.post(login, 'email': 'email@gmail.com', 'password': 'pwd' ;
const token = response.data.token;
const secondResponse = await axios.post(alert,
...
'Authorization': `Bearer $token`
,
)
或者,您可以使用 Promise 链接,如下所示:
axios.post(login, 'email': 'email@gmail.com', 'password': 'pwd' )
.then(response =>
const token = response.data.token;
return axios.post(alert,
...
'Authorization': `Bearer $token`
)
【讨论】:
感谢一百万!像魅力一样工作!以上是关于如何在 TestCafe 中发布顺序 POST 请求?的主要内容,如果未能解决你的问题,请参考以下文章
TestCafe - 如何在 testcaferc 文件中为 testGrep 提供多个正则表达式
如何在 Testcafe 断言中的 1 个可能参数上添加 2 个常量?
TestCafe 如何在 Internet Explorer 中验证 Active Directory Windows 安全提示