Questo esempio utilizza una registrazione per una transazione relativa all'acquisto di azioni utilizzando l'applicazione Trade IBM. I concetti qui illustrati vengono utilizzati nei test di altre applicazioni.
Il test inizia con una registrazione di una transazione di acquisto di azioni, utilizzando la sostituzione del pool di dati per gli ID di accesso.
Le pagine vengono raggruppate in un loop con cinque iterazioni, come mostrato nella seguente figura:
Si noti che tra le varie pagine del test, esistono tre elementi del codice personalizzato (indicati da cerchi di colore verde con all'interno una "C"). Questo esempio analizza questi elementi di codice personalizzato.
La prima parte del codice personalizzato, InitializeBuyTest, è menzionata qui:
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 {
/**
* Instances of this will be created using the no-arg constructor.
*/
public InitializeBuyTest() {
}
/**
* Per la descrizione delle interfacce ICustomCode2 e ITestExecutionServices,
* consultare le informazioni Javadoc. */
public String exec(ITestExecutionServices tes, String[] args) {
// Ottenere l'area dati e impostare un indicatore che rileva
// che nessun elemento ha avuto esito negativo. Questo indicatore sarà utilizzato per rilevare
// il loop di pianificazione appena si verifica un errore.
IDataArea dataArea = tes.findDataArea(IDataArea.TEST);
dataArea.put("failedYet", "false");
// Ottenere l'area di dati degli utenti virtuali
IDataArea vda = tes.findDataArea(IDataArea.VIRTUALUSER);
// Selezionare in modo casuale una merce da acquistare dal gruppo tra s:0 e s:499.
IVirtualUserInfo vuInfo = (IVirtualUserInfo) vda.get(IVirtualUserInfo.KEY);
Random rand = vuInfo.getRandom();
String stock = "s:" + Integer.toString(rand.nextInt(499));
// Confermare il nome della merce nell'area dati dell'utente virtuale.
vda.put("myStock", stock);
return stock;
}
Questo codice personalizzato si trova nel metodo exec().
Come prima cosa, l'area di dati per il test viene acquisita per memorizzare un valore di indicatore, in questo caso una stringa di testo, da utilizzare successivamente per interrompere il loop del test quando si rileva un errore. I dati memorizzati in questo modo possono essere conservati durante i test.
Successivamente, viene creata in maniera casuale una stringa azione. Il valore viene memorizzato come variabile stock e viene restituito come valore di ritorno per il metodo. Questo valore di ritorno viene poi utilizzato come sostituto in una richiesta, come mostrato nella seguente figura:
L'elemento evidenziato utilizza una sostituzione (s%3A716), che è il valore restituito dall'elemento di codice personalizzato InitializeBuyTest. Il codice personalizzato viene utilizzato per gestire il test.
Le successive righe di codice in InitializeBuyTest utilizzano l'area dati Utente virtuale per memorizzare il nome dell'azione per un riferimento successivo. I dati memorizzati in questo modo possono essere conservati durante i test.
La seconda parte del codice personalizzato è chiamata CheckStock. Il contenuto è il seguente (questa volta viene riportato solo il metodo exec()):
public String exec(ITestExecutionServices tes, String[] args) {
// Ottenere la merce corrente e richiesta acquistata.
String actualStock = args[0].replaceAll("<B>", "");
actualStock = actualStock.substring(0, actualStock.indexOf("<"));
String requestedStock = args[1];
// Impostare il livello di log su ALL.
IDataArea dataArea = tes.findDataArea(IDataArea.TEST);
ITestInfo testInfo = (ITestInfo)dataArea.get(ITestInfo.KEY);
testInfo.setTestLogLevel(ITestLogManager.ALL);
// Se il livello di log è impostato su ALL, segnalare la merce corrente e quella richiesta
// acquistata.
ITestLogManager testLogManager = tes.getTestLogManager();
if (testLogManager.wouldReport(ITestLogManager.ALL)) {
testLogManager.reportMessage("Actual stock purchased: "
+ actualStock + ". Requested stock: " + requestedStock
+ ".");
}
// Se la marce richiesta e quella corrente non corrispondono, inoltrare un verdict FAIL.
if (testLogManager.wouldReport(ITestLogManager.ALL)) {
if (!actualStock.equalsIgnoreCase(requestedStock)) {
testLogManager.reportVerdict(
"Actual and requested purchase stock do not match.",
VerdictEvent.VERDICT_FAIL);
// Utilizzare l'area dati del test per registrare che si è verificato un
// errore.
dataArea.put("failedYet", "true");
}
}
return null;
}
Questo codice inizia con l'estrazione di due argomenti trasferiti al codice. Una parte della risposta nella registrazione originale viene evidenziata e utilizzata come riferimento, come mostrato nella seguente figura.
È necessario manipolare alcune stringhe per acquisire il testo desiderato; in questo caso, il nome della merce che è stata realmente acquistata. Questo nuovo riferimento creato viene quindi trasferito a CheckStock come argomento, come mostrato nella seguente figura:
Si noti che anche il valore di ritorno di InitializeBuyTest viene inoltrato come argomento.
L'elemento di codice personalizzato CheckStock utilizza questi valori per verificare che la merce scelta in modo casuale generata da InitializeBuyTest sia stata realmente acquistata durante l'esecuzione del test.
CheckStock imposta il livello di log del test, riporta l'acquisto di merci correnti e richieste e segnala l'errore (verdict FAIL) in caso di mancata corrispondenza. Anche CheckStock memorizza un valore true associato al tag failedYet nell'area dati del test.
La terza parte del codice personalizzato (solo il metodo exec()) è menzionata qui:
public String exec(ITestExecutionServices tes, String[] args) {
// Ottenere il gestore di log del test.
ITestLogManager testLogManager = tes.getTestLogManager();
// Ottenere l'area dati del test e un indicatore che segnala
// eventuali errori. In tal caso, arrestare il loop.
IDataArea dataArea = tes.findDataArea(IDataArea.TEST);
String failedYet = (String) dataArea.get("failedYet");
// Interruzione del loop se si verifica un errore.
if (failedYet.equalsIgnoreCase("true")) {
tes.getLoopControl().breakLoop();
if (testLogManager.wouldReport(ITestLogManager.ALL)) {
testLogManager.reportMessage("Loop stopped.");
}
}
return null;
}
Questo codice utilizza l'area dati del test per determinare il valore definito dall'utente associato al tag failedYet. Se failedYet è true, StopLoopCheck interrompe il loop di test.