Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Не атачит скриншот в onTestSkipped() (TestNG + Allure) (РЕШЕНО!!!)

java
allure
testng
Теги: #<Tag:0x00007f7b6487f5f0> #<Tag:0x00007f7b6487f4b0> #<Tag:0x00007f7b6487f370>

(Hollmaro) #1

Привет всем!
Проблема заключается в том что нет аттача (скриншота) в Allure report если тест Skipped (фейлиться @BeforeMethod)

Я попытался сделать …

public class CustomListener extends TestListenerAdapter  {

@Step("on Test Skip")
public void onTestSkipped(ITestResult result) {
		System.out.println("\nTest Skipped!");
                getScreenshot();
}

@Step("on Test Failure")
public void onTestFailure(ITestResult result) {
		System.out.println("\nTest Failed!");
                getScreenshot();
}

@Attachment(value = "Screenshot after test", type = "image/png")
	 public static byte[] getScreenshot(WebDriver driver) {
	     File screenshot = 
	       ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
	     System.out.print("---- Screenshot after test --- " + screenshot.getAbsolutePath() + "\n");
	     byte[] screen = null;
	     try {
	      screen = IOUtils.toByteArray(new FileInputStream(screenshot));
	  } catch (IOException e) {
	   e.printStackTrace();
	  }
	  return screen;
     }
}
code

Для тестов Skipped нету степа @Step(“on Test Skip”) со скриншотом

Для тестов Failed есть степ @Step(“on Test Failure”) со скриншотом

Версии ОС и софта следующие …
Allure: 2.8
TestNG: 6.11

Может кто подскажет?


(Vasiliy Rakshin) #2
  1. Надо добавить ещё @Override для ваших методов ( http://testng.org/doc/documentation-main.html#logging-listeners ). Степы уберите.
  2. Как вы подключили ваш КустомеЛистенер?
  3. Что за метод testScreenshot(); ?

(Hollmaro) #3
  1. @Ovrride не нужен, IDEA видит оверрайд, скриншот для Failed тестов делается
    image
  2. CustomListener extends TestListenerAdapter
  3. поправил в сообщении, там getScreenshot() дожен быть

(Vasiliy Rakshin) #4
  1. Она вам показывает что ваш метод да перекрывает метод из ТестЛистенераАдаптера, но не окончательно, чтобы работала именно ваша реализация, надо добавить то что я написал.
  2. Я вижу что ваш класс расширяет, но я спрашиваю где и как вы подключили уже ваш слушатель CustomListener?
  3. ГетСриншот? а как же передать ему драйвер?

(Hollmaro) #5
  1. @Listeners(CustomListener.class)
    public class Test extends AbstractTest {…
  2. Да, пропустил в сообщении
    getScreenshot(driver);
    Решил проблему по другому, добавил имплементацию интерфейса IInvokedMethodListener в свой CustomListener
public class CustomListener extendsTestListenerAdapter implements IInvokedMethodListener{
//...
@Override
public void beforeInvocation(IInvokedMethod iInvokedMethod, ITestResultiTestResult){
//Just implement method beforeInvocation() from IInvokedMethodListener interface
}

/**
* Taking screenshot in case if configuration method (e.g.& @Before) is failed and next Test will be skipped
 * @param iInvokedMethod
 * @param iTestResult
 */
@Override
public void afterInvocation(IInvokedMethod&#32;iInvokedMethod, ITestResult iTestResult){
     if(iInvokedMethod.isConfigurationMethod(), iTestResult.getStatus()==ITestResult.FAILURE){
       System.out.println("CustomListener-Configuration Failed");
       getScreenshot(driver);}
     }