我有多个API调用,正在使用这些API删除用户数据以进行自动化测试。
首先我获得一个访问令牌
async function getAccessToken(email, pwd) {
try {
const form = {email: email, password: pwd};
let config = {
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
}
};
const accessToken = await axios.post(`${process.env.API_URL}/test/token`, qs.stringify(form), config);
console.log(accessToken.data.data.accessToken);
return accessToken.data.data.accessToken
}
catch(e) {
console.error(``+email+` produced the Error = ` + e);
return 0;
}
}
然后我使用该令牌删除所需的数据
async function TMDeleteAllGoals (emailAddress) {
try {
var accessToken = await setup.getAccessToken(emailAddress, 'Test4321');
var userId = await user.getUserId(emailAddress);
var goalids = await getAllTMGoalID(emailAddress);
console.log(`Deleting all goals for ` + emailAddress + ``);
for (const goalid of goalids) {
const response = await axios.delete(`${process.env.TM_API_URL}/test/users/`+userId+`/goals/`+goalids+``, {'headers': {Authorization: 'Bearer ' + accessToken + ''}});
}
}
catch(e) {
console.error(``+emailAddress+` produced the Error = ` + e);
return 0;
}
}
然后我需要为1000个不同的用户运行它,所以我使用循环执行
var i;
for (i = 1; i < 1001; i++) {
//console.log(i);
deleteGoals.TMDeleteAllGoals(`loadtest${i}@test.com`);
}
我遇到的问题是,这似乎是并发调用获得我的访问令牌的最大值(不确定该限制是多少)。因此,如果我遇到太多用户,它将开始返回null而不是令牌。
有没有一种方法可以在循环中的每个调用之间放置一个超时,以尝试降低它的速度。我已经尝试过了,但是它什么也没执行。
const timeout = ms => new Promise(res => setTimeout(res, ms));
async function deleteTheGoals () {
for (var i = 1; i < 1001; i++) {
//console.log(i);
await timeout(500);
const deleteGoals = await deleteGoals.TMDeleteAllGoals(`loadtest${i}@test.com`);
}
}
答案 0 :(得分:0)
您的服务器中可能有一个最大请求配置,因此即使您超时,也不能保证请求将在500毫秒之前结束。 为什么不将它们一个接一个地发送呢?
async function arraysWithAllIndexes(array) {
for(const i of array) {
await deleteGoals.TMDeleteAllGoals(`loadtest${i}@test.com`);
}
};