Как забрать файл с тестируемого девайса?

Ребят, подскажите пожалуйста, как забрать файл с тестируемого девайса?
Есть проект Appium+TestNG+Allure+Maven.
На девайсе бегают тесты, тестируемое приложение пишет свой лог.
Я хочу в случае фейла тестов брать этот лог и крепить его к отчету аллюр. Как прикрепить к отчету разобрался, а как вытащить файл с девайса - нет(
В терминале могу это сделать с помощь adb pull , а как это сделать в коде самого теста - не пойму.
Спасибо!

1 лайк

У appium драйвера есть методы pull и push. Во всяком случае для dotnet библиотеки, уверен, что и для java должны быть аналогичные

1 лайк

я при запуске тестов перенаправляю лог с девайса в файл отдельным потоком, например:
nohup idevicesyslog --udid ${UDID} > device.log - для iOS
nohup adb -s ${SERIAL} logcat -v time > device.log - для Android (-v time чтоб время видеть)
и потом
& mvn clean test
файл хранится в папке проекта (ну или там где вы захотите), поэтому дальше с ним вы уже знаете что делать.
Можно весь прикреплять, а можно вырезать последние пару километров ))

4 лайка

Спасибо, попробую оба варианта. Потом отпишусь какой удобнее

Протестировал оба варианта, для себя выбрал первый (тк нет необходимости отдельно запускать логкат). Второй вариант тоже хорош, буду его использовать для ручного тестирования. Спасибо)

Еще возникла одна проблемка - а как этот файл удалить в тест сетапе? То есть я хочу чтоб при каждом прогоне тестов файл сначала удалялся.

Тут уже без adb никак не обойтись

Тогда вернусь к начальной формулировке вопроса - есть ли возможность прямо в коде теста запустить adb remove?
Что-то типа

if(bool == true) {
    client.execute("adb remove /mnt/logs/file.log");
}

В C# например есть класс Process с помощью него можно запустить cmd со всеми необходимыми параметрами. Уверен, что и в java есть что-то подходящее
Можете написать простенький батник, который будет содержать в себе нужную вам команду для adb и запускать его из кода ваших тестов.
Для андроида можно написать простенькое приложение, которые вы будете запускать когда вам надо с помощью того же appium

Если кому интересно, то сделал так

public static void execute(String command) throws Exception{
    Process p;
    p = Runtime.getRuntime().exec(command);
    p.waitFor();
}