この記事では、LINEプラットフォームで提供している広告クライアントモジュールをテストした方法をご紹介します。LINEの広告クライアントモジュールは、モバイルとWebで使用できますが、ここではモバイルクライアントのテスト方法だけを説明したいと思います。 LINE Ads Platformの概要 LINE Ads Platformは、下図のようにシンプルな構造になっています。サーバとクライアント間の通信には多様なプロトコルが使用できますが、今回のテストはHTTPプロトコルを対象にしています。 テスト環境の概要 LINE Ads Platformはサーバ-クライアント構造のシステムですが、このような環境でクライアントの多様な動作をテストする場合は、障害になる要素がある可能性があります。テストを行う主体(人間または自動化されたシステム)は、各テストを実施する度に特定の動作をサーバに期待します。 しかし、毎回サーバを修正して期待通りの動作を誘導することは効率的ではありません。特に、サーバの失敗状態をテストするための環境を構成するのは簡単なことではありません。 このような困難を解決し、テストをより容易にするために、実際のサーバの動作を模倣するツールを使用しました。HTTPをベースにした多様なモックサーバ(mock server)ツールがありますが、LINEの広告クライアントモジュールのテストにはWireMockというツールを使用しました。下図は、WireMockを用いたテスト環境をダイアグラムで表したものです。 上図にある各要素の役割は以下のとおりです。 Mobile Device : テスト対象のアプリケーションをインストールし、そのアプリケーションをテストするためのコードが動作する実際のスマートフォン、エミュレータまたはシミュレータ。 Client App : LINE広告クライアントモジュールが使われたアプリケーション。テストコードはこのアプリケーションのUIを操作して広告クライアントモジュールSDKを動作させることで、多様なシナリオのテストを実施できる。 SDK : LINE広告クライアントモジュール。 Testing App : テストコードを含んでいるバイナリ。 Testing Helper: テストコードで使用するモジュール。テストで期待される動作をサーバに設定し、各リクエストに対する有効性を検証するために情報をサーバに依頼する機能を提供する。 Server PC : モックサーバが動作しているPC。 Server App : クライアントのテストに必要なサーバの動作を実装したサーバアプリケーションで、Javaで作成されている。基本的にはWireMockのHTTP Mock機能を使用し、自動化されたテストを実施するために必要な一部の機能を追加することもある。 WireMock : HTTPベースのサーバAPIを簡単に定義し使用できるようにサポートするオープンソースツール。 Mappings : 特定のリクエストに対するレスポンスを定義しているファイル。WireMockで使用し、JSON形式で作成される。 Response files : Mappingsに定義された一部のレスポンスを外部ファイルとして提供するときに使用する。WireMockで使用し、テキストファイルで作成される。LINE広告クライアントモジュールではJSON形式で作成されたファイルのみ使用する。 WireMockの紹介 WireMockの公式Webサイトでは、WireMockは、HTTPベースのAPIのためのシミュレータであり、サービス仮想化ツールまたはモックサーバとして考慮する価値があると紹介しています。 WireMockが提供する機能は以下のとおりです。 Stubbing : 事前に定義したマッチング情報を基にリクエストに対するHTTPレスポンスを定義し、適切なレスポンスを返す機能を提供する。 Verifying : WireMockは受信したすべてのリクエスト情報を記憶し、特定のリクエストの受信有無および詳細情報を確認できる機能を提供する。 Request Matching : URL、HTTPメソッド、Headersなど多様な属性情報を利用してリクエストを識別する機能を提供する。 Proxying : 特定のリクエストを別のホストに転送できるプロキシ機能を提供する。 Record and Playback : 転送されたリクエストとレスポンスを記録し、ファイルで保存する機能を提供する。 Simulating Faults : エラーコードを含むHTTPレスポンスまたは間違った形式のレスポンスを送信したり、レスポンスを遅延させたりする機能を提供する。 Stateful Behaviour : 状態を定義し、状態によって異なるレスポンスを定義できる機能を提供する。 HTTPS : WireMockは、必要に応じ、HTTPSでもリクエストを送信できる機能を提供する。 WireMockの使い方 WireMock機能を使用したアプリケーションを作成するためには、WireMockに対する依存性を追加する必要があります。 Mavenビルドを使用するプロジェクトでは、以下のとおり追加します。 Maven <dependency> <groupId>com.github.tomakehurst</groupId> <artifactId>wiremock</artifactId> <version>x.x.x</version> </dependency> Gradleビルドを使用するプロジェクトでは、以下のとおり追加します。 Gradle testCompile "com.github.tomakehurst:wiremock:x.x.x" コード作成中にWireMockのAPIを使用するために、以下の構文をimportします。 import static com.github.tomakehurst.wiremock.client.WireMock.*; 別途のアプリケーションを作成せず、Javaコマンドを使ってWireMockを実行できます。 リポジトリから希望するバージョンのjarファイルをダウンロードし、以下のコマンドを実行します。コマンドに対する付加オプションについては、ヘルプを参考にしてください。 $ java -jar wiremock-standalone-x.x.x.jar User Interface Testing (…)
↧