ConnectedAndroidTest на нескольких эмуляторах

Фон

Я хочу запустить тесты Android Instrumented на Jenkins на разных эмуляторах. Скажем, у меня есть 100 тестов и 4 эмулятора, я хочу запустить по 25 тестов на каждом.

Я выполняю ./gradlew connectedDebugAndroidTest в параллельном Jenkins Pipeline для 4 эмуляторов.

stage('Instrumented Tests') {
    parallel(
            emu1: {
                 runInstrumentedTestOnEmu(...)
            },
            emu2: {
                 runInstrumentedTestOnEmu(...)
            }
            ...
    )
}

connectedDebugAndroidTest вызовет другие команды для настройки среды для запуска инструментальных тестов.

...
:app:transformNativeLibsWithMergeJniLibsForDebugAndroidTest
:app:processDebugAndroidTestJavaRes NO-SOURCE
:app:transformResourcesWithMergeJavaResForDebugAndroidTest
:app:validateSigningDebugAndroidTest
:app:packageDebugAndroidTest
:app:assembleDebugAndroidTest
:app:connectedDebugAndroidTest

И когда среда готова, она выполняет :app:connectedDebugAndroidTest, которая запускает тесты на эмуляторе.

Я не хочу запускать эту процедуру для всех моих параллельных вызовов (в данном случае их будет 4), потому что, очевидно, я выполняю одну и ту же работу несколько раз. Теоретически лучшим вариантом будет выполнить настройку до parallel и когда все будет готово для запуска тестов, то перейти на parallel шаг и запустить тесты на каждом эмуляторе.

Вопрос

Можно ли выполнить все шаги предварительной настройки connectedDebugAndroidTest, не выполняя самого себя?

Кроме того, если я запускаю connectedDebugAndroidTest parallel на 4 эмуляторах, сборка падает, потому что gradle пытается прочитать файл из каталога intermediate, когда другая параллельная сборка уже удалила этот файл, что приводит к сбою.

Вы можете просмотреть этот тестовый проект в github с настройками, указанными выше.


person azizbekian    schedule 03.03.2017    source источник


Ответы (1)


Можно ли выполнить все шаги предварительной настройки подключенногоDebugAndroidTest, не выполняя самого себя?

Да, вы можете запустить assembleDebugAndroidTest, который, как показывает ваш журнал сборки, является последним предварительным условием для запуска тестов устройства. Запуск, который создаст как приложение, так и тестовые APK.

Хотя, насколько я знаю, при использовании Gradle нет способа разделить ваши тесты на несколько эмуляторов — вам придется установить оба APK на каждый эмулятор и использовать adb shell am instrument с параметрами numShards и shardIndex.

person Christopher Orr    schedule 08.03.2017