2016-06-28 35 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