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

Не снимаются скриншоты когда тесты падают при парализации

maven
ios
testng
screenshot
appium
parallel
java
Теги: #<Tag:0x00007f7b69399770> #<Tag:0x00007f7b693994f0> #<Tag:0x00007f7b69399298> #<Tag:0x00007f7b69399130> #<Tag:0x00007f7b69398a50> #<Tag:0x00007f7b693988e8> #<Tag:0x00007f7b69398708>

#1

Занимаюсь автоматизацией мобильных приложении, точнее iOS.
Использую Maven+Java+TestNG + Appium.

Тесты запускаю с помощью xml.
Дело в том что когда тесты бегали последовательно и драйвер был статическим скриншоты делались. Убрал статику для парализации , тест идет на двух девайсах одновременно -> норм. Но если тест падает скриншотов нет.
Кто то сталкивался с этим?

Предполагаю что на Web такая же проблема с криншотами при паралелизации. С парализацией столкнулся в первые(


(Константин) #2

С TestNG не работал, но уверен, что там есть что-то типа AfterMethod где и надо вызывать метод который делает скриншот.
Драйвер может быть вы убиваете раньше?
А версия appium какая?
Дайте больше информации.


(Sergey Korol) #3

Дело не в параллелизации, а в том, что у вас либо архитектурный gap, либо летят unhandled exceptions где попало. В итоге, велика вероятность того, что метод снятия скриншота просто не срабатывает (до него дело не доходит). Показывайте код, экстрасенсы еще спят.


#4

@ArtOfLife
appium@1.5.2
Метод скриншотов я вызываю в Listener который имеет интерфейс ITListener и в методе onTestFaile вызываю метод скриншотов.

Класс Listener

public class Listener extends ScreenShotClass implements ITestListener {
   

    @Override
    public void onTestStart(ITestResult result) {
        System.out.println("Test class started:  " + result.getName() + " " + "Thread Current ID : " + Thread.currentThread().getId());
    }

    @Override
    public void onTestSuccess(ITestResult result) {
        System.out.println("Test SUCCESS: " + result.getName() + " " + "Thread Current ID : " + Thread.currentThread().getId());
    }
        
    @Override
    public void onTestFailure(ITestResult result) {
        captureScreenshot();
        System.out.println(result.getTestClass() + " " + result.getMethod() + " " + result.getName());
    }}

Класс Скриншот

     public class ScreenShotClass extends TestBase {

    protected final String PATH = "./target/screenshots/";

    public AppiumDriver getDriver() {
        return appiumDriver;
    }

    public void captureScreenshot() {
        System.out.println("::: Got an exception ::: " + " ::: Will save screenshot into file: ");

        String file = new SimpleDateFormat("yyyy:MM:dd_HH:mm:ss").format(Calendar.getInstance().getTime()) + ".png";

        byte[] screenshot = getDriver().getScreenshotAs(OutputType.BYTES);
        try {
            FileUtils.writeByteArrayToFile(new File(PATH + file), saveScreenshot(screenshot));
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }

    private byte[] saveScreenshot(byte[] screenshot) {
        return screenshot;

    }
}

При пададении теста , в консоле выкидвается что сделан скриншон, но в таргете не создается сама папка со скриншотами


(Sergey Korol) #5

А вы уверены, что в “нужный” target их складируете? Ради интереса, выведите на экран абсолютный путь к созданному скрину.


#6

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


#7

Задал уже абсолютный путь к таргету , при падаение как бы метод отрабатывает
::: Got an exception ::: ::: Will save screenshot into file:
Но по факту не создается папка скриншотом(


(Sergey Korol) #8

Я не просил указывать абсолютный путь, я просил вывести существующий в формате абсолютного.


#9

Если я правильно сделал у меня получилося вот так!
File testpath = new File("./target/screenshots/");
System.out.println("Absolute Path + " + testpath.getAbsolutePath());

В консоле у меня вот так:
::: Got an exception ::: ::: Will save screenshot into file: Absolute Path + /home/qa/ios-automation-tests/IOS-Mobile-Test/./target/screenshots

Как то так.


#10

к сожалению пока не получается, подставляю другой путь ни как(


#11

Я извиняюсь за офф-топ, но может стоит исправить название темы? https://ru.wiktionary.org/wiki/парализация