我正在进行UI端到端测试,在测试开始之前,我们希望构建测试所需的数据。为此,我们使用CasperJS和waitForResource()
函数。
我们要等到资源在数据库中创建。 就像等待http GET响应状态从404切换到200(或201)。 它是一个API REST。
代码:
casper.waitForResource(urls.rootBE + 'ratecards/default?api_key=' + user.apiKey + '&company=' + organization.id, function(resource) {
utils.dump(resource);
});
这不起作用。你知道怎么做吗?
答案 0 :(得分:1)
你能告诉我你实际调用API的代码吗?
waitForResource实际上只是等待页面本身或casperjs手动调用的资源。这可以用来实现某种循环,在这种循环中你将每5秒调用一次API并断言API将以200或201响应。
编辑:
首先,您需要知道等待资源在数据库中的时间。花费您计算的最长时间。然后编写将通过API调用迭代的函数。
var condition = false;
function loop(index,iteration){
if(condition) {
return;
}
else if(index >= iteration) {
casper.test.fail('Record not found');
return;
}
casper.then(function(){
this.thenOpen('http://www.webpage.com/api/record/543',function(response){
if(response.status==200) {
condition = true;
this.test.pass("Record found");
}
this.echo(response.status);
})
})
.then(function(){
loop.call(this,index+1,iteration)
})
}
casper.test.begin('Test for record',1,function suite(test){
casper.start()
loop.call(this, 0, 20);
casper.run(function(){
test.done();
})
})
如果由于流量高而需要利用呼叫,请使用setTimeout。
答案 1 :(得分:0)
你的意思是你想获得jsonp或ajax响应吗?现在不容易。
如果在casperjs中打开页面时没有等待,同时当前步骤是最后一步,casperjs将退出,因此必须在打开页面步骤之后执行等待步骤以检查您的资源是否已加载。
任何时候你都无法从json或ajax请求中获取响应主体,只能获取响应元数据。
您可以在客户端挂钩ajax或jsonp请求,并使用casper.evaluate()接收响应正文,或者如果您的请求只是一个" GET"方法,你可以使用casperjs clientutils模块和sendAJAX()方法detail。
这link可能会给你很大的帮助。
答案 2 :(得分:0)
考虑在有效页面上使用waitForSelector()
,而不是其他页面,或者相应地获取页面状态代码和排序,如下所示:
casper.on('resource.received', function(resource) {
statuscode = resource.status;
});
if (statuscode < 404) {
// Thing to do on valid pages
}
waitForSelector()的值是,您可以非常轻松地设置超时,并声明如果您达到超时的隐式操作。
一个潜在的缺点是某些网站/ API有一个重定向,破坏的网址被重定向到非404页面,在第二个实例中不会被选中。