2016-03-21 4 views
3

Для исследования, которое я делаю, мне нужно захватить состояние результата (Passed/Failed) после запуска метода тестирования (@Test), из @AfterMethod.Как получить статус результата теста от TestNG/Selenium в @AfterMethod?

Я использую импорт org.testng.ITestResult; как выход из моего исследования, чтобы облегчить мою работу после нескольких онлайн-блогов, но похоже, что это не помогло моему ожиданию, как всегда результат результата, прошедший, , хотя утверждение не получило.

Мой код выглядит следующим образом:

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"); 
    } 
    } 
} 

Результат в консоли:

[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] 

Я ожидаю, чтобы получить результат теста на переменную, чтобы получить через переключатель, как указано в над фрагментом кода, и распечатайте «====== FAIL =====», когда метод проверки завершится с ошибкой.

Будет ли кто-нибудь помогать мне любезно поймать результат теста выполнения для каждого метода тестирования (@Test). Если метод, к которому я подошел, ошибочен, пожалуйста, помогите мне с фрагментом кода для правильного подхода, любезно.

Спасибо заранее

ответ

4

TestListenerAdapter имеет методы для каждой из этих ситуаций (успех, пропускаются, отказ). Мои предложения - сделать свой собственный слушатель таким.

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 
    } 
} 

Затем добавьте слушателя в тестовый класс.

@Listeners(MyTestResultListener.class) 
public class MyTest { 

// your tests 

} 
+0

Я обнаружил, что тестовый слушатель более надежный, чем '@ afterMetod'. Использование '@ afterMethod' в некоторых случаях не выполнялось для неудачных тестов. – bnieland

+0

@bnieland именно поэтому я и предложил. Но он не был выбран в качестве ответа и не проголосовал. Поэтому я предполагаю, что это не то, что он искал. –

+0

@DavidBaak: Хорошо настроенный listner был следующим подходом, который я пробовал, и который сработал для меня успех! Спасибо. Упрощенный и избранный! – hirosht

4

просто сделать это:

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(); 
    } 

} 

}

+0

Могу ли я объяснить причину предложения вложенным, если-else, а не переключателем в вашем ответе? В любом случае я попробовал ваше решение, которое по-прежнему дает результат как PASSED, хотя утверждение не проходит тест, как показано выше «Результат в консоли» – hirosht

+0

нет причины, я использую вот так вот почему я написал вот так .... u может использовать переключатель вместо того, если еще ... не проблема. – noor

+0

это дало вам точный результат теста каким-то образом? Интересно, смутил ли я вас своим вопросом. ** Я не получаю точный результат теста, и он всегда дает результат теста как PASSED, даже если тест действительно НЕИСПРАВНО **. Сможете ли вы любезно помочь мне дальше? – hirosht

Смежные вопросы