All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nablarch.test.core.http.TestCaseInfo Maven / Gradle / Ivy

The newest version!
package nablarch.test.core.http;

import nablarch.core.util.Builder;
import nablarch.core.util.StringUtil;
import nablarch.core.util.annotation.Published;
import nablarch.fw.web.HttpRequest;

import java.util.List;
import java.util.Map;


/**
 * データシートに定義されたテストケース情報を格納するクラス。
* * @author Tsuyoshi Kawasaki * */ @Published public class TestCaseInfo { /** ユーザIDを定義しているカラム名 */ protected static final String USER_ID_COLUMN_NAME = "USER_ID"; /** リクエストIDを定義しているカラム名 */ protected static final String REQUEST_ID = "REQUEST_ID"; /** HTTPメソッドを定義しているカラム名 */ protected static final String HTTP_METHOD_COLUMN_NAME = "HTTP_METHOD"; /** テストケース番号を定義しているカラム名 */ protected static final String TEST_CASE_NO = "no"; /** テストケースを記述しているカラム名 */ protected static final String CASE = "case"; /** ショットの説明を記述しているカラム名 */ protected static final String DESCRIPTION = "description"; /** コンテキストパラメータのLIST_MAP定義名 */ protected static final String CONTEXT_LIST_MAP = "context"; /** CookieのLIST_MAP定義名 */ protected static final String COOKIE_LIST_MAP = "cookie"; /** CookieのLIST_MAP定義名 */ protected static final String QUERYPARAMS_LIST_MAP = "queryParams"; /** トークンを設定するかどうかを記述しているカラム名 */ protected static final String IS_VALID_TOKEN = "isValidToken"; /** データベースにデータを投入する際のグループIDを表すカラム名 */ protected static final String SET_UP_TABLE = "setUpTable"; /** HTTPステータスコードの期待値を定義しているカラム名(LIST_MAP=テストケース) */ protected static final String EXPECTED_HTTP_STATUS_COLUMN = "expectedStatusCode"; /** HTTPステータスコードの期待値を定義しているカラム名(LIST_MAP=テストケース) */ protected static final String EXPECTED_MESSAGE_ID_COLUMN = "expectedMessageId"; /** 検索結果の期待値を定義しているカラム名(LIST_MAP=テストケース) */ protected static final String EXPECTED_SEARCH_COLUMN = "expectedSearch"; /** テーブル期待値を定義しているカラム名(LIST_MAP=テストケース) */ protected static final String EXPECTED_TABLE_COLUMN = "expectedTable"; /** 要求電文の期待値を定義しているカラム名(LIST_MAP=テストケース) */ protected static final String EXPECTED_MESSAGE_COLUMN = "expectedMessage"; /** 応答電文を定義しているカラム名(LIST_MAP=テストケース) */ protected static final String RESPONSE_MESSAGE_COLUMN = "responseMessage"; /** リクエストスコープに格納する検索結果のキー名 */ protected static final String DEFAULT_SEARCH_RESULT_KEY = "searchResult"; /** 期待するフォワードURIを定義しているカラム名(LIST_MAP=テストケース) */ protected static final String EXPECTED_FORWARD_URI = "forwardUri"; /** コンテンツレングス・ヘッダの期待値を定義しているカラム名(LIST_MAP=テストケース) */ protected static final String EXPECTED_CONTENT_LENGTH = "expectedContentLength"; /** コンテンツタイプ・ヘッダの期待値を定義しているカラム名(LIST_MAP=テストケース) */ protected static final String EXPECTED_CONTENT_TYPE = "expectedContentType"; /** コンテンツディスポジション・ヘッダに指定されたファイル名の期待値を定義しているカラム名(LIST_MAP=テストケース) */ protected static final String EXPECTED_CONTENT_FILENAME = "expectedContentFileName"; /** シート名 */ private final String sheetName; /** テストケース毎のパラメータ */ private final Map testCaseParams; /** コンテキスト */ private final List> context; /** リクエスト */ private final List> request; /** 期待するレスポンスのパラメータ */ private final List> expectedResponseParams; /** Cookie情報 */ private final List> cookie; /** クエリパラメータ情報 */ private final List> queryParams; /** リクエストスコープ値アサートを行うか?(各テストケースで個別検証する場合にfalseを設定) */ private boolean isAssertRequestScopeVar = true; /** メッセージIDのアサートを行うか?(各テストケースで個別検証する場合にfalseを設定) */ private boolean isAssertApplicationMessageId = true; /** リクエストスコープ内に格納された検索結果を取得するためのキー */ private String searchResultKey = DEFAULT_SEARCH_RESULT_KEY; /** * リクエストスコープ内に格納された検索結果を取得するためのキーを取得する。 * @return キー */ public String getSearchResultKey() { return searchResultKey; } /** * リクエストスコープ内に格納された検索結果を取得するためのキーを設定する。 * @param searchResultKey キー */ @SuppressWarnings("unused") public void setSearchResultKey(String searchResultKey) { this.searchResultKey = searchResultKey; } /** * コンストラクタ * * @param sheetName テストシート名 * @param testCaseParams テストケースパラメータ * @param context スレッドコンテキスト・ユーザコンテキスト生成用パラメータ * @param request リクエストパラメータ * @param expectedResponseListMap レスポンス期待値パラメータ */ public TestCaseInfo(String sheetName, Map testCaseParams, List> context, List> request, List> expectedResponseListMap) { this(sheetName, testCaseParams, context, request, expectedResponseListMap, null); } /** * コンストラクタ * * @param sheetName テストシート名 * @param testCaseParams テストケースパラメータ * @param context スレッドコンテキスト・ユーザコンテキスト生成用パラメータ * @param request リクエストパラメータ * @param expectedResponseListMap レスポンス期待値パラメータ * @param cookie Cookie情報 */ public TestCaseInfo(String sheetName, Map testCaseParams, List> context, List> request, List> expectedResponseListMap, List> cookie) { this(sheetName, testCaseParams, context, request, expectedResponseListMap, cookie, null); } /** * コンストラクタ * * @param sheetName テストシート名 * @param testCaseParams テストケースパラメータ * @param context スレッドコンテキスト・ユーザコンテキスト生成用パラメータ * @param request リクエストパラメータ * @param expectedResponseListMap レスポンス期待値パラメータ * @param cookie Cookie情報 * @param queryParams クエリパラメータ情報 */ public TestCaseInfo(String sheetName, Map testCaseParams, List> context, List> request, List> expectedResponseListMap, List> cookie, List> queryParams) { this.sheetName = sheetName; this.testCaseParams = testCaseParams; this.context = context; this.request = request; this.expectedResponseParams = expectedResponseListMap; this.cookie = cookie; this.queryParams = queryParams; } /** * メッセージID(期待値)を返却する.
* * @return メッセージID(複数存在する場合はカンマ区切り) */ public String getExpectedMessageId() { return getValue(testCaseParams, EXPECTED_MESSAGE_ID_COLUMN); } /** * HTTPレスポンス(期待値)を返却する.
* * @return リクエストスコープに設定されるはずの期待値 */ public Map getExpectedRequestScopeVar() { return expectedResponseParams.get(Integer.parseInt(getTestCaseNo()) - 1); } /** * 検索結果検証の期待値を特定するIDを返却する.
* * @return テーブル期待値ID(expectedSearchカラムに定義したデータ) */ public String getExpectedSearchId() { return getValue(testCaseParams, EXPECTED_SEARCH_COLUMN); } /** * HTTPステータスコード(期待値)を返却する.
* * @return HTTPステータスコード */ public String getExpectedStatusCode() { return getValue(testCaseParams, EXPECTED_HTTP_STATUS_COLUMN); } /** * テーブル検証の期待値を特定するIDを返却する.
* * @return テーブル期待値ID(expectedTableカラムに定義したデータ) */ public String getExpectedTable() { return testCaseParams.get(EXPECTED_TABLE_COLUMN); } /** * フォワード先URIの期待値を返却する。 * * @return フォワード先URIの期待値 */ public String getExpectedForwardUri() { return getValue(testCaseParams, EXPECTED_FORWARD_URI); } /** * コンテンツレングス・ヘッダの期待値を返却する。 * * @return コンテンツレングス・ヘッダの期待値 */ public String getExpectedContentLength() { return testCaseParams.get(EXPECTED_CONTENT_LENGTH); } /** * コンテンツタイプ・ヘッダの期待値の期待値を返却する。 * * @return コンテンツタイプ・ヘッダの期待値の期待値 */ public String getExpectedContentType() { return testCaseParams.get(EXPECTED_CONTENT_TYPE); } /** * コンテンツディスポジション・ヘッダに指定されたファイル名の期待値を返却する。 * * @return コンテンツディスポジション・ヘッダに指定されたファイル名の期待値 */ public String getExpectedContentFileName() { return testCaseParams.get(EXPECTED_CONTENT_FILENAME); } /** * 要求電文(期待値)を返却する.
* * @return 要求電文(期待値) */ public String getExpectedMessage() { return getValue(testCaseParams, EXPECTED_MESSAGE_COLUMN); } /** * 応答電文を返却する.
* * @return 応答電文 */ public String getResponseMessage() { return getValue(testCaseParams, RESPONSE_MESSAGE_COLUMN); } /** * テスト対象とするリクエストIDを返却する.
* * @return リクエストID */ public String getRequestId() { String requestId = getValue(context.get(0), REQUEST_ID); if (StringUtil.isNullOrEmpty(requestId)) { throw new IllegalArgumentException(Builder.concat( REQUEST_ID, " value in context LIST_MAP is null or empty.", "case no = [", getTestCaseNo(), "]")); } return requestId; } /** * テストリクエストのHTTPメソッドを返却する.
* 任意指定項目であり、指定されていない場合はPOSTを返却する。 * @return HTTPメソッド */ public String getHttpMethod() { String httpMethod = context.get(0).get(HTTP_METHOD_COLUMN_NAME); return StringUtil.hasValue(httpMethod) ? httpMethod : "POST"; } /** * Cookieを返却する。 * @return Cookie情報 */ public Map getCookie() { if (null == cookie || cookie.isEmpty()) { return null; } return cookie.get(0); } /** * クエリパラメータを返却する。 * @return クエリパラメータ情報 */ public Map getQueryParams() { if (null == queryParams || queryParams.isEmpty()) { return null; } return queryParams.get(0); } /** * データシートに定義されたリクエストパラメータを取得する *
     * デフォルトでは、LIST_MAP「testCases」の「requestParams」カラムで指定されている
     * LIST_MAPのレコードを取得する
     * 
* * @return リクエストパラメータ */ public Map getRequestParameters() { int caseNo = Integer.parseInt(getTestCaseNo()); if (request.size() < caseNo) { throw new IllegalArgumentException(Builder.concat( "Request parameter is not defined or request parameter list size is invalid.", "case no = [" + caseNo + "]")); } return request.get(caseNo - 1); } /** * リクエストパラメータを設定するかどうかを返却する * * @return boolean */ @SuppressWarnings("unused") public boolean isRequestParametersSet() { return !request.isEmpty(); } /** * テーブルセットアップデータ定義を特定するためのIDを返却する.
*
     * SETUP_TABLE[xxxx]=tableName  : 左記例のxxxの部分
     * 
* * @return セットアップデータID(setUpTableカラムに定義したデータ) */ public String getSetUpTableGroupId() { if (testCaseParams.containsKey(SET_UP_TABLE)) { return getValue(testCaseParams, SET_UP_TABLE); } return ""; } /** * データシート名を返却する
* * @return データシート名 */ public String getSheetName() { return sheetName; } /** * テストケース名称を取得する.
* テスト失敗時のメッセージやHTMLファイル出力名に使用される。 デフォルトは、{データシート名}_{caseIndex}_{Case名}
* 例)RGBN00000000_Case0_初期表示
* * @return テストケース名称 */ public String getTestCaseName() { String description = testCaseParams.get(DESCRIPTION); if (StringUtil.isNullOrEmpty(description)) { // 下位互換性維持のため、caseでも取得する。 description = testCaseParams.get(CASE); } if (StringUtil.isNullOrEmpty(description)) { throw new IllegalStateException("column '" + DESCRIPTION + "' is not defined."); } return Builder.concat( sheetName, "_Shot", getValue(testCaseParams, TEST_CASE_NO), "_", description); } /** * テストケース番号を取得する。 * @return テストケース番号 */ public String getTestCaseNo() { String no = getValue(testCaseParams, TEST_CASE_NO); if (StringUtil.isNullOrEmpty(no)) { throw new IllegalArgumentException(Builder.concat( TEST_CASE_NO + " value in testShots LIST_MAP is null or empty", "case no = [" + no + "]")); } return no; } /** * ユーザIDを取得する。 * @return ユーザID */ public String getUserId() { if (null == context || 1 != context.size()) { throw new IllegalArgumentException("Context LIST_MAP must be 1 row."); } return getValue(context.get(0), USER_ID_COLUMN_NAME); } /** * LIST_MAPから取得したレコードから、指定したカラム名に対応する値を取得する
* @param row 行レコード(LIST_MAPの各要素) * @param columnName カラム名 * @return 指定したカラム名に対応する値 */ protected final String getValue(Map row, String columnName) { if (!row.containsKey(columnName)) { throw new IllegalArgumentException("column '" + columnName + "' is not defined."); } return row.get(columnName); } /** * 検索結果の検証をするかどうかを返却する.
* * @return boolean */ public boolean isAssertSearch() { return StringUtil.hasValue(getExpectedSearchId()); } /** * テーブル値を検証するかどうか返却する.
* * @return boolean */ public boolean isAssertTable() { return StringUtil.hasValue(getExpectedTable()); } /** * テーブルをセットアップするかどうかを返却する.
* * @return boolean */ public boolean isSetUpTable() { return StringUtil.hasValue(getSetUpTableGroupId()); } /** * トークン制御を行うかどうかを返却する.
* * @return boolean */ public boolean isValidToken() { return Boolean.parseBoolean(getValue(testCaseParams, IS_VALID_TOKEN)); } /** * リクエストスコープ値を比較検証するかどうかを返却する.
* * @return boolean */ public boolean isAssertRequestScopeVar() { return isAssertRequestScopeVar && !expectedResponseParams.isEmpty(); } /** * リクエストスコープ値を比較検証するかどうかを設定する *
     * 各テストケースにて比較検証を個別実装する場合にfalseに設定する。
     * {@link AbstractHttpRequestTestTemplate#beforeExecuteRequest(TestCaseInfo, nablarch.fw.ExecutionContext, Advice)}にて
     * にてfalseへの設定を行うこと。
     * 
* @param isAssert boolean(デフォルト値はTrue) */ public void setIsAssertRequestScopeVar(boolean isAssert) { this.isAssertRequestScopeVar = isAssert; } /** * メッセージIDの検証を行うかどうかを返却する。 * @return boolean */ public boolean isAssertApplicationMessageId() { return isAssertApplicationMessageId; } /** * メッセージIDの検証を行うかどうかを設定する。 * @param isAssert boolean(デフォルト値はTrue) */ public void setIsAssertApplicationMessageId(boolean isAssert) { this.isAssertApplicationMessageId = isAssert; } /** このテストケースのHTTPリクエスト */ private HttpRequest requestOfThisCase = null; /** * HTTPリクエストを取得する。 * * @return このテストケースのHTTPリクエスト */ public HttpRequest getHttpRequest() { return requestOfThisCase; } /** * HTTPリクエストを設定する。 * * @param requestOfThisTestCase このテストケースのHTTPリクエスト */ void setHttpRequest(HttpRequest requestOfThisTestCase) { this.requestOfThisCase = requestOfThisTestCase; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy