この機能により、HTTP 経由でプロシージャーを呼び出すことで、REST サービスとして公開されるプロシージャーのテストが可能になります。
Rest Test オブジェクトを作成する方法は 2つあります。
最初の推奨オプションは、プロシージャーのコンテキストメニューの [ REST テストを作成 ] オプションを使用することです。
作成時に、現在の環境の [
Rest Test Base URL ] プロパティが設定されていない場合は、自動的に生成され、環境のバックエンドの Web Root を使用して設定されます。
これにより、コンテキストメニューから Unit Test オブジェクトが作成されるように、Rest Test オブジェクトが自動的に生成されます。つまり、REST テストと並行して、テストが依存するすべてのデータと、その構造のデータを記述する SDT をロードするための、関連付けられた Data Provider オブジェクトが見つかります。
生成されるこの REST テストと生成されるユニットテストの主な相違点は、SDT に想定されるレスポンスの HTTP ステータスコード用の追加フィールドが含まれ、テストオブジェクトにソースコードおよび変数も含まれるという点です。
テストは、少なくとも次の 3つの追加の変数とともに生成されます:
- &HttpClient: 情報をロードし、テスト対象のサービスへのリモートの呼び出しを実行するための変数。
- &RequestBody: HTTP リクエストの本文をロードするための変数。
- &RestSettings: 環境のベース URL をロードするための変数。
ただし、アプリケーションで GAM の統合セキュリティが有効になっている場合、テスト内で認証を行うために、さらに次の変数も生成されます:
- &GAMApplication: クライアント ID およびクライアントシークレットの取得に使用される変数。
- &LoginAdditionalParameters: 認証タイプのような追加のログインパラメーターを保持するオブジェクト。
- &OAuthAdditionalParameters: 資格情報のスコープのような追加のログインパラメーターを保持するオブジェクト。
- &AccessToken: ログイン後に OAuth アクセストークンを格納するための変数。
前述のように、アプリケーションで GAM の統合セキュリティが有効になっている場合、生成される SDT にいくつかの追加フィールド (User および Password) が提供されます。
ユーザーフィールドおよびパスワードフィールドに資格情報を指定する必要があるため、生成されたテストデータを編集することをお勧めします。その際には、少なくとも別のステータスコードをテストすることを強くお勧めします。たとえば、正しい資格情報を指定する場合は ExpectedStatusCode を 200 に設定し、空のままにする場合は 401 に設定します。
/* Autogenerated Rest test code for Procedure 'Procedure1' */
Do 'Prepare Client'
For &TestCaseData in RestDemoProcedureRestTestData2()
&HttpClient.AddHeader(!'Content-type', !'application/json')
&RequestBody = '{ "inParam": ' + &TestCaseData.inParam.ToString() + '}’
&HttpClient.AddString(&RequestBody)
/* Act... */
&HttpClient.Execute(!"POST", RestDemoProcedure.Type)
// Load &HttpClient response on TestCaseData
&TestCaseData.FromJson(&HttpClient.ToString())
/* Assert... */
AssertNumericEquals(&TestCaseData.ExpectedStatusCode, &HttpClient.StatusCode, format(!'%1.ExpectedStatusCode:', &TestCaseData.TestCaseId))
AssertNumericEquals(&TestCaseData.ExpectedoutParam, &TestCaseData.outParam, format(!'%1.ExpectedoutParam: %2', &TestCaseData.TestCaseId, &TestCaseData.MsgoutParam))
endfor
Sub 'Prepare Client’
&HttpClient.Host = &RestSettings.Host
&HttpClient.Port = &RestSettings.Port
&HttpClient.Secure = &RestSettings.Secure
&HttpClient.BaseUrl = &RestSettings.BaseURL
EndSub
/* Autogenerated Rest test code for Procedure 'Procedure1' */
Do 'Prepare Client'
For &TestCaseData in RestDemoProcedureRestTestData()
&HttpClient.AddHeader(!'Content-type', !'application/json')
&AccessToken = GAMRepository.GetOauthAccessToken(&TestCaseData.User, &TestCaseData.Password, &LoginAdditionalParameters, &OAuthAdditionalParameters, &GAMSession, &GAMErrors)
&HttpClient.AddHeader(!'Authorization', !'OAuth ' + &AccessToken.access_token)
&RequestBody = '{ "inParam": ' + &TestCaseData.inParam.ToString() + '}’
&HttpClient.AddString(&RequestBody)
/* Act... */
&HttpClient.Execute(!"POST", RestDemoProcedure.Type)
// Load &HttpClient response on TestCaseData
&TestCaseData.FromJson(&HttpClient.ToString())
/* Assert... */
AssertNumericEquals(&TestCaseData.ExpectedStatusCode, &HttpClient.StatusCode, format(!'%1.ExpectedStatusCode:', &TestCaseData.TestCaseId))
AssertNumericEquals(&TestCaseData.ExpectedoutParam, &TestCaseData.outParam, format(!'%1.ExpectedoutParam: %2', &TestCaseData.TestCaseId, &TestCaseData.MsgoutParam))
endfor
Sub 'Prepare Client’
&HttpClient.Host = &RestSettings.Host
&HttpClient.Port = &RestSettings.Port
&HttpClient.Secure = &RestSettings.Secure
&HttpClient.BaseUrl = &RestSettings.BaseURL
&GAMApplication = GAMApplication.Get()
&LoginAdditionalParameters.AuthenticationTypeName = !"local」
&OAuthAdditionalParameters.ClientId = &GAMApplication.ClientId
&OAuthAdditionalParameters.ClientSecret = &GAMApplication.ClientSecret
&OAuthAdditionalParameters.Scope = !"FullControl"
EndSub
この機能は GeneXus 17 Upgrade 11 以降で利用できます。