Tento příklad používá záznam transakce nákupu akcií pomocí aplikace IBM Trade. Zde ukázaný koncept lze používat k v testech jiných aplikací.
Test začíná záznamem transakce nákupu akcií a používá náhradu datového fondu pro přihlašovací ID.
Stránky jsou zabaleny do cyklu s pěti iteracemi, jak ukazuje následující obrázek:
Všimněte si, že mezi řadou různých stránek testu jsou tři položky vlastního kódu (označené zelenými kolečky s vepsaným "C"). Tento příklad zkoumá tyto položky vlastního kódu.
První část vlastního kódu InitializeBuyTest najdete zde:
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 {
/**
* Instance tohoto se vytvoří pomocí konstruktoru no-arg.
*/
public InitializeBuyTest() {
}
/**
* Popis rozhraní ICustomCode2 a ITestExecutionServices
* najdete v informacích Javadoc. */
public String exec(ITestExecutionServices tes, String[] args) {
// Získejte datovou oblast testu a nastavte příznak označující, že
// dosud nic neskončilo nezdarem. Tento příznak se použije později k přerušení
// cyklu plánu, jakmile se zjistí nějaké selhání.
IDataArea dataArea = tes.findDataArea(IDataArea.TEST);
dataArea.put("failedYet", "false");
// Získejte datovou oblast virtuálních uživatelů
IDataArea vda = tes.findDataArea(IDataArea.VIRTUALUSER);
// Náhodně vyberte akcie, které nakoupíte ze sady s:0 až s:499.
IVirtualUserInfo vuInfo = (IVirtualUserInfo) vda.get(IVirtualUserInfo.KEY);
Random rand = vuInfo.getRandom();
String stock = "s:" + Integer.toString(rand.nextInt(499));
// Uchovejte název akcie v datové oblasti virtuálního uživatele.
vda.put("myStock", stock);
return stock;
}
Tento vlastní kód se nachází v metodě exec().
Nejprve se získá datová oblast pro tento test, aby do ní bylo možné uložit hodnotu příznaku, v tomto případě textový řetězec, který se bude následně používat k zastavení cyklu testu v případě zjištění chyby. Data uložená tímto způsobem se uchovávají napříč testy.
Pak se vygeneruje náhodně vygenerovaný řetězec akcie. Tato hodnota se uloží jako proměnná stock a předá se zpět jako návratová hodnota metody. Tato návratová hodnota se později použije jako náhrada v požadavku, jak ukazuje následující obrázek:
Zvýrazněná položka používá náhradu (s%3A716), což je hodnota vrácená položkou vlastního kódu InitializeBuyTest. Používáme vlastní kód k určování směru našeho testu.
Další řádky kódu v InitializeBuyTest používají datovou oblast virtuálního uživatele pro uložení názvu akcie, který bude třeba později. Znovu, data uložená tímto způsobem se uchovávají napříč testy.
Druhá část vlastního kódu se nazývá CheckStock. Její obsah je následující (tentokrát uvádíme pouze metodu exec()):
public String exec(ITestExecutionServices tes, String[] args) {
// Získejte skutečné a požadované nakoupené akcie.
String actualStock = args[0].replaceAll("<B>", "");
actualStock = actualStock.substring(0, actualStock.indexOf("<"));
String requestedStock = args[1];
// Nastavte úroveň protokolování na ALL (vše)
IDataArea dataArea = tes.findDataArea(IDataArea.TEST);
ITestInfo testInfo = (ITestInfo)dataArea.get(ITestInfo.KEY);
testInfo.setTestLogLevel(ITestLogManager.ALL);
// Je-li úroveň protokolování nastavena na ALL, nahlaste skutečné a požadované
// nakoupené akcie.
ITestLogManager testLogManager = tes.getTestLogManager();
if (testLogManager.wouldReport(ITestLogManager.ALL)) {
testLogManager.reportMessage("Actual stock purchased: "
+ actualStock + ". Requested stock: " + requestedStock
+ ".");
}
// Pokud se skutečné a požadované akcie neshodují, odešlete verdikt FAIL (nezdar)
if (testLogManager.wouldReport(ITestLogManager.ALL)) {
if (!actualStock.equalsIgnoreCase(requestedStock)) {
testLogManager.reportVerdict(
"Actual and requested purchase stock do not match.",
VerdictEvent.VERDICT_FAIL);
// Pomocí datové oblasti testu zaznamenejte fakt, že došlo k
// chybě.
dataArea.put("failedYet", "true");
}
}
return null;
}
Tento kód začíná extrakcí dvou argumentů, které byly předány do kódu. Část odpovědi původního záznamu je zvýrazněna a použita jako odkaz, jak ukazuje následující obrázek.
Chcete-li získat text, o který se zajímáte (v tomto případě název akcie, která byla skutečně zakoupena), je třeba určitá manipulace s řetězci. Tento nově vytvořený odkaz se pak předá jako argument do CheckStock, jak ukazuje následující obrázek:
Všimněte si, že návratová hodnota InitializeBuyTest se také předává jako argument.
Položka vlastního kódu CheckStock používá tyto hodnoty k ověření, že náhodně vybraná akcie, vygenerovaná InitializeBuyTest, byla skutečně zakoupena během provedení testu.
CheckStock následně nastaví úroveň protokolování testu, nahlásí skutečné a požadované nákupy akcií a vydá verdikt FAIL (nezdar), pokud si tyto hodnoty neodpovídají. CheckStock dále uloží hodnotu true přidruženou k příznaku failedYet do datové oblasti testu.
Třetí část vlastního kódu (pouze metoda exec()) je uvedena zde:
public String exec(ITestExecutionServices tes, String[] args) {
//Získejte správce protokolu testu.
ITestLogManager testLogManager = tes.getTestLogManager();
// Získejte datovou oblast testu a získejte příznak uvádějící,
// zda se něco nezdařilo. Pokud ano, zastavte cyklus.
IDataArea dataArea = tes.findDataArea(IDataArea.TEST);
String failedYet = (String) dataArea.get("failedYet");
// Přerušte cyklus, pokud došlo k chybě.
if (failedYet.equalsIgnoreCase("true")) {
tes.getLoopControl().breakLoop();
if (testLogManager.wouldReport(ITestLogManager.ALL)) {
testLogManager.reportMessage("Loop stopped.");
}
}
return null;
}
Tento kód používá datovou oblast testu k určení uživatelem definované hodnoty přidružené k příznaku failedYet. Má-li příznak failedYet hodnotu true, kód StopLoopCheck přeruší smyčku testu.