web-dev-qa-db-ja.com

Postman Collection Runner ResultsからResponse Bodyを外部ファイルにエクスポート/ダウンロードするにはどうすればよいですか?

変数の異なる値でWebサービスを複数回ヒットする必要があるプロジェクトに取り組んでいます

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

さまざまな値がPostmanコレクションランナーを使用して渡されます。

すべてのリクエストのレスポンスボディをファイルにダウンロードしたい。それ、どうやったら出来るの?

9
Dinesh Singh

私はしませんthinkリクエストのレスポンス本文をコレクションランナーでダウンロードできます-テスト結果をエクスポートできますが、確信はありませんこれには、応答本文データが含まれます。ランナーで各リクエストをクリックして、レスポンスの本文を表示することもできますが、これはすべてUI内にあります。

個々のリクエストには、Send and Downloadオプションを使用できます。これにより、レスポンスの本文が表示されます。

enter image description here

応答本文を環境変数またはグローバル変数として保存し、後でエクスポートするためのいくつかの回避策があると確信していますが、これは厄介で少しハッキングしたソリューションのようです。

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

ただし、これは毎回上書きされるので、変数名を毎回変更するか、コードに名前を変更して何かの固有のセットを取得する必要があります。

これらは、Manage Environmentセクションを使用してローカルにエクスポートおよび保存できます。

4
Danny Dainton

ここからヒントを取る- http://blog.getpostman.com/2017/09/01/write-to-your-local-file-system-using-a-postman-collection/ 、以下リクエストとレスポンスをキャプチャし、リクエスト名(Postmanで設定)とURLとともに1つずつ出力する、私が作成したnodeJSサーバーです。

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であるnewmanをインストールする必要があります。まず、コンピュータにノードとnpmをインストールしてから、ディレクトリに移動し、newmanをインストールします-

    npm install newman

次に、上記のコードをjsファイル 'filename.js'にコピーして貼り付け、以下のコマンドで実行します-

    node filename.js

必要な情報を含む出力は、同じディレクトリの「test.html」という名前のファイルに保存されます。

1
Shivam Mishra

最終的なデータを環境変数に保存して、Collection Runnerの完了後にテキストエディターで.JSONファイルにコピーするだけでよい場合の簡単な回避策を次に示します。

まず、環境を作成し( このブログ投稿の大きなチュートリアル Postmanで)、responseDataという変数を定義し、値を[]に設定します。

次に、ビルダーの「テスト」の下に次のコードを追加し、コレクションを保存します。 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オブジェクトを取得できます(以下の例を参照)。

警告使用するたびにresponseData値を[]としてリセットする必要があります以前の実行からのデータを保持しないようにするためのコレクションランナー。

1
bomberjackets

ローカルサーバーを実行し、Postmanで scripts を使用してそのサーバーに送信するリクエストを作成することにより、ファイルシステムに書き込むことができます。

コレクションランナーを使用してこれを行う方法 に関するブログ投稿を次に示します。同じことを行うこともできます Newmanを使用

プロジェクトの場合、レスポンスの本文を変数に格納し、その変数をPOSTリクエストのペイロードとしてローカルサーバーに渡すことができます。ローカルサーバーはPOSTリクエストをリッスンし、データをファイルシステムに書き込みます。

1
J.Lin

私はこの状況に直面し、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

お役に立てれば!

0
Mandeep Singh