Ez a példa részvényvásárlási tranzakció rögzítését használja az IBM Trade alkalmazás segítségével. Az itt bemutatott alapelvek használhatók más alkalmazások tesztjeiben is.
A teszt egy részvényvásárlási tranzakció rögzítésével kezdődik, a bejelentkezési azonosítók adatkészlet helyettesítésének használatával.
Az oldalak ötlépéses ciklusban kezdődnek újra, a következő ábrán látható módon:
Figyelje meg, hogy a teszt különböző oldalain három egyéni kód elem létezik ("C" betűket tartalmazó zöld körök jelzik ezeket). A példa három egyéni kód elemet mutat be.
Az első egyéni kód elem, az InitializeBuyTest itt kerül említésre:
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 {
/**
* Ennek példányai a no-arg konstruktor használatával kerülnek létrehozásra.
*/
public InitializeBuyTest() {
}
/**
* Az ICustomCode2 és az ITestExecutionServices interfész leírásáért
* lásd: Javadoc információk. */
public String exec(ITestExecutionServices tes, String[] args) {
// Lekéri a teszt adatterületét, és beállít egy kapcsolót, jelezve, hogy még semmi
// sem hiúsult meg. Ez a kapcsoló kerül felhasználásra később a kilépéshez az ütemezési
// ciklusból, amint a rendszer hibát észlel.
IDataArea dataArea = tes.findDataArea(IDataArea.TEST);
dataArea.put("failedYet", "false");
// A virtuális felhasználó adatterületének lekérése
IDataArea vda = tes.findDataArea(IDataArea.VIRTUALUSER);
// Egy részvény véletlenszerű kiválasztása megvételre az s:0 és s:499 közötti készletből.
IVirtualUserInfo vuInfo = (IVirtualUserInfo) vda.get(IVirtualUserInfo.KEY);
Random rand = vuInfo.getRandom();
String stock = "s:" + Integer.toString(rand.nextInt(499));
// A részvény nevének megtartása a virtuális felhasználó adatterületén.
vda.put("myStock", stock);
return stock;
}
Ez az egyéni kód az exec() metódusban található.
Először a teszt adatterülete kerül kijelölésre egy kapcsolóérték, jelen esetben egy szöveg karaktersorozat tárolásához, amely később a tesztciklus leállításához kerül felhasználásra hiba esetén. Az így tárolt adatok megőrzésre kerülnek a tesztek között.
Azután létrehozásra kerül egy véletlenszerűen előállított részvény karaktersorozat. Az érték a stock változóként lesz tárolva, és a metódus visszatérési értékeként kerül visszaadásra. Ez a visszatérési érték később helyettesítésként kerül felhasználásra egy kérésben, a következő ábrán látható módon:
A kiemelt elem helyettesítést (s%3A716) használ, ami a InitializeBuyTest egyéni kód elem által visszaadott érték. A jelen teszt irányának kijelöléséhez egyéni kód kerül felhasználásra.
Az InitializeBuyTest következő kódsora a virtuális felhasználó adatterületét használja a részvény nevének tárolására későbbi hivatkozáshoz. Újfent, az így tárolt adatok megőrzésre kerülnek a tesztek között.
A második egyéni kód elem neve: CheckStock. A tartalma a következő (ezúttal csak az exec() metódust listázva):
public String exec(ITestExecutionServices tes, String[] args) {
// Lekéri a megvásárolt tényleges és igényelt részvényt.
String actualStock = args[0].replaceAll("<B>", "");
actualStock = actualStock.substring(0, actualStock.indexOf("<"));
String requestedStock = args[1];
// Beállítja a naplózási szintet ALL értékre.
IDataArea dataArea = tes.findDataArea(IDataArea.TEST);
ITestInfo testInfo = (ITestInfo)dataArea.get(ITestInfo.KEY);
testInfo.setTestLogLevel(ITestLogManager.ALL);
// Ha a naplózási szint beállítása ALL, akkor jelenti a megvásárolt tényleges
// és igényelt részvényt.
ITestLogManager testLogManager = tes.getTestLogManager();
if (testLogManager.wouldReport(ITestLogManager.ALL)) {
testLogManager.reportMessage("Tényleges megvásárolt részvény: "
+ actualStock + ". Igényelt részvény: " + requestedStock
+ ".");
}
// Ha a tényleges és az igényelt részvény nem egyezik meg, akkor FAIL eredményt küld el.
if (testLogManager.wouldReport(ITestLogManager.ALL)) {
if (!actualStock.equalsIgnoreCase(requestedStock)) {
testLogManager.reportVerdict(
"A tényleges és az igényelt részvény nem egyezik meg.",
VerdictEvent.VERDICT_FAIL);
// A teszt adatterületének felhasználásával rögzíti a tényt, hogy
// hiba történt.
dataArea.put("failedYet", "true");
}
}
return null;
}
A kód a kód számára átadott két argumentum kibontásával kezdődik. Az eredeti rögzítésben a válasz egy része ki van emelve és hivatkozásként kerül felhasználásra, a következő ábrán bemutatott módon.
Néhány karaktersorozat-művelet szükséges a lényeges szöveg, ebben az esetben a ténylegesen megvásárolt részvény nevének megszerzéséhez. Ez az újonnan létrehozott hivatkozás azután átadásra kerül a CheckStock számára argumentumként, a következő ábrán látható módon:
Figyelj meg, hogy az InitializeBuyTest visszatérési értéke is argumentumként kerül átadásra.
A CheckStock egyéni kód elem ezen értékek felhasználásával ellenőrzi, hogy az InitializeBuyTest által előállított, véletlenszerűen kiválasztott részvény ténylegesen megvásárlásra került-e a teszt végrehajtása során.
A CheckStock azután beállítja a tesztnapló szintjét, jelenti a tényleges és igényelt részvényvásárlást, továbbá FAIL eredményt ad, ha azok nem egyeznek meg. A CheckStock egy true értéket is tárol, amely a teszt adatterületén a failedYet címkével van társítva.
A harmadik egyéni kód elem (csak exec() metódus) itt kerül említésre:
public String exec(ITestExecutionServices tes, String[] args) {
// A tesztnapló kezelő lekérése.
ITestLogManager testLogManager = tes.getTestLogManager();
// Kijelöli a teszt adatterületét, és egy kapcsolót, amely jelzi, hogy
// bármilyen hiba történt-e. Ha igen, akkor leállítja a ciklust.
IDataArea dataArea = tes.findDataArea(IDataArea.TEST);
String failedYet = (String) dataArea.get("failedYet");
// Kilép a ciklusból, ha hiba történik.
if (failedYet.equalsIgnoreCase("true")) {
tes.getLoopControl().breakLoop();
if (testLogManager.wouldReport(ITestLogManager.ALL)) {
testLogManager.reportMessage("Ciklus leállítva.");
}
}
return null;
}
Ez a kód a teszt adatterületének felhasználásával határozza meg a failedYet címkéhez tartozó, felhasználó által megadott értéket. Ha a failedYet értéke true, akkor a StopLoopCheck megszakítja a tesztciklust.