AWS Lambdaをテストする際の課題とソリューション Vol.2

IoTシステムにおいてAWS Lambda関数の品質保証で採用すべきテストのベストプラクティスをご紹介する記事です。

はじめに

この記事は、「IoTシステムでAWS Lambdaをどうテストすべきか Vol.1」の続きです。
こちらでは、AWS で構築したシステムのテストを実施する際に起こりうる課題とそのソリューションについてご紹介します。

テスト実施時の課題

IoTシステムはフロントエンド、バックエンド、機器の間でデータ連携することで適切に動作します。今回のようなIoTシステムをテストする場合は、スマートフォンのアプリケーション、AWSの各種サービス、エアコンの間でRESTやMQTTなどのプロトコルを用いた適切なデータ連携が必要になります。この記事ではRESTやMQTTなどのプロトコルでデータ連携することをAPI連携と定義します。

もし、これら3つの各々のテストが不十分なままAPI連携し、結合テストを実施してしまうと、エラーが発生した場合にどこに原因があるのかを突き止めるのが困難になります。そのため、各々の品質を十分に確保した上でAPI連携し、結合テストを実施するのがベストプラクティスであると言えます。

また、この例ではフロントエンドのスマートフォンのアプリケーションとバックエンドのAPIの処理を記述するLambda関数は、それぞれ別のチームが開発を担当する並行開発が一般的です。このとき、APIの利用者(フロントエンド)とAPIの開発者(バックエンド)は独立してテストすることになりますが、この場合もさまざまな課題に直面することとなりますので、その一例をご紹介します。

スマートフォンのアプリケーションをテストする場合

フロントエンドのスマートフォンのアプリケーションをテストする場合、バックエンドのLambda関数とのAPI連携が必須となります。さらに、テストの内容によってはエアコンともAPI連携するユースケースもありますので、本物のエアコンも用意する必要があります。バックエンドのLambda関数を利用したテストを実施したいが、Lambda関数の開発が遅延しているなどのさまざまな理由で、APIを利用できるタイミングが限られてしまい待たされるというケースがよくあります。また、エアコンなどの実機をテストのために気軽に用意するのが難しいという声もあります。そのため、バックエンドと同様の応答をするスタブを自作するケースもありますが、応答のバリエーションが不十分であったり、メンテナンスに工数が掛かるといった課題が発生します。

Lambda関数をテストする場合

バックエンドのLambda関数を直接テストする場合、スマートフォンのアプリケーションから送信される電文をシミュレートするテストドライバーが必要となります。自作でテストドライバーを作成するケースも多くありますが、テストが不十分になりがちです。その原因としては、複数のAPIを想定した順番で呼び出すシナリオテストをプログラミングで作成するのが困難なことや、アプリケーションのバージョンアップが頻繁にあるためにテストドライバーのメンテナンスが追い付かないことが考えられます。ほかにも、自作のテストドライバーではテストを自動化できないので効率的ではないという声もあります。また、Lambda関数に関連した性能面のテストをしたいが、工数が掛かるためにパフォーマンス・負荷テストを実施できていないというケースもあります。

ソリューション

APIテスト自動化/サービス仮想化ツール「SOAtest/Virtualize」

そこで、テストを実施する際のあらゆる課題を解決するツールである、「SOAtest/Virtualize」についてご紹介します。SOAtest/Virtualizeは、APIテスト自動化/サービス仮想化ツールであり、APIの開発者/利用者の課題を1ツールで解決できます。以下ではSOAtestおよびVirtualizeの概要をご説明します。

API利用者の課題を解決するサービス仮想化「Virtualize」

Virtualizeはスタブの機能を持ち、受信したリクエスト電文に対して適切に応答することが可能です。あたかも本物のAPIを利用しているかのようにふるまうため、API利用者のテストに必要な疑似環境を作成することが可能です。Virtualizeは受信したリクエストを賢く判断し、応答すべきAPIに成り代わって適したデータを返すことができます。CSVやEXCELなどで用意したデータソースを取り込めば、用意されたデータの分だけバリエーションに富んだ応答ができます。

VirtualizeはSwaggerなどのIF定義ファイルを読み込んで疑似環境を自動生成することや、現新比較のテストで必要なテスト環境を作成する場合には、API連携で送受信するトラフィックをキャプチャし、疑似環境を自動生成することも可能です。さらに、設定はすべてGUI上で行いますので直感的な操作や容易にメンテナンスすることが可能です。Virtualizeを利用することで、さまざまな理由で本物のAPIが利用できない状況であっても、APIを利用しているかのようなテストをいつでも実施することができます。

API開発者の課題を解決するAPIテスト自動化ツール「SOAtest」

SOAtestはテストドライバーの機能を持ち、APIへのリクエスト電文をシミュレートします。テスト実行後にAPIから返されるレスポンス電文の検証も自動で行いますので、APIテストの自動化を実現できます。また、テストドライバー間で値を受け渡すシナリオテストも、GUI上の操作のみで簡単に実施できます。テストに使用するデータをCSVやEXCELでデータソースとして用意し、テストドライバーに流し込むことで、豊富なバリエーションでテストを実施することも可能です。

SOAtestはSwaggerなどのIF定義ファイルを読み込んでテストドライバーを自動生成することやAPI連携で送受信するトラフィックをキャプチャしシナリオテストを自動生成することも可能です。また、APIテストの機能以外にも、データベースの検証を行う機能やエビデンスの自動収集機能にくわえて、リモートのサーバーにコマンドを打ち込んでからAPIテストを実施する機能なども搭載されています。SOAtestでは、APIテストに関連する諸々の処理を含めて1つのシナリオとして自動化することが可能です。

また、SOAtestにはAPIのパフォーマンス・負荷テストの機能も搭載されています。APIの機能テスト用に作成したテスト資産をそのまま利用して、パフォーマンス・負荷テストを実施することができます。
こちらの機能の詳細につきましては、APIのパフォーマンス・負荷テストのページもご参照ください。

SOAtest/Virtualizeを利用したテスト戦略

以下では、SOAtest/Virtualizeを利用したテスト戦略の例をご紹介します。

スマートフォンのアプリケーションのUIテスト

Virtualizeを利用しLambda関数以降の応答を仮想化します。これで、スマートフォンのUIテストが可能な疑似環境を作成できますので、バックエンドに依存せずいつでもテストを実施することができます。テストを実施するためにLambda関数を利用したり、実機のエアコンを用意する必要はありません。また、必要に応じて一部は実際の他社システムを利用し、その他の連携システムはVirtualizeで仮想化してテスト環境を用意することも可能です。

Lambda関数のAPIテスト

SOAtestでスマートフォンからのAPIリクエスト電文をシミュレートすることで、Lambda関数のテストを自動化できます。APIを呼び出す前のCognito 認証もSOAtestで実施可能ですので、認証からテストまでを1つのシナリオとして自動化することができます。エアコンを操作するテストを実施する場合は、事前にVirtualizeでエアコンの応答を仮想化しておくことで実機のエアコンを用意せずにテストすることも可能です。また、APIやLambda関数の呼び出しに伴う、AWS上の性能面のテストも併せて実施することもできます。

まとめ

本記事では、AWSで構築したIoTシステムのテスト戦略として、スマートフォンのアプリケーションのUIテストとLambda関数のAPIテストについてご紹介しました。SOAtest/Virtualizeを利用することで、並行開発おけるテスト対象を独立させていつでもテストを実施することが可能です。SOAtest/Virtualizeは非常に多機能であり、さまざまなユースケースで活用いただけますので、ご興味がございましたら、「APIテスト自動化」および「サービス仮想化」のページもご覧ください。

APIのテスト自動化とサービス仮想化を1ツールで SOAtest/Virtualizeに
関するお問い合わせ

  • テクマトリックス株式会社
    東京本社

    ソフトウェアエンジニアリング事業部

    03-4405-7853

メールでのお問い合わせ
parasoft-info@techmatrix.co.jp

お問い合わせ

製品についてやテクマトリックスについてなど、
こちらよりお気軽にお問い合わせいただけます。