[OutSystems]BDDFramework Client SideのAPI実行


最近追加された、OutSystemsのClient Actionに対してユニットテストを書けるモジュール、BDDFramework Client Side。
このモジュールにも、BDDFrameworkと同じREST APIが提供されていて、外部から自動実行させることができます。

確認環境

Personal Environment(Version 11.12.0 (Build 30002))
Service Studio (Version 11.11.9)
BDDFramework Client Side (Version 1.0.0)

REST APIでのテスト動作の仕組み

以下の図で操作の流れを説明します。

①:利用者が、TestRunner_APIモジュールにあるREST APIに実行をリクエスト
②:REST APIは、内部でTestRunner_Ext ExtensionにあるActionを起動
③:Actionは、PuppeteerSharpというライブラリを経由してChromiumをサーバー上で操作
④:渡されたパラメーターからテスト対象画面のURLを決定し、Chromiumに開くことでテストを実行する。実行が完了したことを検知すると、テストスイートのJavaScriptオブジェクトをJSONに変換する関数を実行して結果を取り出す

API実行方法

事前準備

BDDFrameworkClientSideをブラウザでプレビューすると、Welcome Screenが以下の通り開きます。

テストをAPI経由で実行するためには、この画面でChromiumをサーバーにインストールしておく必要があります。
インストール作業はボタンを押すだけ。背後で、必要なファイルのダウンロードと保存が行われます。

一度ダウンロードしておけば、Welcome画面の「Chromium Status」が「Chromium is correctly installed.」に変わるのでわかります。

API

Forgeからインストールしたアプリケーション内に、TestRunner_APIというモジュールがあります。
このモジュールのLogicタブ > Integrationsフォルダ > RESTの下に、

というAPI。
2つありますが、処理はほぼ同じ。ここでは、v2の方のインターフェースを見ていきます。

なんで出たばかりのモジュールにv1とv2の2バージョンのAPIがあるのかというと、(Client Sideではない)BDDFrameworkに合わせたものと思われます。

BDDFramework APIのバージョンの違いについては、以下を参照してください。
API V2

パラメータの確認

ここでは、動作確認に必要な分だけ見ていきます。

  • TestESpace:BDDFramework Client Sideを利用して作成した「テストケースを含むモジュール名」
  • TestSuiteScreen:上記モジュール内で、実行したい「テストスイート画面名」

必須なのは上記2つのみ。

APIのURLは、

https://OutSystems環境のホスト/TestRunner_API/rest/v2/BDDTestRunner/「テストケースを含むモジュール名」/「テストスイート画面名」

TestESpaceとTestSuiteScreen以外のパラメータはheader渡しであるため、HTTPリクエストのヘッダーに詰めて渡す。テストするときはPostmanとかFiddlerが便利ですね。API動作確認が目的であれば、指定不要です。

実行結果はJSONで返ってきます。テストスイート内での成功ケース数、失敗ケース数、各ケースのidやDescriptionなど。

PEでの動作について

API経由でのテスト実行は、Personal Environmentではサポートされていません。
ドキュメントによると、Chromiumをサーバーにインストールする権限がないためとのこと。

Chromiumのダウンロードは、TestRunner_Ext ExtensionのDownloadChromium Actionで行います。このActionはPuppeteerSharpを使っています。実はUltimatePDFという別のForgeコンポーネントもこれを使っていて、そちらはTempフォルダにダウンロードすることで権限問題を回避しているようです。つまり、この方法を取れば、BDDFramework Client SideをPersonal Environmentで実行することは不可能ではないことに。

関連

Client Action用のBDDFrameworkのチュートリアル