Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 5 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 を活用して、快適なシステム運用を!

kumatronik
基本、Rails エンジニア。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away