【问题标题】:How to export/download Response Body into an external file from Postman Collection Runner Results?如何将响应正文从 Postman Collection Runner Results 导出/下载到外部文件中?
【发布时间】:2018-06-15 06:06:59
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: postman postman-collection-runner


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      首先,您需要创建一个环境(Postman 上的great tutorial in this blog post),并定义一个名为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 值重置为 [],以避免保留以前运行的数据。

      【讨论】:

        【解决方案3】:

        我遇到了这种情况并通过使用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 文件不包含请求和响应正文。为了渲染它,首先下载默认的车把模板,然后稍微调整一下。您可以找到默认的车把模板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
        

        希望这会有所帮助!

        【讨论】:

        • 它帮助了我! A+ 你是救命稻草
        • 刚刚创建了一个带有建议更改的模板的要点 => gist.github.com/fmancardi/56844e80819830aae1fbfcc6376795c7
        • 该解决方案对flask-python有帮助吗?
        • 嗨,我只是将第一个请求保存在我生成的 html 中,即使我运行了多个请求,知道为什么会发生这种情况吗?我的命令如下所示: newman run latina.postman_collection.json -d data.json -r cli,html --reporter-html-template template.hbs
        【解决方案4】:

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

        这是一篇关于 how to do that using the collection runner 的博文。你也可以做同样的事情using Newman

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

        【讨论】:

          【解决方案5】:

          从这里获得提示 - 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”的文件中。

          【讨论】:

            猜你喜欢
            • 2017-01-15
            • 2019-03-13
            • 1970-01-01
            • 2018-06-18
            • 2018-07-15
            • 1970-01-01
            • 2019-11-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多