Posted at
New RelicDay 25

New Relic Synthetics: Web API のテストもできるよ

More than 3 years have passed since last update.

Happy Holidays! とうとう最終日 Advent Calendar 25日目。

デジカの宮澤です。19日のNew Relic Synthetics: selenium で画面遷移も楽々チェック。スクリーンショットも撮れるよ。 に続き、New Relic Synthetics 4回目。API Test を紹介したいと思います。

これも有料機能ですが、2週間無料で利用できるので、是非試してみてください。API Test も設定方法や結果表示画面は基本的に Ping モニターと同じなので、共通部分は省略していきます。気になる方は、New Relic Synthetics: 無料のPingモニターでサイトの稼働状況をらくらくチェック をご覧ください。


API Test とは

その名の通り、API のテストに特化した機能です。雰囲気としては、前回紹介した、Scripted Browser と同じです。専用のスクリプトを書いて、それを定期的に実行するというものです。API のテストに特化した変数などが用意されている点が違います。

New Relic Synthetics では、HTTP リクエストの送信と結果の検証に [http-request}(https://github.com/request/request) モジュールを使っています。それらは、$http オブジェクトを使って利用します。

これも Scripted Browser と同じで、JS ベースでスクリプトを書いていきます。


使い方

これまでのチェック方法(Ping モニターや Scripted Browser)と同様に、テスト名、実行地域、実行頻度、アラート通知の設定を行っていきます。詳しくは、New Relic Synthetics: 無料のPingモニターでサイトの稼働状況をらくらくチェック をご覧ください。(なんか最近、地域の設定(Select monitoring locations)が表示されないのは僕だけだろうか。何回か画面更新してたら出てきた)

synthetics_apitest_01.png

設定できたら、"Next: Write your script" ボタンを押して、スクリプト作成画面に移動します。

synthetics_apitest_02.png

これは、前回の Scripted Browser で見たのとまったく同じ画面ですね。(もちろん中身のスクリプトは違うけど)

この状態で、徐に "Validate" ボタンを押してみます。

synthetics_apitest_03.png

実行結果とレスポンスが確認できますね。

次はあえて、間違えてみます。以下の様にエラーは表示されます。だいたい Scripted Browser と同じ感じですね。

synthetics_apitest_04.png


サンプルスクリプト

上記で試したサンプルのスクリプトは以下のようになっています。参考まで。

/**

* Feel free to explore, or check out the full documentation
* https://docs.newrelic.com/docs/synthetics/new-relic-synthetics/scripting-monitors/writing-api-tests
* for details.
*/

var assert = require('assert');

$http.post('http://httpbin.org/post',
// Post data
{
json: {
widgetType: 'gear',
widgetCount: 10
}
},
// Callback
function (err, response, body) {
assert.equal(response.statusCode, 200, 'Expected a 200 OK response');

console.log('Response:', body.json);
assert.equal(body.json.widgetType, 'gear', 'Expected a gear widget type');
assert.equal(body.json.widgetCount, 10, 'Expected 10 widgets');
}
);


Komoju で試して見る

サンプルの説明だけだと、あまり書く事ないので、今回はちょうど別の Advent Calendarで弊社の決済サービスKomoju のAPIの使い方「決済 API Komoju を使って決済してみる」を紹介していたので、それを使ってテストをしてみたいと思います。

スクリプト

var assert = require('assert');

var data = {
"amount":1000,
"currency":"JPY",
"payment_details[type]":"credit_card",
"payment_details[family_name]":"Yamada",
"payment_details[given_name]":"Taro",
"payment_details[month]":"01",
"payment_details[year]":"2016",
"payment_details[number]":"4111111111111111",
"payment_details[verification_value]":123
};

var options = {
uri: 'https://sandbox.komoju.jp/api/v1/payments.json',
auth : { user: "[your_secret_key]"},
form: data
};

$http.post(options,
function (err, response, body) {
assert.equal(response.statusCode, 200, 'Expected a 200 OK response');

console.log('Response:', body);
var json = JSON.parse(body);
assert.equal(json.status, 'captured', 'Payment is captured');
assert.equal(json.total , 1080, 'Total includes tax');
}
);

※ [your_secret_key] は各自のシークレットキーに置き換えてください

実行(validate)すると、以下のように結果が返ってきます。大丈夫そうですね。

synthetics_apitest_05.png


スクリプトの参考情報

スクリプトを書く際は、以下の情報を参考にするといいと思います。

- Request - Simplified HTTP client

- Write API tests

また、Synthetics の制限として、スクリプトの実行時間が3分を越えるものは、強制的にエラーとなるようです。


結果表示

結果画面(Overview ページ、Results ページ、Resources ページ)は Simple Browser と一緒なので、説明は省略します。Results ページの詳細ページの表示は一部異なりますので、ここでは違いを紹介します。

今日は各画面をスクリーンショットを乗っけていきます。スクリーンショットは、上記の Komoju API の実行結果のものです。


概要

synthetics_apitest_komoju_1.png


結果一覧

このモニターのチェック結果の一覧です。処理時間、レスポンスタイム、最新など様々な条件で並び替えができます。任意のチェック結果を選択すると、次の詳細を表示します。

synthetics_apitest_komoju_2.png


特定のチェック結果

synthetics_apitest_komoju_3.png


上記のチェック結果で、Script Log を選択したとき

ここでは、上記のサンプルで、console.log で指定した内容が出力されているのがわかります。

synthetics_apitest_komoju_4.png


リソースページ

synthetics_apitest_komoju_5.png


特定のリソースの詳細

各種 HTTP リクエスト、レスポンス、処理時間の内訳がみれます。

synthetics_apitest_komoju_6.png


さいごに

どうでしたでしょうか?4回にわたり New Relic Synthetics の各機能を紹介してきました。Web のテストが楽になる感じでしょうか?

そういえば、Selenium 関連だと、Selenium/Appium Advent Calendar 2015 があるようなので、selenium 自体に興味のある方は、そちらもみるとなんか知見が得られるかも。

今回、Komoju のチェックやってて思ったけど、あれは Webhook がいろんなところに仕込まれているんだけど、Webhook のチェックは今の Synthetics ではできないなぁ。それもチェックできるともっと便利なんだけどね。

ではでは、Synthetics を活用して、快適なシステム運用を!