0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ODCのBDD Frameworkで作成したテストをREST APIから実行する手順

Posted at

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"を呼ぶことで外部からテストを自動実行できる。
image.png

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

BDD Framework APIの認証の仕組みを確認する

以下の通り、このAPIはAuthentication=Customなので、OnAuthentication Callbackを確認してみる。
image.png

OnAuthenticationの実装

image.png

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を渡しているのを確認できる。
image.png

つまり、「APIの認証に使うAuthToken(BDD Framework APIのSettingの値)と、テスト画面のアクセスに使うAuthToken(テストAppのSettingの値)には同じ値を使う」⇨「BDD Framework APIのSettingとテストAppのSettingを同じ値にしておく必要がある」。

利用手順(OutSystemsのみを使う場合)

  1. ODC Portalで、BDD Framework APIのSettings > AuthenticationSecretTokenの値を、テストApp(BDD Frameworkで作成したテスト用App)の同項目に設定したのと同じ値に更新しておく
    image.png
  2. BDD Framework APIのExpose REST APIのドキュメントからswagger.jsonのリンクを取得
    image.png
  3. 利用側Appでswagger.jsonを使ってConsume REST APIを作成する
    image.png
  4. Consume REST APIのプロパティOnBeforeRequestのドロップダウンリストを展開し、New OnBeforeRequestを選択
  5. OnBeforeRequest内に元からあるAssignの下にListAppendを追加。内容は、CustomizedRequest.HeadersにName="Authorization"、Value="Bearer <AuthTokenの値>"を追加するというもの
    image.png
  6. Consume REST APIのメソッドを呼ぶ。TestESpaceにはテストApp名2、TestSuiteScreenにはテストケースを配置したScreenの名前を設定する。BDD Frameworkのテスト実行には時間がかかるので、Server Request TimeoutやTimeoutには大きめの値を設定したほうがいいかもしれない
    image.png

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#のソースコードを含まない。
従って、実際に何をやっているのかを確認することは現時点ではできない。

  1. これは、BDD Frameworkのテスト画面アクセス時に渡すAuthTokenの値。BDD FrameworkはLibraryであるため、Consumer Appの設定画面で設定する

  2. eSpaceとはO11のExtension以外のモジュールのことだが、恐らく歴史的理由で残ってしまっている

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?