2016-06-28 27 views
0

我正在使用以下函数在我的量角器测试中调用API,有时API需要时间来响应。如何等待Rest API在量角器中作出响应

var request = require("superagent"); 
var PostUrl = browser.baseUrl + 'rest/1.0/dev/users'; 
var CreateTenantUrl = browser.baseUrl + 'rest/1.0/tenant'; 

exports.CreateTenant = function(body){ 
var data = '{' + body + '}';  
request.post(CreateTenantUrl).set('Content-Type', 'application/json').set('serviceSharedSecret', 'sharedsecret').send(data).end(function(err,res){ 
     if(err){ 
      console.log("CreateTenant post error= ", err) 
     } else{ 
      console.log("CreateTenant post response = ", res.status) 
     } 
     expect(res.status).toEqual(200) 
    });  
}; 

exports.CreateUsers = function(body){ 
    var data = '{' +body + '}'; 
    request.post(PostUrl).set('Content-Type', 'application/json').send(data).end(function(err,res){ 
if(err){ 
     console.log("CreateUsers post error= ", err) 
    } else{ 
     console.log("CreateUsers post response = ", res.status) 
    } 
expect(res.status).toEqual(202) 
});    
}; 

调用这些功能在测试脚本:

Common.CreateTenant('"tid": "1","long_name": "test tenant"'); 
Common.CreateUsers('"userName": "test1", "tenantKey": "1", "password": "Test1", "userID": "1"'); 

有没有什么办法可以把等待每个API调用来完成,然后再执行下一个?

回答

1

如果您需要第二次API调用才会在第一次API调用完成后触发,请在第一次API调用的回调方法中发送第二个API调用。

要完成API调用的“等待”实际上很糟糕。不要做的一个例子如下:发送一个API调用等待10秒,检查第一个调用是否完成,如果有,发送第二个API调用,否则再等待10秒钟并重复该过程。

它几乎总是一个更好的方法是使用回调,在API调用完成时提醒您。

对于你的榜样,你应该做到以下几点:

var request = require("superagent"); 
var PostUrl = browser.baseUrl + 'rest/1.0/dev/users'; 
var CreateTenantUrl = browser.baseUrl + 'rest/1.0/tenant'; 

exports.CreateTenant = function(body){ 
var data = '{' + body + '}';  
request.post(CreateTenantUrl).set('Content-Type', 'application/json').set('serviceSharedSecret', 'sharedsecret').send(data).end(function(err,res){ 
     if(err){ 
      console.log("CreateTenant post error= ", err) 
     } else{ 
      console.log("CreateTenant post response = ", res.status) 

      //Create user once tenant has been successfully created 
      Commons.CreateUsers('"userName": "test1", "tenantKey": "1", "password": "Test1", "userID": "1"'); 


     } 
     expect(res.status).toEqual(200) 
    });  
}; 

exports.CreateUsers = function(body){ 
    var data = '{' +body + '}'; 
    request.post(PostUrl).set('Content-Type', 'application/json').send(data).end(function(err,res){ 
if(err){ 
     console.log("CreateUsers post error= ", err) 
    } else{ 
     console.log("CreateUsers post response = ", res.status) 
    } 
expect(res.status).toEqual(202) 
});    
}; 
+0

HI @Nicholas Ackerman,我正在使用上面的代码中提示的函数,但问题是'request.post(CreateTenantUrl).set('Content-Type','application/json')。 set('serviceSharedSecret','sharedsecret')。send(data).end(function(err,res)'需要时间来响应状态200因此'Commons.CreateUsers(''userName':'test1','tenantKey' :“1”,“password”:“Test1”,“userID”:“1”')'呼叫永远不会被执行,请建议我如何等待或者有什么事情可以做。 – ssharma