Dependency (závislosť) v TestNG

Platí pravidlo, že každá testovacia metóda musí byť nezávislá od ostatných, t. j. výsledok alebo vykonanie jednej testovacej metódy nesmie ovplyvniť ostatné testovacie metódy. Niekedy však v automatizácii môžeme vyžadovať, aby jedna testovacia metóda závisela od iných.
Môžeme chcieť zachovať závislosť medzi testovacími metódami, aby sme ušetrili čas, alebo pre scenáre, v ktorých volanie na vykonanie určitého testu závisí od výsledku niektorých iných testov.
TestNG je testovací framework, ktorý nám poskytuje dva atribúty – dependsOnMethod a dependsOnGroup v rámci anotácie @Test na dosiahnutie závislosti medzi testami. Teraz tieto atribúty preskúmajme.
Obsah
dependsOnMethod
Pomocou atribútu „dependsOnMethod“ v rámci anotácie @Test môžeme určiť názov nadradenej testovacej metódy, od ktorej má byť test závislý.
Niektoré body, ktoré si treba zapamätať o dependsOnMethod:
- Pri vykonávaní celej testovacej triedy alebo sady testov sa metóda parentTest spustí pred závislou metódou dependentTest.
- Ak spustíme samotný dependentTest, aj vtedy sa metóda parentTest spustí pred dependentTest.
- V prípade, že metóda parentTest zlyhá, potom sa metóda dependentTest nespustí a bude označená ako preskočená.
@Test(dependsOnMethods={„parentTest“})
Úryvok kódu
V nasledujúcom úryvku kódu máme dve testovacie metódy – parentTest() a dependentTest(). Metóda dependentTest je závislá od metódy parentTest pomocou atribútu dependsOnMethods.
public class TutorialExample {
@Test
public void parentTest() {
System.out.println("Running parent test.");
}
@Test(dependsOnMethods={"parentTest"})
public void dependentTest() {
System.out.println("Running dependent test.");
}
}
Výstup
Pri spustení samotnej metódy dependentTest() sa spustí aj metóda parentTest(), a to ešte pred metódou dependentTest(). Toto sa robí kvôli zachovaniu závislosti.
Running parent test.
Running dependent test.
PASSED: parentTest
PASSED: dependentTest
===============================================
Default test
Tests run: 2, Failures: 0, Skips: 0
===============================================
dependsOnGroup
Atribút dependsOnGroup sa používa na to, aby testovacia metóda závisela od kolekcie testov patriacich do určitej skupiny. Tým sa zabezpečí, že závislý test sa spustí po vykonaní všetkých testov nadradenej skupiny.
Niekoľko bodov, ktoré si treba zapamätať o dependsOnMethod:
- Pri vykonávaní celej triedy testov alebo sady testov sa testy patriace do nadradenej skupiny spustia pred dependentTest.
- Ak spustíme samotný dependentTest, aj potom sa všetky testy patriace do rodičovskej skupiny spustia pred dependentTestom.
- V prípade, že niektorý alebo všetky testy metódy rodičovskej skupiny zlyhajú, potom sa metóda dependentTest nespustí a bude označená ako preskočená.
@Test(dependsOnGroups = „groupA“)
Úryvok kódu
V nasledujúcom úryvku kódu máme dve testovacie metódy – testMethod1ForGroupA() a testMethod2ForGroupA(), ktoré patria do skupiny groupA. Potom máme metódu dependentTest – dependentTestOnGroupA, ktorá je závislá od metód skupinyA pomocou atribútu dependsOnGroups. Kvôli ukážke zámerne zlyhávame pri metóde testMethod2ForGroupA.
public class TutorialExample {
@Test(groups = "groupA")
public void testMethod1ForGroupA() {
System.out.println("Running test method1 of groupA");
}
@Test(groups = "groupA")
public void testMethod2ForGroupA() {
System.out.println("Running test method2 of groupA");
Assert.fail();
}
@Test(dependsOnGroups = "groupA")
public void dependentTestOnGroupA() {
System.out.println("Running the dependent test");
}
}
Výsledok TestNG
Pri spustení samotnej funkcie dependentTestOnGroupA() alebo spustení celej testovacej triedy môžeme pozorovať nasledujúci výstup.

Tu môžeme pozorovať, že TestNG sa pokúša spustiť všetky 3 testy a kvôli závislosti najprv spustí testMethod1ForGroupA a testMethod2ForGroupA. Keďže testMethod2ForGroupA zlyhal, dependentTest, t. j. závislýTestOnGroupA, sa nespustí a je označený ako preskočený.