如何使用Postman本机客户端在Protractor测试执行期间捕获API请求

时间:2018-01-22 15:13:12

标签: protractor postman e2e-testing web-api-testing

我使用Protractor为我们的应用程序构建了一个广泛的端到端测试套件,现在我将重点放在我们的后端API上,它没有任何文档或自动化测试。

我的目标是使用postman的本机Windows客户端捕获在我的量角器执行期间进行的API调用。这将允许我构建我们的应用程序API调用的粗略集合,以开始构建文档和自动化测试。但是,我无法使用邮递员的本机客户端成功捕获任何API请求。通常,我会通过Chrome应用程序捕获请求,但是protractors浏览器实例不允许在执行期间启用浏览器扩展。

我搜索了谷歌,YouTube,堆栈溢出和邮递员自己的文档,但我对任何建议的解决方案都没有运气。有没有人能够获得邮递员的本地客户端来捕获请求?如果是这样,怎么样?我试图使用本机客户端代理设置,但到目前为止没有运气。

1 个答案:

答案 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呼叫,因此您可能需要过滤掉一些不需要的数据。