Jenkins отображает «Build Success», даже если тесты не пройдены из-за обработки ошибок в сценариях (блок try и catch) - PullRequest
0 голосов
/ 06 февраля 2019

Примечание : я не могу вставить точную структуру и код, поскольку сервер, на котором я работаю, не доступен извне.Поэтому я попытаюсь объяснить мою проблему простыми словами и примерами.

Обзор - Я создал инфраструктуру автоматизации Selenium, которая включает TestNG, Maven (POM.XML), файлы тестовых данныхСкрипты и несколько функций многократного использования.

Проблема, с которой я столкнулся - Я использую Jenkins для выполнения своих сценариев.Дженкинс вызывает файл POM.XML, который inturn вызывает файл testng.xml (в файле testng.xml я упомянул сценарии, которые должны быть выполнены)

Допустим, я должен выполнить действие входа в систему

Основной сценарий

@Test
Public void maintest ()
{

//I use Extent reports for reporting purpose and hence I have created extent 
 //reporting reusable function which is called in the below fashion.

//If Login method returns pass, ExtentReportingFunc passes Pass to its 
 //function and displays Pass for that particular Login step in the report.

ExtentReportingFunc (Login(UserName, Password));
}

Многоразовые функции

Public String Login (String UN, String Pass)
{
//Sendkeys and set UN
driver.findelement (By.id("username")).sendkeys(UN);

//Sendkeys and set Password
driver.findelement (By.id("password")).sendkeys(pass);

//Click Login
driver.findelement (By.id("login")).click ();

//Verifying the message "Welcome User" is displayed after login
   try 
   {
      if (driver.findlement (By.id("welcomemessage")).isdisplayed ();
      {
        return pass;
      }
   } catch (Exception e)
   {
     //If welcome message is not found then return fail to the Reporting function
     return "fail";

     //Below code will be unreachable which is correct as per Java but that is the challenge.
      // I tried several ways to find a work around to return fail as above as 
      // well throw exception but no luck till now.
      // Upon throwing exception in the below way, Jenkins displays build as 
      //failed. If it is not done, though the script has failed, 
      //Jenkins displays "BUILD PASSED"

       throw e;
   }
}

//Extent Reporting function
ExtentReportingFunc (String status)
{
log.report (status);
}

Здесь проблема в блоке перехвата, если я НЕ упоминаю«throw e», Дженкинс не поймет, что произошла ошибка, и отобразит «BUILD PASSED» в выводе консоли.Я хочу, чтобы он отображал «BUILD FAILURE» в консоли Jenkins.Причина, по которой я хочу, чтобы он отображал «BUILD FAILED», заключается в том, что я интегрировал JIRA с Jenkins.Только когда jenkins показывают BUILD FAILED, он автоматически регистрирует ошибки в JIRA.Если это «BUILD PASSED» и хотя готовое состояние UNSTABLE, в разделе результатов теста Jenkins NOR сбои не будут отображаться, он регистрирует все ошибки в JIRA.

Однако в этот раз я не смогупередать return «fail» в основную функцию создания отчетов, чтобы он мог отображать шаг входа в систему как ошибку в отчете.

Я понимаю, что в соответствии с JAVA мы можем либо выбросить, либо вернуться в блоке catch, но не в обоих.Есть ли какой-нибудь другой способ, которым мы можем сделать эту работу?

Я уже создал сквозную среду, но позже понял эту проблему, когда начал интеграцию с Jenkins (или до этого все было хорошо).

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Почему вы не добавляете assert fail в вашем операторе catch, таким образом вы заставляете testng завершаться с ошибкой, когда он находится внутри оператора catchк ... вы можете добавить свое электронное сообщение здесь ");

Просто добавьте строку кода перед

return "fail";

и оставьте остальную часть функции такой же, как

0 голосов
/ 06 февраля 2019

Вы можете решить эту проблему с помощью утверждений, поэтому всякий раз, когда ваше условие не удовлетворяет, утверждение не будет выполнено, и ваш тестовый сценарий и jenkins будут показывать состояние сборки как «UNSTABLE» вместо «PASS».

Например, в приведенном выше примере вместо использования try catch и, если условие в попытке, может быть решено с помощью одной строки подтверждения, что также даст вам желаемый статус сборки.

Вы можете заменить приведенный выше код на:
Assert.assertTrue(driver.findElement(By.id("welcomemessage")).isDisplayed(), "Element is not present on the page");

Таким образом, в этом случае, если элемент не отображается на странице, утверждение не будет выполнено, поскольку оно ожидает истинное значениено станет ложным, и ваш статус сборки jenkins будет показан как нестабильный.

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