Ciklusok vezérlése

Ez a példa bemutatja a tesztvégrehajtás kibővítését egyéni kód használatával ciklusok vezérlésére. Minta kódot biztosít, amelyben tanulmányozható, hogyan szabályozhatja a ciklusok viselkedését egy teszten belül a teszteredmények jobb elemzése és ellenőrzése érdekében.

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.


Visszajelzés