Разделение тестов Android с помощью Spoon

Я использую Spoon и Espresso для автоматизации тестов пользовательского интерфейса/функционального инструментария в нашем приложении для Android.

Я хотел бы знать, есть ли способ распределить инструментальные тесты по нескольким подключенным устройствам и/или эмуляторам, чтобы я мог сократить время выполнения теста.

Пример: у меня есть 300 тестов, выполнение которых занимает 15 минут на 1 эмуляторе. Есть ли способ добавить больше эмуляторов (скажем, 4), распределить 75 тестов на каждый эмулятор и сократить время выполнения теста?

Цените ваш вклад в это.


person Pavan Agarwal    schedule 06.05.2016    source источник


Ответы (2)


То, что вы ищете, называется автоматическое разбиение. Вы должны вызвать ложку с помощью --shard и добавить серийные номера со всех подключенных устройств с помощью -serial. Вы можете найти сериалы с adb devices.

person sebokopter    schedule 11.05.2016
comment
Спасибо. Это вариант, который я пробовал. Но я вижу, что тесты эспрессо случайным образом терпят неудачу, когда я добавляю два или более эмуляторов и выполняю автоматическое разбиение. Однако, если у меня есть только один эмулятор, случайных сбоев тестов не бывает. Вы сталкивались с этой проблемой? - person Pavan Agarwal; 18.05.2016
comment
что касается ваших случайных неудачных тестов, у меня были подобные сбои, в частности, с реальными устройствами. Но оказывается, что это фактические проблемы реализации, например. многопоточность, поскольку инструментарий работает в другом потоке. Надеюсь, это поможет. - person WenChao; 20.05.2016
comment
Я хотел бы добавить здесь свои два цента, даже мы столкнулись с той же проблемой, что некоторые случайные тесты начали давать сбой после того, как мы использовали опцию shard. Мы обнаружили, что неудавшиеся тесты зависели от других тестов, которые теперь выполняются на другом устройстве, поэтому нам пришлось исправить эти тесты и сделать их полностью независимыми, и все заработало, как и ожидалось. но иногда это может быть из-за причины, упомянутой @WenChao. - person Prateek Jain; 13.07.2016

Вы можете выбрать более одного устройства в диалоговом окне Choose. Нажмите клавишу Shift или CTRL при щелчке.

Другое решение — использовать Gradle. В правой части Android Studio выберите Gradle, затем verification и, наконец, connectedAndroidTest. Это даст вам тот же эффект, что и в консоли:

./gradlew connectedAndroidTest or gradlew.bat connectedAndroidTest

Я имею в виду, что я бы запускал все тестовые примеры на всех доступных устройствах (физических и эмуляторах). Для того, чтобы выбрать, какие именно тестовые классы вы должны сделать задания в build.gradle.

Изучите основы языка программирования Groovy, чтобы более эффективно писать скрипты задач Gradle. Вот пример задачи, написанной на Groovy: Запустите задачу gradle X после Задача connectAndroidTest выполнена успешно

Вы также можете узнать о Continuous Integration и его инструментах, таких как Jenkins или Travis, которые можно настроить для выполнения конкретных тестовых случаев при каждой фиксации. В качестве примера взгляните на этот журнал сборки моего проекта Android: https://travis-ci.org/piotrek1543/WeatherforPoznan/builds/126944044 и вот конфигурация Travis: https://github.com/piotrek1543/WeatherforPoznan/blob/master/.travis.yml

Есть еще вопросы? Пожалуйста, спросите.

Надеюсь, это поможет

person piotrek1543    schedule 07.05.2016
comment
Спасибо за ваш ответ. Извините, если я не ясно выразился в своем вопросе в этом посте. В рамках непрерывной интеграции мы проводим около 500 тестов на эмуляторе Android для каждого коммита, инициированного разработчиком. В настоящее время это занимает 25 минут и будет увеличиваться по мере добавления тестов. Я искал здесь способ сократить время выполнения, распределив эти 500 тестов на два или более эмуляторов Android точно такой же конфигурации. Пожалуйста, предложите, если у вас есть какие-либо мысли по этому поводу. - person Pavan Agarwal; 09.05.2016
comment
Привет @PavanAgarwal Ты решил свою проблему? если да, можете ли вы сказать мне, как? я пробую ложку, но она не проходит весь тест в моем тестовом пакете. Кроме того, я вижу, что он запускает тест на эмуляторе один за другим. то есть один эмулятор за раз. Пожалуйста помоги ?? заранее спасибо. - person alphaguy; 28.06.2019