この例では、IBM の取引アプリケーションを使用した株購入トランザクションの記録を使用します。 ここで示す概念は、その他のアプリケーションのテストでも使用できます。
テストでは初めに、ログイン ID のデータプール置換を使用して、株購入トランザクションを記録します。
以下の図に示すように、ページは 5 回反復するループで折り返されます。
テストのページの中に、3 つのカスタム・コード項目があることに注意してください。カスタム・コード項目は「C」の文字がある緑色の円で示されています。 この例では、 これらのカスタム・コード項目を探索します。
1 番目のカスタム・コード項目 InitializeBuyTest には、以下のコードが含まれています。
package customcode;
import java.util.Random;
import com.ibm.rational.test.lt.kernel.IDataArea;
import com.ibm.rational.test.lt.kernel.services.ITestExecutionServices;
import com.ibm.rational.test.lt.kernel.services.IVirtualUserInfo;
/**
* @author unknown
*/
public class InitializeBuyTest implements
com.ibm.rational.test.lt.kernel.custom.ICustomCode2 {
/**
* no-arg コンストラクターを使用してこのインスタンスを作成する。
*/
public InitializeBuyTest() {
}
/**
* ICustomCode2 および ITestExecutionServices インターフェースの説明については、
* Javadoc 情報を参照してください。 */
public String exec(ITestExecutionServices tes, String[] args) {
// テストのデータ域を取得し、まだエラーが発生していないことを示すフラグを
// 設定する。 このフラグは、エラー検出時にただちにスケジュール・ループを
// 中断するために後で使用される。
IDataArea dataArea = tes.findDataArea(IDataArea.TEST);
dataArea.put("failedYet", "false");
// 仮想ユーザーのデータ域を取得する。
IDataArea vda = tes.findDataArea(IDataArea.VIRTUALUSER);
// s:0 から s:499 までのセットから、購入する株をランダムに選択する。
IVirtualUserInfo vuInfo = (IVirtualUserInfo) vda.get(IVirtualUserInfo.KEY);
Random rand = vuInfo.getRandom();
String stock = "s:" + Integer.toString(rand.nextInt(499));
// 株の名前を仮想ユーザーのデータ域に保管する。
vda.put("myStock", stock);
return stock;
}
このカスタム・コードは、メソッド exec() 内に配置されています。
まず、フラグ値 (この例ではテキスト・ストリング) を保管するためにテストのデータ域が獲得されます。このフラグ値は、後でエラーが検出された場合にテスト・ループを停止する目的で使用されます。 この方法で保管されるデータは、複数のテストにわたって保持できます。
次に、ランダムに生成された株のストリングが作成されます。 この値は変数 stock として保管され、メソッドの 戻り値として戻されます。 この戻り値は、以下の図に示すように、要求での置換として後で使用されます。
強調表示されている項目は、置換 (s%3A716) を使用します。これは、InitializeBuyTest カスタム・コード項目から戻された値です。 カスタム・コードを使用してテストの方向を駆動します。
InitializeBuyTest の次のコード行は、Virtual User データ域を使用して、今後の参照用に株名を保管します。 今回も、この方法で保管されたデータは複数のテストにわたって保持されます。
2 番目のカスタム・コードは CheckStock といいます。 この内容を次に示します (ここでは exec() メソッドのみをリストします)。
public String exec(ITestExecutionServices tes, String[] args) {
// 実際に購入した株と要求された株を取得する。
String actualStock = args[0].replaceAll("<B>", "");
actualStock = actualStock.substring(0, actualStock.indexOf("<"));
String requestedStock = args[1];
// ログ・レベルを ALL に設定する。
IDataArea dataArea = tes.findDataArea(IDataArea.TEST);
ITestInfo testInfo = (ITestInfo)dataArea.get(ITestInfo.KEY);
testInfo.setTestLogLevel(ITestLogManager.ALL);
// ログ・レベルが ALL に設定されている場合は、実際の購入株と要求株を
// レポートする。
ITestLogManager testLogManager = tes.getTestLogManager();
if (testLogManager.wouldReport(ITestLogManager.ALL)) {
testLogManager.reportMessage("Actual stock purchased: "
+ actualStock + ". Requested stock: " + requestedStock
+ ".");
}
// 実際の購入株と要求された株が一致しない場合は、FAIL 判断を実行する。
if (testLogManager.wouldReport(ITestLogManager.ALL)) {
if (!actualStock.equalsIgnoreCase(requestedStock)) {
testLogManager.reportVerdict(
"実際の購入株と要求された株が一致しません。",
VerdictEvent.VERDICT_FAIL);
// テストのデータ域を使用して、エラーが発生したことを
// 記録する。
dataArea.put("failedYet", "true");
}
}
return null;
}
このコードではまず、コードに渡された 2 つの引数を抽出します。 次の図に示すように、元の記録の応答の一部が強調表示され、参照として使用されます。
必要なテキスト (この例では実際に購入した株の名前) を獲得するには、何らかのストリング処理が必要です。 この新規に作成された参照は、以下の図に示すように、その後引数として CheckStock に渡されます。
InitializeBuyTest の戻り値も引数として渡されている点に 注意してください。
CheckStock カスタム・コード項目は、これらの値を使用して、InitializeBuyTest によって生成されたランダムに選択された株が、テスト実行中に実際に購入されたことを検査します。
CheckStock は次にテスト・ログ・レベルを設定し、実際の購入株と要求されていた株を報告し、これらの値が一致しない場合には FAIL 判断を出します。 CheckStock はまた、タグ failedYet に関連 付けられている値 true をテストのデータ域に保管します。
3 番目のカスタム・コード (exec() メソッドのみ) には、以下のコードが含まれます。
public String exec(ITestExecutionServices tes, String[] args) {
// テスト・ログ・マネージャーを取得する。
ITestLogManager testLogManager = tes.getTestLogManager();
// テストのデータ域を取得し、エラーが発生したかどうかを示す
// フラグを取得する。 エラーが検出された場合はループを停止する。
IDataArea dataArea = tes.findDataArea(IDataArea.TEST);
String failedYet = (String) dataArea.get("failedYet");
// エラーが発生している場合はループを中断する。
if (failedYet.equalsIgnoreCase("true")) {
tes.getLoopControl().breakLoop();
if (testLogManager.wouldReport(ITestLogManager.ALL)) {
testLogManager.reportMessage("Loop stopped.");
}
}
return null;
}
このコードでは、テストのデータ域を使用して、タグ failedYet に関連付けられたユーザー定義値を判別します。 failedYet が true の場合、StopLoopCheck によってテスト・ループが中断されます。