我使用Protractor为我们的应用程序构建了一个广泛的端到端测试套件,现在我将重点放在我们的后端API上,它没有任何文档或自动化测试。
我的目标是使用postman的本机Windows客户端捕获在我的量角器执行期间进行的API调用。这将允许我构建我们的应用程序API调用的粗略集合,以开始构建文档和自动化测试。但是,我无法使用邮递员的本机客户端成功捕获任何API请求。通常,我会通过Chrome应用程序捕获请求,但是protractors浏览器实例不允许在执行期间启用浏览器扩展。
我搜索了谷歌,YouTube,堆栈溢出和邮递员自己的文档,但我对任何建议的解决方案都没有运气。有没有人能够获得邮递员的本地客户端来捕获请求?如果是这样,怎么样?我试图使用本机客户端代理设置,但到目前为止没有运气。
答案 0 :(得分:0)
如果您的意思是Postman桌面应用,我不认为您可以设置它。正如@Barney在评论中建议的那样,您可以尝试使用browsermob-proxy。
我过去尝试了类似的东西,但后来放弃了它(我们的后端团队编写了他们自己的测试)所以我并不积极所有的代码仍然有效,但这里的要点(也无法记住)我的原始信息来源,但可能是因为我的配置看起来几乎相同:https://github.com/afternoon/protractor-browsermob-test/blob/master/protractor.conf.js)
在您的配置中,您的配置中需要browsermob-proxy
并设置一些参数。
// conf.js
var Proxy = require('browsermob-proxy').Proxy,
Q = require('q'),
proxy;
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
capabilities: {
browserName: 'chrome',
proxy: {
proxyType: 'manual',
httpProxy: 'localhost:8888',
sslProxy: 'localhost:8888'
},
}
onPrepare: function () {
var deferred = protractor.promise.defer();
proxy = new Proxy();
Q.ninvoke(proxy, 'start', 8888).then(function (data) {
browser.params.proxy = proxy;
browser.params.proxyData = data;
return data;
}, function (err) {
deferred.reject(err);
}).then(function (data) {
proxy.startHAR(browser.params.proxyData.port, 'test', function (err, resp) {
console.log('Start HAR');
deferred.fulfill();
});
});
return deferred.promise;
},
onComplete: function () {
return proxy.getHAR(browser.params.proxyData.port, function (err, harData) {
if(err) throw err;
// HERE IS YOUR LIST OF HTTP CALLS
var data = JSON.parse(harData);
console.log(data);
});
},
onCleanUp: function () {
return Q.ninvoke(proxy, 'stop', 8888).then(function (err) {
if(err) throw err;
console.log('Stopped server!');
});
}
};
然后剩下的由你决定了。您的HTTP调用将位于data
中创建的onComplete
变量中。这将包括所有http呼叫,因此您可能需要过滤掉一些不需要的数据。