Обработка множественной проверки Assert

В моем тестовом методе ниже этот метод имеет несколько утверждений. Я хочу, чтобы он работал так, чтобы, если все утверждения пройдены, он регистрировал состояние как «Пройдено» в моем инструменте управления тестами (мы интегрируем Test Link с Selenium)

Но если какое-либо утверждение терпит неудачу, то testNG генерирует ошибку утверждения; в этой ситуации я не могу обновить статус на «Ошибка» в моем TMT, потому что выполнение этого метода было остановлено, и выполнение продолжилось со следующим методом.

Пожалуйста, помогите решить эту проблему.

Test(dataProvider = "User_login")
public void StatusForm_Verification(String uname, String pwd)
        throws InterruptedException {
    NavigateToLogin();
    Dashboard RD = LoginAs_user(uname, pwd);
    Thread.sleep(2000);

        if (Integer.parseInt(ReviewedStatuscount) >= 1) {

            Assert.assertEquals("true",
                    revui.Btn_SaveReview.getAttribute("disabled"));
            Assert.assertEquals("true",
                    revui.Btn_submitReview.getAttribute("disabled"));
            Assert.assertEquals("true",
                    revui.Btn_Needmoreinfo.getAttribute("disabled"));
            status = TestLinkAPIResults.PASSED;

        } else {
            throw new SkipException(
                    "Test Skipping - Reviewed count is Zero");
        }
    }

Мой вопрос: если какое-либо утверждение не выполняется, как я могу обновить статус на Failed в приложении Testlink (т.е. статус = TestLinkAPIResults.FAILED)?


person Prabu    schedule 23.07.2013    source источник


Ответы (4)


Вы можете использовать @after и проверять статус после выполнения теста

@After
public void statusCheck() {
    if (status!=TestLinkAPIResults.PASSED) {
        status = TestLinkAPIResults.FAILED;
    }
}
person klesk    schedule 23.07.2013
comment
@Prabu - если этот ответ решил вашу проблему, вы должны проголосовать и/или принять ответ. - person Vince Bowdren; 24.04.2015

Если вы хотите протестировать все утверждения сразу, вам нужно добавить softAssert в свой код, это даст вам окончательные результаты после проверки всех полей. Если нет, когда происходит сбой утверждения (предположим, что ошибка имени недействительна), система выдаст ошибку утверждения после нее.

    SoftAssert softAssert = new SoftAssert();
    String ActualErrorMEssage = firstNameerrorXpath.getText;
    String ActualErrorMEssage2 = secondNameNameerrorXpath.getText;
    softAssert.assertEquals(ActualErrorMEssage,ExpectedErrorMEssage);
    softAssert.assertEquals(ActualErrorMEssage2,ExpectedErrorMEssage);
    softAssert.assertAll();
person Devdun    schedule 14.12.2018

С Asserts вы не можете. Вам нужно будет обернуть свои утверждения в свои пользовательские методы, которые могут поймать ошибку утверждения и, возможно, затем обновить результаты тестовой ссылки, а также пометить состояние тестового примера как неудавшееся. Вы также можете попробовать изучить новые утверждения testng.

person niharika_neo    schedule 23.07.2013

Альтернатива, которую я люблю использовать (с JUnit, но идея должна работать и с TestNG), заключается в расширении базового класса PoorlyWrittenUnitTest.

Следующий класс позволяет модульному тесту делать несколько утверждений без сбоев, пока тест не будет завершен. Все обнаруженные сбои будут зарегистрированы в stderr с трассировкой стека, и после завершения теста он завершится с ошибкой с сообщением о том, сколько сбоев произошло (или будет пройден, если было обнаружено 0 ошибок).

Таким образом, вы можете просто расширить этот класс и запустить свой тест, как обычно, делая столько утверждений, сколько хотите, и тест не будет терпеть неудачу до конца (см. ниже некоторые предостережения). Это должно позволить установить и проверить ваш параметр PASSED, поскольку тест не завершится неудачно, пока не будет вызван метод @After.

public abstract class AbstractPoorlyWrittenUnitTest
{
   private int m_assertionErrorCount = 0;

   @After
   public final void failTestIfErrorsEncountered ()
   {
      if( m_assertionErrorCount > 0 )
         Assert.fail( "Test error(s) encountered: " + m_assertionErrorCount );
   }

   protected final void assertTrue ( boolean condition )
   {
      try
      {
         Assert.assertTrue( condition );
      }
      catch( AssertionError failure )
      {
         logAssertionError( failure );
      }
   }

   protected final void assertFalse ( boolean condition )
   {
      try
      {
         Assert.assertFalse( condition );
      }
      catch( AssertionError failure )
      {
         logAssertionError( failure );
      }
   }

   protected final void assertEquals ( Object expected, Object actual )
   {
      try
      {
         Assert.assertEquals( expected, actual );
      }
      catch( AssertionError failure )
      {
         logAssertionError( failure );
      }
   }

   // include any other assertions you like to use (including message variants)

   private void logAssertionError ( @NotNull AssertionError failure )
   {
      System.err.println();
      ++m_assertionErrorCount;
      System.err.println( "Failure " + m_assertionErrorCount + ":" );
      failure.printStackTrace();
   }
}

Предостережения:

Если вы что-то утверждаете и продолжаете, как если бы утверждение было правильным, вы можете столкнуться с RuntimeException, что приведет к «ошибке» теста, и дальнейшие утверждения не смогут быть проверены.

Например, второе утверждение в следующем коде вызовет исключение NullPointerException. Тест по-прежнему завершится ошибкой, но последнее утверждение не будет проверено, и тест покажет 1 ошибку (утверждение «NotNull») и 1 ошибку (NullPointerException).

Object myObject = null;
assertNotNull( myObject );
assertEquals( "Some text", myObject.toString() );
assertEquals( 4, 3 );

PS — я назвал этот тест PoorlyWrittenUnitTest, потому что большинство наших тестов, которым нужен этот код, действительно очень плохо написаны, устаревшие тесты с несколькими проверяемыми вещами в одном тестовом методе и несколькими утверждениями для каждой проверяемой вещи, и потому что большинство людей, с которыми я общаюсь считать тесты с более чем 1 утверждением плохо написанными.

person Shadow Man    schedule 31.07.2014