12

我正在做一个项目,我必须使用不同的变量值多次访问 Web 服务

例如,http ://mywebservice.com?variable1 = {{value}}

并且使用 Postman 收集运行器传递不同的值。

我想将所有请求的响应正文下载到一个文件中。我怎么做?

4

5 回答 5

12

认为您不能在集合运行器中下载请求的响应正文 - 您可以导出测试结果,但我不确定这是否包含响应正文数据。您还可以单击运行器中的每个请求并查看响应正文,但这仍然在 UI 中。

对于单个请求,您可以使用该Send and Download选项,该选项将向您显示响应正文:

在此处输入图像描述

我敢肯定,您可以采取一些解决方法将响应主体保存为环境或全局变量,然后在之后将其导出,但这似乎是一个尴尬且略带黑客攻击的解决方案。

pm.globals.set('response_body', JSON.stringify(pm.response.json()))

但这每次都会被覆盖,因此您每次都需要更改变量名称,或者在代码中包含一些内容来更改其名称,以获得一组唯一的变量。

然后可以使用该Manage Environment部分将这些导出并保存在本地。

于 2018-01-05T12:30:44.307 回答
9

如果您可以将最终数据存储在环境变量中并在 Collection Runner 完成后将其复制到文本编辑器中的 .JSON 文件中,这是一个简单的解决方法。

首先,您需要创建一个环境(这篇关于 Postman 的博文中有很棒的教程),并定义一个名为 的变量responseData,其值为[]

然后,在 Builder 中的“测试”下添加以下代码并保存您的集合。Postman 环境变量旨在用作字符串,因此我们将解析对象,然后将来自 API 的 JSON 响应推送到对象数组中。

var jsonData = JSON.parse(responseBody);
var old = pm.environment.get("responseData");
old = JSON.parse(old);
// filter jsonData if needed

old.push(jsonData);
old = JSON.stringify(old);
pm.environment.set("responseData", old);
console.log(pm.environment.get("responseData"));

现在,您可以通过查看环境变量值来检索包含所有响应数据的嵌套 JSON 对象(参见下面的示例)。

警告您必须在每次使用 Collection Runner 后重置该responseData值,[]以避免保留以前运行的数据。

于 2018-06-26T18:41:33.477 回答
8

我遇到了这种情况并通过使用 CLI 工具newman解决了它

首先,您需要将您的集合和环境导出为 JSON 文件。然后使用以下命令安装 newman:

sudo npm install -g newman

然后,如果您想要一个整洁的 HTML 报告来获取结果,那么首先newman-reporter-html使用以下命令安装外部报告

sudo npm install -g newman-reporter-html

您现在可以通过运行以下命令来生成报告:

newman run <path to your collection json file> -e <path to your environment json file> -r cli,html

默认情况下,HTML 文件将不包含请求和响应正文。为了渲染它,首先下载默认的车把模板,然后稍微调整一下。您可以在此处找到默认的车把模板。下载文件并将其另存为template.hbs. 然后在任何编辑器中打开它并查找它呈现Status Code. 它可能看起来像这样:

<div class="col-md-12">&nbsp;</div>
<br/><div class="col-md-4">Status code</div><div class="col-md-8">{{response.code}}</div><br/>

在此部分下方,添加以下行:

<div class="col-md-12">&nbsp;</div>
<br/><div class="col-md-4">Request body</div>
<div class="col-md-8">
    <textarea class="json" disabled rows="8" cols="70">
        {{request.body}}
    </textarea>
</div><br/>
<div class="col-md-12">&nbsp;</div>
<br/><div class="col-md-4">Response body</div>
<div class="col-md-8">
    <textarea class="json" disabled rows="8" cols="70">
        {{response.body}}
    </textarea>
</div><br/>

现在您可以运行以下命令来呈现带有请求和响应正文的 HTML:

newman run <path to your collection json file> -e <path to your environment json file> -r cli,html --reporter-html-template template.hbs

希望这可以帮助!

于 2019-01-10T07:57:28.847 回答
2

从这里获取提示 - http://blog.getpostman.com/2017/09/01/write-to-your-local-file-system-using-a-postman-collection/,下面是我写的nodeJS服务器将捕获请求和响应,并与请求名称(您在 Postman 中设置的)和 URL 一起一一打印。

var fs = require('fs'),
newman = require('newman'),
allRequest =[],
allResponse = [],
allName = [],
requestUrl = "",
allRequestUrl = [];


newman.run({
collection: '//your_collection_name.json',
iterationData: 'your_iteration_file', 
iterationCount : 3
})
.on('request', function (err, args) {
if (!err) {

    //console.log(args);    // --> args contain ALL the data newman provides to this script.
    var requestBody = args.request.body, 
        request = requestBody.toString(); 

    allRequest.push(JSON.parse(request)); 
    var responseBody = args.response.stream,
        response = responseBody.toString();
    allResponse.push(JSON.parse(response));

    var nameBody = args.item.name;
    allName.push(nameBody);
    var protocol = args.request.url.protocol;
    var host = args.request.url.host;
    var path = args.request.url.path;
    requestUrl+=protocol+"://";
    for(var j = 0;j<host.length;j++)
    {
        requestUrl+= host[j];
        if(j!=host.length-1)
        {
        requestUrl+=".";
        }
    }
    requestUrl+='/';

    for (var k =0;k<path.length;k++)
    {
        requestUrl+= path[k];
        if(k!=path.length-1)
        {
        requestUrl+= "/";
        }
    }
    allRequestUrl.push(requestUrl);
}
 })
 .on('done', function (err, summary) {
fs.writeFile('test.html',"");
//modify html output here.
for(var i =0;i<allRequestUrl.length;i++)
{
    fs.appendFileSync('test.html', "<br><h>Name:  </h>");
    fs.appendFileSync('test.html',allName[i]);
    fs.appendFileSync('test.html', "<br><h>URL:  </h>");
    fs.appendFileSync('test.html',"\"" + allRequestUrl[i] + "\"");
    fs.appendFileSync('test.html', "<br><h>Request</h><br>");
    fs.appendFileSync('test.html',JSON.stringify(allRequest[i],null,4));
    fs.appendFileSync('test.html', "<br><h>Response</h><br>");
    fs.appendFileSync('test.html',JSON.stringify(allResponse[i],null,5));
//fs.writeFileSync('migration-report.json', JSON.stringify(results, null, 4));
}
});

要运行上面的代码,你需要安装 newman,它是 Postman 的 CLI。首先在您的计算机中安装 node 和 npm,然后转到您的目录并通过 - 安装 newman

    npm install newman

然后将上面的代码复制粘贴到一个js文件'filename.js'中并通过以下命令运行它 -

    node filename.js

包含您需要的信息的输出将保存在同一目录中名为“test.html”的文件中。

于 2018-04-26T07:03:06.693 回答
2

通过运行本地服务器,然后使用Postman 中的脚本构建发送到该服务器的请求,您可以写入文件系统。

这是一篇关于如何使用 collection runner 来做到这一点的博客文章。您也可以使用 Newman做同样的事情。

对于您的项目,您可以将响应正文存储在变量中,然后将该变量作为 POST 请求中的有效负载传递到本地服务器。您的本地服务器将监听 POST 请求,并将数据写入您的文件系统。

于 2018-01-14T00:29:03.583 回答