【问题标题】:How to use Postman native client to capture API requests during Protractor test execution如何在 Protractor 测试执行期间使用 Postman 原生客户端捕获 API 请求
【发布时间】:2018-01-23 05:17:40
【问题描述】:

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

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

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

【问题讨论】:

  • 试试 Browsermob 代理 https://github.com/lightbody/browsermob-proxy
  • 如果它们是您自己的量角器测试 - 您不是已经拥有该请求信息吗?

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


【解决方案1】:

如果您指的是 Postman 桌面应用程序,我认为您无法进行设置。正如 @Barney 在 cmets 中建议的那样,您可以尝试使用 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 调用将在 onComplete 中创建的 data 变量中。这将包括所有 http 调用,因此您可能需要过滤掉一些不需要的数据。

【讨论】:

    猜你喜欢
    • 2020-05-25
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 2015-01-07
    • 2016-02-27
    • 1970-01-01
    相关资源
    最近更新 更多