В отчете Allure регистрируется только первый сбой, тест завершается и не выполняет все шаги после первого сбоя - PullRequest
0 голосов
/ 01 марта 2019

Я использую Java + TestNG + Allure.Мне нужно, чтобы в отчете Allure отображались все ошибки теста, не только первый, но и весь тест, и тест должен выполняться с начала до конца, несмотря на неудачные шаги.

1 Ответ

0 голосов
/ 11 мая 2019

Чтобы сообщить об ошибках теста в отчете Allure, мы должны внести небольшие изменения в класс Allure.Здесь мы хотим сообщить о любом из подэтапов как о сбое, выполнить оставшиеся шаги и затем пометить основной шаг теста как проваленный.Для этого мы можем использовать концепцию SoftAssertions.Я создал один класс под названием AllureLogger.Внутри класса у нас будет 5 методов.
1) starttest () 2) endtest () 3) markStepAsPassed (String message) 4) marstepAsFailed (String message) 5) logStep ().

    public class AllureLogger {
        public static Logger log = Logger.getLogger("devpinoylog");
        private static StepResult result_fail;
        private static StepResult result_pass;
        private static String uuid;
        private static SoftAssert softAssertion;


        public static void startTest() {
            softAssertion = new SoftAssert();
        }

        public static void logStep(String discription) {
            log.info(discription);
            uuid = UUID.randomUUID().toString();
            result_fail = new StepResult().withName(discription).withStatus(Status.FAILED);
            result_pass = new StepResult().withName(discription).withStatus(Status.PASSED);
        }

        public static void markStepAsFailed(WebDriver driver, String errorMessage) {
            log.fatal(errorMessage);
            Allure.getLifecycle().startStep(uuid, result_fail);
            Allure.getLifecycle().addAttachment(errorMessage, "image", "JPEG", ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES));
            Allure.getLifecycle().stopStep(uuid);
            softAssertion.fail(errorMessage);
        }


        public static void markStepAsPassed(WebDriver driver, String message) {
            log.info(message);
            Allure.getLifecycle().startStep(uuid, result_pass);
            Allure.getLifecycle().stopStep(uuid);
        }

        public static void endTest() {
            softAssertion.assertAll();
            softAssertion = null;
            startTest();
            softAssertion = new SoftAssert();
        }

    }

В вышеприведенном классе мы используем разные методы из allureClass и делаем небольшие изменения для добавления мягких утверждений.

Каждый раз, когда мы запускаем TestMethod в testClass, мы можем вызывать starttest () и end testmethod (). Внутри методов тестирования, если у нас есть несколько подшагов, мы можем использовать блок try catch, чтобы пометить подэтапы как пройденные или неудачные. Пример. Пожалуйста, проверьте приведенный ниже метод теста в качестве примера

    @Test(description = "Login to application and navigate to Applications tab ")
        public void testLogin() 
        {
            AllureLogger.startTest();
            userLogin();
            navigatetoapplicationsTab();
            AllureLogger.endTest();
        }

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

Мы определим тело вышеприведенных функций, которые определены в методе тестирования, следующим образом:

userLogin()
{
  AllureLogger.logStep("Login to the application");
  try
  {
    /*
 Write the logic here
    */
AllureLogger.MarStepAsPassed(driver,"Login successful");
  }
  catch(Exception e)
{
AllureLogger.MarStepAsFailed(driver,"Login not successful");
}
}


navigatetoapplicationsTab()
{
  AllureLogger.logStep("Navigate to application Tab");
  try
  {
    /*
 Write the logic here
    */
AllureLogger.MarStepAsPassed(driver,"Navigate to application Tab successful");
  }
  catch(Exception e)
{
e.printStackTrace();
AllureLogger.MarStepAsFailed(driver,"Navigate to application Tab failed");
}
}

Каждый раз, когда выдается какое-либо исключение, они попадают в блок улова и сообщаются в отчете об очарованиях.Мягкое утверждение позволяет нам успешно выполнить все оставшиеся шаги.

Прикрепленный снимок экрана отчета Allure, сгенерированного с использованием вышеуказанного метода. Основной шаг помечен как Неудачный, а остальные тестовые примеры выполнены.

AllureReport

Прилагаемый здесь отчет не из приведенного выше примера.Это просто пример того, как будет выглядеть отчет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...