如何从Postman Collection Runner结果导出/下载响应正文到外部文件?

s3fp2yjn  于 2022-11-23  发布在  Postman
关注(0)|答案(6)|浏览(434)

我正在处理一个项目,在该项目中,我必须使用变量的不同值多次访问Web服务
例如,http://mywebservice.com?variable1= {{value}}
并使用Postman集合运行程序传递不同的值。
我想把所有请求的响应正文下载到一个文件中,该怎么做呢?

huwehgph

huwehgph1#

我不 * 认为 * 您可以在收集运行器中下载请求的响应主体-您可以导出测试结果,但我不确定这是否包含响应主体数据。您也可以在运行器中单击每个请求并查看响应主体,但这仍然是UI中的全部内容。
对于单个请求,可以使用Send and Download选项,它将显示响应正文:

我相信您可以做一些变通办法,将响应主体保存为环境或全局变量,然后导出,但这似乎是一个笨拙的、有点黑客的解决方案。

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

但是每次都会被覆盖,所以每次都需要更改变量名,或者在代码中更改变量名,以获得一组唯一的变量。
然后,可以使用Manage Environment部分将它们导出并保存在本地。

35g0bw71

35g0bw712#

如果您不介意将最终数据存储在环境变量中,下面是一个简单的解决方法,在Collection Runner完成后,只需在文本编辑器中将其复制到一个.JSON文件中。
首先,您需要创建一个环境(Postman上的这篇博客文章中有很好的教程),并定义一个名为responseData的变量,其值为[]
然后,在Builder中的“Tests”下添加以下代码并保存您的集合。Postman环境变量旨在作为字符串使用,因此我们将解析对象,然后将JSON响应从API推送到对象数组中。

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对象(请参见下面的示例)。

  • 警告 *:每次使用收集运行程序后,必须将responseData值重置为[],以避免保留以前运行的数据。
tvmytwxo

tvmytwxo3#

我遇到了这种情况,并使用CLI工具newman解决了该问题
首先需要将集合和环境导出为JSON文件,然后使用以下命令安装纽曼:

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文件不包含请求和响应主体。要呈现它,首先下载默认的handlebars模板,然后对其进行一些调整。您可以找到默认的handlebars模板here。下载该文件并将其保存为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

希望这对你有帮助!

bvuwiixz

bvuwiixz4#

通过运行一个本地服务器,然后使用Postman中的scripts构建一个发送到该服务器的请求,您可以写入到您的文件系统。
这里有一篇关于how to do that using the collection runner的博客文章,你也可以用纽曼做同样的事情。
对于您的项目,您可以将响应主体存储在变量中,然后将该变量作为POST请求中的有效负载传递到本地服务器。您的本地服务器将侦听POST请求,并将数据写入您的文件系统。

qvsjd97n

qvsjd97n5#

从这里得到提示-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));
}
});

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

npm install newman

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

node filename.js

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

wr98u20j

wr98u20j6#

要导出响应,请按照以下步骤操作,因为没有简单的方法。
1.将这些行添加到你的测试脚本pm.test(pm.response.value,true)中;
1.运行集合并导出集合
1.现在,您可以在Excel工作表中获得响应
注如果您只需要响应,则禁用所有测试。在Excel工作表中修改响应并删除“通过”文本。

相关问题