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

java
maven
allure
testng
appium
mobile
Теги: #<Tag:0x00007fedc7b3b3e0> #<Tag:0x00007fedc7b3b278> #<Tag:0x00007fedc7b3b098> #<Tag:0x00007fedc7b3ae90> #<Tag:0x00007fedc7b3ac60> #<Tag:0x00007fedc7b3aad0>

(Dez Dezsson) #1

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


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

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


(Сергей Комаров) #3

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


(Dez Dezsson) #4

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


(Dez Dezsson) #5

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

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


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

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


(Dez Dezsson) #7

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

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

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

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


(Dez Dezsson) #9

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

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