Помогите. Allure установил, все нормально. Отчеты генерируются на ура, но как добавить скрины в них никак не могу понять…
Куда именно нужно добавлять @AttachmentЧто должно в нем содержаться.
Желательно сделать Attachment, что б скрин добавлялся к каждому шагу.
Или хотя бы к фейловуму шагу.
Прошу без оскорблений) Просто хочу уже добить этот allure.
Нужно разбить задачу на 2 части:
1)разобраться, как вызывать что-либо на каждый зафейленный шаг(хотя скорее вы имели в виду тест)
2)разобраться, как сохранять скриншоты.
Аннотация Аttachment.
Ее можно добавить к любому методу и вернуть из него то, что требуется. Если хочется изображение - то лучше работать с byte[]. Далее оттуда, где вы хотите брать скриншот(см выше пункт 1) - вызываете этот метод и всё.
Внутри этого метода с Attachment - делайте takeScreenshot вебдрайверовский(это уже более детальная подсказка.
Запуск чего-либо на фейл.
Тут нужно понимать, какой фрейм вы используете. Вроде как у вас TestNG. Тут вариантов куча:
- можно как вы уже делали в afterMethod смотреть статус теста и туда запихать вызов снятия скрина
- написать listener , который onTestFailed будет вызывать то же самое.
Получается что если делать скрин для каждого теста, нужно в каждом вызывать метод скрина - это я пробовал, получается. Но я думал есть способ попроще )
Ну этот вызов делается из одного и того же места. Это нормально. Куда уж проще?
Ну есть еще один способ - можно использовать AspectJ и обернуть хоть каждый метод скриншотом
Но нужно ли оно настолько?
Думаю нет) Спасибо за развернутый ответ!
поднималась тема уже не раз, ищите на форуме)
Написал вот так вот:
@AfterMethod
public void onTestFailure(ITestResult tr) {
makeScreenshot();
}
@Attachment(value = "Attachment Screenshot", type = "image/png")
public byte[] makeScreenshot() {
return ((TakesScreenshot) DRIVER).getScreenshotAs(OutputType.BYTES);
}
У меня 2-а теста(сделал что б они оба фейлились):
В отчет скрин появляется только у теста №2 . При чем скрин не его, а теста №1.
В тесте №1 пусто.
Хотя в папке \target\allure-results находится 2-а скрина
Вот это уже очень странно. Тут больше похоже на проблемы тестов именно. Потому как аллюр должен всё это делать правильно. Уже не одним человеком проверено
Куда ж именно смотреть в тестах…вот это вопрос… Отрабатывают корректно. Может в pom или testng.xml ошибки
В логе прохождения теста, еще увидел такое вот поле
[WARNING] Unable to find a URL to the parent project. The parent menu will NOT be added.
Может тут что-то?
Вот мой pom:
<parent>
<groupId>ru.yandex.qatools.allure</groupId>
<artifactId>allure-examples-parent</artifactId>
<version>1.0</version>
</parent>
<artifactId>allure-testng-example</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<allure.version>1.4.13</allure.version>
<aspectj.version>1.8.5</aspectj.version>
</properties>
<name>Allure TestNG Example</name>
<description>Allure TestNG and WebDriver Usage Example</description>
<dependencies>
<dependency>
<groupId>ru.yandex.qatools.allure</groupId>
<artifactId>allure-testng-adaptor</artifactId>
<version>1.4.13</version>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-remote-driver</artifactId>
<version>2.45.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.45.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-server</artifactId>
<version>2.45.0</version>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<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>
<suiteXmlFiles>
<suiteXmlFile>src/resources/testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<reporting>
<excludeDefaults>true</excludeDefaults>
<plugins>
<plugin>
<groupId>ru.yandex.qatools.allure</groupId>
<artifactId>allure-maven-plugin</artifactId>
<version>2.0</version>
</plugin>
</plugins>
</reporting>
Все. Настроил.
Решение: вывел скриншотер в листенер
@Override
public void onTestFailure(ITestResult tr){
Object currentClass = tr.getInstance();
WebDriver driver = ((AbstractTest) currentClass).getDriver();
byte[] srcFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);
saveScreenshot(srcFile);
}
@Attachment(value = "Page screenshot", type = "image/png")
private byte[] saveScreenshot(byte[] screenshot){
return screenshot;
}
Добрый день. Подскажите пожалуйста, а с добавление видео у Вас получилось??У меня получается записывать видео прохождения теста, но прикрепить видео формата mp4 никак не получается.
Какой type
указываете? Надо "video/mp4"
. Версия аллюра свежая?
Вот весь список поддерживаемых типов: allure2/attachmentType.js at master · allure-framework/allure2 · GitHub
Версия Allure свежая: compile group: ‘io.qameta.allure’, name: ‘allure-testng’, version: ‘2.13.1’ Уже по разному пробовала:
- читала докементацию Allure
2)искала на форумах и в примерах
3)Пробовала добавить
compile group: ‘ru.yandex.qatools.allure’, name: ‘allure-testng-adaptor’, version: ‘1.5.4’
compile group: ‘ru.yandex.qatools.allure’, name: ‘allure-java-aspects’, version: ‘1.5.4’
4)У меня реализована так:
4.1)сделан метод, который пишет видео с мобильного устройства(эмулятора) - в итоге я получаю файл с расширением mp4
Вот сам метод:
public byte[] stopRecordVideo() throws IOException, InterruptedException {
String base64String = DriverManager.getDriver().stopRecordingScreen();
byte[] data = Base64.decodeBase64(base64String);
System.out.println(base64String);
String destinationPath="target/filename.mp4";
Path path = Paths.get(destinationPath);
Files.write(path, data);
return data;
}
4.2)пробую полученный файл в виде массива byte передать в качестве входного параметра в метод с аннотацией @Attachment(value = “video”, type = “mp4”)
Вот сам метод:
@Attachment(value = "video", type = "mp4")
public byte[] saveScreenshot(byte[] screenShot) {
return screenShot;
}
Ещё раз прочитайте моё сообщение. Второе предложение. И сделайте так у себя.
В примере используется js, я не пока не понимаю как в проекте:Java,TestNG,Gradle можно использовать.Помогите пожалуйста разобраться.
@VikaIRaznoeQA
Попробуйте вот так
@Attachment(value = "VideoFile", type = "video/mp4", fileExtension = ".mp4")
public byte[] attachVideoToAllure(String videoFileLocation) {
File video = new File(videoFileLocation);
try {
return Files.toByteArray(video);
} catch (IOException e) {
log("attachVideoToAllure(): FAILED\n" + e.getMessage());
return new byte[0];
}
}
У вас
type = "mp4"
, а нужно
type = "video/mp4"
Вот посмотрите примеры разных аттачментов.
Да, я видела такие примеры, НО у меня метод toByteArray выделяется красным, тоесть я понимаю, что не хватает какой-то библиотеки для класса Files.
Сейчас у меня вот так:
import io.qameta.allure.Attachment;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import static org.testng.Reporter.log;
public class AllureUtils {
@Attachment(value = "VideoFile", type = "video/mp4", fileExtension = ".mp4")
public byte[] attachVideoToAllure(String videoFileLocation) {
File video = new File(videoFileLocation);
try {
return Files.toByteArray(video);
} catch (IOException e) {
log("attachVideoToAllure(): FAILED\n" + e.getMessage());
return new byte[0];
}
}
}
Возможно, нужно что-то добавить в Gradle???
Сейчас у меня вот так в Build.gradle:
dependencies {
testCompile group: 'org.testng', name: 'testng', version: '7.0.0'
compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '3.141.59'
//для мобильного тестирования
compile group: 'io.appium', name: 'java-client', version: '7.3.0'
//формирование отчета Allure
compile group: 'io.qameta.allure', name: 'allure-testng', version: '2.13.1'
compile group: 'ru.yandex.qatools.allure', name: 'allure-testng-adaptor', version: '1.5.4'
compile group: 'ru.yandex.qatools.allure', name: 'allure-java-aspects', version: '1.5.4'
}
@VikaIRaznoeQA
Добавьте
// https://mvnrepository.com/artifact/com.google.guava/guava
compile group: 'com.google.guava', name: 'guava', version: '29.0-jre'
Files.toByteArray это оттуда;
Добавила в build.gradle, но не помогло: toByteArray осталось красным