web-dev-qa-db-fra.com

Comment obtenir l'état du résultat du test à partir de TestNG / Selenium dans @AfterMethod?

Pour une recherche que je fais, j'ai besoin de capturer l'état du résultat (réussi/échoué) après avoir exécuté la méthode de test (@Test), à partir de @AfterMethod.

J'utilise le fichier import org.testng.ITestResult; comme un résultat de mes recherches pour faciliter mon travail après être allé sur plusieurs blogs en ligne, mais il semble que cela n'ait pas réussi mon attente, comme toujours les résultats sont passés, même si une assertion a échoué .

Mon code est le suivant:

public class SampleTestForTestProject {
ITestResult result;

@Test(priority = 1)
public void testcase(){

    // intentionally failing the assertion to make the test method fail 
    boolean actual = true;
    boolean expected = false;
    Assert.assertEquals(actual, expected);

}

@AfterMethod
public void afterMethod()  {

    result = Reporter.getCurrentTestResult();

    switch (result.getStatus()) {
    case ITestResult.SUCCESS:
        System.out.println("======PASS=====");
        // my expected functionality here when passed
        break;

    case ITestResult.FAILURE:
        System.out.println("======FAIL=====");
        // my expected functionality here when passed
        break;

    case ITestResult.SKIP:
        System.out.println("======SKIP BLOCKED=====");
        // my expected functionality here when passed
        break;

    default:
        throw new RuntimeException("Invalid status");
    }
  }
}

Résultat dans la console:

[TestNG] Running:  C:\Users\USER\AppData\Local\Temp\testng-Eclipse--988445809\testng-customsuite.xml

======PASS=====

FAILED: testcaseFail
Java.lang.AssertionError: expected [false] but found [true]

Je m'attends à obtenir le résultat du test dans une variable pour passer par le commutateur, comme indiqué dans l'extrait de code ci-dessus, et à imprimer "====== FAIL =====" lorsque la méthode de test échoue.

Quelqu'un pourra-t-il m'aider à saisir le résultat du test d'exécution pour chaque méthode de test (@Test). Si la méthode que j'ai approchée est incorrecte, veuillez m'aider avec un extrait de code à la bonne approche, avec bonté.

Merci d'avance

9
hirosht

simplement fais-le:

public class stacktest  {


@Test
public void teststackquestion() {

    boolean actual = true;
    boolean expected = false;
   Assert.assertEquals(actual, expected);

}


@AfterMethod
public void afterMethod(ITestResult result)
{
    try
 {
    if(result.getStatus() == ITestResult.SUCCESS)
    {

        //Do something here
        System.out.println("passed **********");
    }

    else if(result.getStatus() == ITestResult.FAILURE)
    {
         //Do something here
        System.out.println("Failed ***********");

    }

     else if(result.getStatus() == ITestResult.SKIP ){

        System.out.println("Skiped***********");

    }
}
   catch(Exception e)
   {
     e.printStackTrace();
   }

}

}

11
noor

TestListenerAdapter a des méthodes pour chacune de ces situations (succès, ignoré, échec). Ma suggestion est de faire votre propre auditeur comme ça.

public class MyTestResultListener extends TestListenerAdapter {

    @Override
    public void onTestFailure(ITestResult result) {
        // do what you want to do
    }

    @Override
    public void onTestSuccess(ITestResult result) {
        // do what you want to do
    }

   @Override
    public void onTestSkipped(ITestResult result) {
        // do what you want to do
    }
}

Ajoutez ensuite votre écouteur à la classe de test.

@Listeners(MyTestResultListener.class)
public class MyTest {

// your tests

}
6
David Baak