ODCのBDD Framework一般については以下の記事で見た。
ここでは、BDD Frameworkで作成したテストを自動実行できるREST APIの利用法を確認する。
環境情報
ODC Studio(Version 1.4.15)
BDD Framework API (version 0.1.3)
BDDFrameworkTestRunLib (version 0.1.0)
全体像
BDD Framework APIが提供するExpose REST API "TestTrigger/RunTestSuite"を呼ぶことで外部からテストを自動実行できる。

↑の記事でも書いた通り、ODCのBDD Frameworkのテスト画面を実行するにはテストAppに設定したAuthTokenを渡さないといけない。
このAuthTokenが、BDD Framework APIと対象のテストAppで同じ値になっていないと動作しない点に注意(詳細は以下で)。
BDD Framework APIの認証の仕組みを確認する
以下の通り、このAPIはAuthentication=Customなので、OnAuthentication Callbackを確認してみる。

OnAuthenticationの実装
GetRequestHeaderSecurityToken Action
HTTPリクエストヘッダーからAuthorizationの値を取得。
値は「Bearer <AuthToken>」となっているはずなので、<AuthToken>の部分を抜き出す。
ValidateTestCanBeTriggered Action
これは実は、BDDFramework本体のAction。
BDDFrameworkが持っているAuthenticationSecretTokenというSettingsの値1と、GetRequestHeaderSecurityTokenのOutput Parameterが合致するかをチェックする。
合致しない場合、後続のIfでHTTP Status 401 (Unauthorized) として処理する。つまり認証エラー。
APIからテスト画面を呼ぶときのAuthToken
実は、APIの認証で使った値(Authorizationヘッダーから取得した値)を再利用する。
Expose REST API "TestTrigger/RunTestSuite"でテスト画面のURLを組み立てるのが以下のAssign。GetRequestHeaderSecurityTokenのOutput Parameterを渡しているのを確認できる。

つまり、「APIの認証に使うAuthToken(BDD Framework APIのSettingの値)と、テスト画面のアクセスに使うAuthToken(テストAppのSettingの値)には同じ値を使う」⇨「BDD Framework APIのSettingとテストAppのSettingを同じ値にしておく必要がある」。
利用手順(OutSystemsのみを使う場合)
- ODC Portalで、BDD Framework APIのSettings > AuthenticationSecretTokenの値を、テストApp(BDD Frameworkで作成したテスト用App)の同項目に設定したのと同じ値に更新しておく
- BDD Framework APIのExpose REST APIのドキュメントからswagger.jsonのリンクを取得
- 利用側Appでswagger.jsonを使ってConsume REST APIを作成する
- Consume REST APIのプロパティOnBeforeRequestのドロップダウンリストを展開し、New OnBeforeRequestを選択
- OnBeforeRequest内に元からあるAssignの下にListAppendを追加。内容は、CustomizedRequest.HeadersにName="Authorization"、Value="Bearer <AuthTokenの値>"を追加するというもの
- Consume REST APIのメソッドを呼ぶ。TestESpaceにはテストApp名2、TestSuiteScreenにはテストケースを配置したScreenの名前を設定する。BDD Frameworkのテスト実行には時間がかかるので、Server Request TimeoutやTimeoutには大きめの値を設定したほうがいいかもしれない
AuthToken問題の対策
以下のような対策が考えられる。AuthTokenを共有してよいのならもちろん今のままでも良い。
- BDD Framework APIをCloneして、REST APIのInput Parameterにテスト画面用のAuthTokenを追加する
- BDD Framework APIをCloneして、テスト対象AppとそのAuthTokenのセットを、そのCloneしたApp内で管理する(テスト対象画面を呼ぶ際に、管理情報からAuthTokenを取り出して使う)
External Logic BDDFrameworkTestRunLibについて
External LogicなのでC#で作られているはずだが、レポジトリへのリンク等は見当たらない。
また、External Logicは、O11のExtensionと違い、それ自体にはC#のソースコードを含まない。
従って、実際に何をやっているのかを確認することは現時点ではできない。
