API テストの書き方

API テストでは、API エンドポイントをモニターし、正しく動いているかを検証できます。New Relic は、エンドポイントへのリクエストの生成及び結果の検証に、内部で、http-request モジュールを使っています。ここでは、$http を使って、リクエストを送信する方法を説明しています。このオブジェクトで利用可能なオプションについては、http-request readme [英語]をご覧ください。

API テストの例は、New Relic のコミュニティフォーラムの Synthetics Scripts セクションにありますので、参考にしてください。

API テストの概要

API テストは、http-request モジュールを使って行われます。$http を通して、このモジュールの機能を利用できます。各周波数間隔たら、シンセティックはあなたの選択した場所のそれぞれからエンドポイントを照会します。モニターの作成方法については、モニターの追加をご覧ください。

ここでは、リクエスト用のメタデータの定義の仕方リクエスおを認証する方法 (必要に応じて)GET リクエストの作り方POST リクエストの作り方結果の検証方法について説明していきます。

実行時間は3分が上限です。それを越えると、Synthetics は、スクリプト止めます。
screen-synthetics-api-test-ide.png
Synthetics > Add monitor > API Test: スクリプトエディターは、スクリプトの作成を助ける、関数、セレクター、他の要素をサジェスト機能があります。

リクエストの設定

URL のエンドポイント、API キー、認証情報などのメタデータを定義することから、スクリプトを作り始めます。 (optionsなどの)変数を定義し、変数にメタデータを含めます。

メタデータのオプション

//オプションのメタデータを定義する
var options = {
        //エンドポイントとなる URL を指定
        url: 'https://api-endpoint.example.com',
        //ヘッダーを指定
        headers: {
                'Endpoint-Key': 'uqNTC57Phe72pnnB8JuJmwAr7b09nKSKSz',
                'Additional-Header': 'Additional-Header-Data'
        }
};
リクエストのサポートされている全オプションは、http-request ドキュメントの request(options, callback) をご覧ください。

スクリプトの認証

API エンドエンドポイントの認証が必要なときがあります。認証を行うには、リクエストヘッダーに認証情報をセットし、送信します。認証メソッド (GET、POST など) は、API のエンドポイントによって異なります。

GET リクエストの送信

リクエストを送信する GET リクエストを作るには、$http.get メソッド使います。リクエストのオプションを設定し、$http.get を使ってリクエストを送信します。そして、正しい結果が返ってきているのか、レスポンスを検証して確かめます。

以下は、GET を使って、 Insights API に問い合わせを行う例です。

Insights の GET の例

以下は、GET を使って、 Insights API に問い合わせを行う例です。

//認証情報を設定
var myAccountID = '{YOUR_ACCOUNT_ID}';
var myQueryKey = '{YOUR_QUERY_KEY}';
var options = {
    //エンドポイントとなる URI を定義
    uri: 'https://insights-api.newrelic.com/v1/accounts/"+myAccountID+"/query?nrql=SELECT%20average(amount)%20FROM%20SyntheticsEvent',
    //問い合わせキーと返信で想定するデータタイプを設定
    headers: {
    'X-Query-Key': myQueryKey,
    'Accept': 'application/json'
}
};

//コールバック関数に期待する結果を定義
function callback (err, response, body){
//エンドポイントから、Synthetics コンソールに JSON の結果を記録.
 console.log(JSON.parse(body)); 
 console.log('done with script');
}

//オプションとコールバックを引数に、GET リクエストを作成する
$http.get(options,callback);

POST リクエストの送信

リクエストを送信する POST リクエストを作るには、$http.post メソッド使います。リクエストのオプションを設定し、$http.post を使ってリクエストを送信します。そして、正しい結果が返ってきているのか、レスポンスを検証して確かめます。

以下は、 数値を含んだ Insights のカスタムイベントを POST する例です。

Insights へ POST する例

以下の例は、数値を含んだ Insights のカスタムイベントを POST する例です。

//認証情報を設定
var myAccountID = '{YOUR_ACCOUNT_ID}';
var myInsertKey = '{INSERT_KEY}';
//結果の検証を行う `assert` モジュールのインポート
var assert = require('assert');

var options = {
    //エンドポイントとなる URI を定義
    url: "https://insights-collector.newrelic.com/v1/accounts/"+myAccountID+"/events",
    //POST リクエストのボディを設定
    body: '[{"eventType":"SyntheticsEvent","integer1":1000,"integer2":2000}]',
    //挿入キーと返信で想定するデータタイプを設定
    headers: {
        'X-Insert-Key': myInsertKey,
        'Content-Type': 'application/json'
        }
};

//コールバック関数に期待する結果を定義
function callback(error, response, body) {
    //Synthetics コンソールにステータスコードを記録
    console.log(response.statusCode + " status code")
    //レスポンスコードが 200 (OK) であることを検証する
    assert.ok(response.statusCode == 200, 'Expected 200 OK response');
    //Insights からの結果の JSON をパースし、変数に格納
    var info = JSON.parse(body);
    //`info` の `success` という要素名の値が、`true` であることを確認
    assert.ok(info.success == true, 'Expected True results in Response Body, result was ' + info.success);
    //スクリプトの終わりを記録
    console.log("End reached");
}

//オプションとコールバックを引数に、POST リクエストを作成する
$http.post(options, callback);

結果の検証

結果を検証するには、assert モジュールをインポートし、テストケースを定義します。assert メソッドを呼び出すと、レスポンスを検証できます。assert 関数が失敗したら、モニターのチェック結果は、失敗と見なされます (これは、アラートを呼びだす可能性があり、それにより、メトリクスに影響を及ぼす可能性があります).

Insights の検証の例

以下は、Insights API へ POST し、レスポンスが、{"success":true} であることを検証する例です。

//認証情報を設定
var myAccountID = '{YOUR_ACCOUNT_ID}';
var myInsertKey = '{INSERT_KEY}';
//結果検証用の `assert` モジュールをインポート
var assert = require('assert');

var options = {
    //エンドポイントとなる URI を定義
    url: "https://insights-collector.newrelic.com/v1/accounts/"+myAccountID+"/events",
    //POST リクエストのボディを設定
    body: '[{"eventType":"SyntheticsEvent","integer1":1000,"integer2":2000}]',
    //挿入キーと返信で想定するデータタイプを設定
    headers: {
        'X-Insert-Key': myInsertKey,
        'Content-Type': 'application/json'
        }
};

$http.post(options, function(error, response, body) {
    //Synthetics コンソールにステータスコードを記録。ステータスコードは、 `assert` 関数の呼び出し前に記録する必要があります。なぜなら、assert 関数の実行に失敗すると、スクリプトが終了するからです。
    console.log(response.statusCode + " status code")
    //`assert` メソッドの呼び出し。`200` レスポンスコードであることを期待。 
    //検証に失敗したら、`Expected 200 OK response` をエラーメッセージとして、Synthetics コンソールに出力
    assert.ok(response.statusCode == 200, 'Expected 200 OK response');  
        var info = JSON.parse(body);
    //`assert` メソッドの呼び出し。レスポンスのボディが、`{"success":true}`であることを期待。
    //検証に失敗したら、`Expected True results in Response Body` と結果をエラーメッセージとして、Synthetics コンソールに出力
    assert.ok(info.success == true, 'Expected True results in Response Body, result was ' + info.success);
});
Synthetics は例外のスローを許容しません。例外がスローされると、スクリプトは失敗とみなされます。assert モジュールを使うことで、結果を検証できます。また、console.log() を使うと、Synthetics コンソールにログを記録できます。

関連情報

関連する情報は以下のとおりです。