Здравствуйте.
Задача уже наверное избитая: прикрепить картинки к отчету allure
Посмотрел этот пример и и этот вот еще.
Все хорошо, только мне нужно делать скриншоты после ВСЕХ подающих тестов, а в примерах просто метод в тестовом классе…как-то неудобно…
Решил реализовать ITestListener.
Сделал как в примерах только метод screenshot вызываю в onTestFailure(). Скриншоты делаются все ок, только вот в allure их не видать… Пробовал переопределять метод в AllureTestListener. та же история…
Можно ли так делать вообще…
Вот pom:
<dependencies>
<dependency>
<groupId>com.codeborne</groupId>
<artifactId>selenide</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.9.10</version>
</dependency>
<dependency>
<groupId>ru.yandex.qatools.allure</groupId>
<artifactId>allure-testng-adaptor</artifactId>
<version>1.5.0<</version>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<!--<testFailureIgnore>true</testFailureIgnore>-->
<argLine>
-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
</argLine>
<properties>
<property>
<name>listener</name>
<value>com.mytest.MyListener</value>
</property>
</properties>
<suiteXmlFiles>
<suiteXmlFile>testng-sit.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.5</version>
</dependency>
</dependencies>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
<reporting>
<excludeDefaults>true</excludeDefaults>
<plugins>
<plugin>
<groupId>ru.yandex.qatools.allure</groupId>
<artifactId>allure-maven-plugin</artifactId>
<version>2.5</version>
</plugin>
</plugins>
</reporting>
Вот сам Listener. (тут правда AllureTestListener, но для ITestListener тоже самое):
public class MyListener extends AllureTestListener {
private AtomicLong screenshotCounter = new AtomicLong();
@Override
public void onTestFailure(ITestResult iTestResult) {
try {
screenshot(getScreenShotName(iTestResult));
} catch (IOException e) {
e.printStackTrace();
}
super.onTestFailure(iTestResult);
}
@Override
public void onTestSkipped(ITestResult iTestResult) {
System.out.println("onTestSkipped!!!!!!!!!!!!!!!!!");
}
@Attachment(value = "{0}", type = "image/png")
private byte[] screenshot(String name) throws IOException {
ScreenShotLaboratory laboratory = new ScreenShotLaboratory();
File screenshot = new File(laboratory.takeScreenShot(name));
return Files.toByteArray(screenshot);
}
private String getScreenShotName(ITestResult iTestResult) {
StringBuilder builder = new StringBuilder();
builder.append(iTestResult.getName());
builder.append("-");
builder.append(DateUtils.convertDateFormat(Calendar.getInstance().getTime(), "dd.MM.yyy_HH:mm:ss"));
builder.append("-");
builder.append(screenshotCounter.getAndIncrement());
return builder.toString();
}
}