Как Ускорить Автотесты

Подбираем эффективную конфигурацию под ваши нужды

Как ускорить автотесты

Отказ от ответственности.

В этой статье мы рассмотрим конфигурацию, которую вы можете реализовать в своих проектах.

Имейте в виду несколько факторов: Результаты могут отличаться, если используются разные серверные машины.

Избыточные ресурсы не всегда хороши.

Оптимизация оборудования должна идти параллельно с оптимизацией тестирования.

Всем привет! Меня зовут Иван Левиков, я старший инженер по тестированию.

Во ВКонтакте я разрабатываю и ускоряю автотесты, анализирую и улучшаю инфраструктуру, создаю новые решения.

Проектируя инфраструктуру для автотестов на Android, приходится искать ответы на вопросы о Где можно запусти их и где лучше сделай это.

Давайте рассмотрим самые популярные места для запуска автотестов:

  • облачные решения;
  • решения на физических устройствах.



Облачные решения

В этой категории много предложений от разных компаний, например:
  • Амазонка,
  • Испытательная лаборатория Firebase,
  • Лаборатория Huawei DigiX,
  • Удаленная тестовая лаборатория от Samsung,
  • и другие.

В целом, можно выделить следующие преимущества и недостатки ферм из облачных решений ↓

Как ускорить автотесты

В интернете много отзывов, поэтому не будем на этом останавливаться.

Если вы не хотите использовать внешние решения, а хотите построить что-то свое, вы можете обратиться к комбинации OpenSTF и физического устройства или к эмуляторам Android-устройств.

Давайте рассмотрим каждый вариант немного подробнее.



OpenSTF + физическое устройство

В нашем опыте будет использоваться Samsung Galaxy S20+ (6 ядер, 8 ГБ).

По характеристикам это достаточно мощное устройство (см.

рейтинг производительности ), и его программное обеспечение будет обновляться еще долгое время.

Давайте воспримем это как эксперимент.

Как ускорить автотесты

Вот так выглядел один из первых прототипов нашей фермы.

Собран из смартфонов Samsung, которые питаются через USB-хаб и подключаются к ноутбуку с локально развернутым OpenSTF. Вы можете поиграть в «Угадай модель устройства по фото».

Мы жили так довольно долгое время, управляя физическими устройствами через OpenSTF. Несмотря на очевидные преимущества, были и трудности – перечислю их ниже.



Как ускорить автотесты

Мы столкнулись со многими проблемами: например, с очисткой данных, закрытием всплывающих окон, падением производительности и странными тестовыми флагами.

В то время как мы регулярно занимались другими недостатками, отладка и отладка проваленных тестов становились ресурсоёмкими задачами.

В некоторых случаях это было связано с текущим состоянием устройства, а в других, похоже, было связано с фазой Луны и ретроградного Меркурия.



Как ускорить автотесты



Ферма с виртуальными Android-устройствами

Мы решили провести разные эксперименты для повышения стабильности.

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



Как ускорить автотесты

В итоге остановились на конфигурации с виртуальными Android-устройствами.

Мы начали с построения фермы из комбинации уже знакомых эмуляторов OpenSTF и QEMU. «Из коробки» наши эмуляторы в стандартной комплектации имели 2 виртуальных ядра и 4 гига ОЗУ.

В целом они нас устроили по производительности и жизнеспособности.

Но для некоторых ситуаций приходилось создавать свои решения: например, превентивно прогнозировать возможную деградацию эмулятора и провалы тестов из-за этого.

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



Как ускорить автотесты



Ищем оптимальную аппаратную конфигурацию для эмуляторов

Но меня все равно не устраивало положение дел, поэтому я отправился в долгое приключение в поисках стабильности.

Цель: найти оптимальную аппаратную конфигурацию эмуляторов.

Нашёл пару статей и readme в репозитории Google : они рекомендовали использовать конфиг на 4 виртуальных ядра и 12 гигов оперативки.

Я задавался вопросом, почему это так.

Что произойдет, если вы дадите больше или меньше? Меня заинтриговали эти вопросы, поэтому я решил углубиться в них.

Казалось бы, придется долго придумывать способ оценки производительности и сравнения нескольких конфигураций между собой.



Как ускорить автотесты

Но все оказалось не так просто: в ходе работы нам пришлось делать массу анализов производительности и искать причины появления OOM (Out of Memory).

Поэтому это путешествие было непростым.

Это и стало тем самым «20-минутным приключением» — на полгода :)

Как ускорить автотесты

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

Я обнаружил, что в текущей конфигурации разница во времени выполнения автотеста между эмулятором и физическим устройством составляет всего 12%.

Может показаться, что это много, но у меня было четкое ощущение, что мы можем выжать больше.

Сейчас я расскажу вам, как мы это сделали! В начале экспериментов я протестировал множество конфигураций серверных машин, которые использует ВКонтакте: от старенького Xeon E5-2680 до Xeon Gold 6283. Как это часто бывает, самое крутое железо не всегда подходило для наших задач.

Именно это и произошло с Xeon Gold: крутой частоты процессора можно было добиться только за счет отключения части ядер.

В противном случае под нагрузкой частота могла колебаться даже до 0,8 ГГц.

Плюс ко всему, немалую роль играет размер кэша L3.

Как ускорить автотесты

После первых подходов мы оценили результаты и решили остановиться на старом добром E5-2680. Поэтому мы выбрали серверные машины для следующего этапа.

Собирая серверные машины для экспериментов, я сформулировал для себя следующие вопросы ↓

Как ускорить автотесты

Представим, что все машины собраны и эмуляторы подготовлены.

Что делать дальше? Правильно, мы собираем набор автотестов для оценки производительности различных разделов нашего приложения.

Таким образом, за короткое время мы получим больше данных, максимально приближенных к реальным.



Как ускорить автотесты

Возьмем за стандарт среду выполнения на хорошо известном нам физическом устройстве — S20+.



Как ускорить автотесты

Тренажеры собраны и определены конфигурации.

Начинать! На первом этапе мы оценили изменение времени работы для каждой из этих конфигураций.

В первом раунде в сравнении с S20+ была получена следующая таблица.



Как ускорить автотесты

На еженедельном подведении итогов спринта мы с командой обсудили показатели и пришли к выводу, что результаты интересны и нужно продолжать экспериментировать, расширяя тестируемые значения.

Казалось бы, давайте возьмем и реализуем самый мощный конфиг, чтобы тесты запускались на 30% быстрее.

Но не все так просто, ведь в нашем уравнении еще есть несколько неизвестных.

Давайте копать дальше! На разных устройствах и эмуляторах я сталкивался с ситуацией, когда автотест вылетает, скажем, после шестого непрерывного запуска.

И где-то после третьего.

Или вообще не вылетает в первые десять запусков.

Это привело меня к мысли, что стабильность автотестов зависит еще и от конфигурации оборудования.

Эту гипотезу необходимо было проверить, прежде чем двигаться дальше.

В результате экспериментов были обнаружены следующие закономерности снижения тестов.



Как ускорить автотесты

Это уже выглядит интереснее! В наш список вошли три конфигурации: 6-ядерная, 5-ядерная и 4-ядерная.

Попробуем разобраться, какие из них могут быть нам интересны и почему.

Для этого мы расширим конфигурации в пределах 4 и 5 ядер, добавив в эмуляторы оперативной памяти.



Как ускорить автотесты

Неплохо, неплохо.

Получается, что нашим минимальным кандидатом обязательно будет конфигурация из 5 виртуальных ядер и 5 или 6 гигов ОЗУ.

Давайте попробуем опираться на эти ценности.

Во время прогонов эмуляторы иногда самопроизвольно выключались — и над этим мы ломали голову.

Мы подробно изучили логи и графики мониторинга и поняли, что это банальный ООМ.

Означает ли это, что эмулятору не хватает N гигабайт оперативной памяти, которую мы ему выделяем? Да все верно.

При создании более мощного конфига потребляется больше ресурсов — поэтому для безаварийной работы нам нужно зарезервировать даже больше, чем мы выделяем.

В процессе запуска автотестов наши эмуляторы разгонялись не сразу, а постепенно, иногда резко уходя вверх.

Путём экспериментов мы поняли, что для мирного существования эмуляторам желательно предусмотреть дополнительные ресурсы: минимум 1,5 гигабайта оперативной памяти и 1 ядро vCPU, помимо уже выделенных.

Это пригодится для нужд Java-кучи и модулей.

Но в целом такое решение сгладит скачки, повысит жизнеспособность эмуляторов и защитит вас от нестабильности в тестах из-за аппаратного обеспечения.



Что реализуем в итоге (и что учитываем)

Остановимся на базовой конфигурации эмулятора 6 VCPUS/6 ГБ и добавим сверху минимум 1,5 гигабайта ОЗУ.

По расчетам мы ожидаем, что по сравнению с текущим конфигом эмулятора новый позволит ускориться на 20% и более.

А самое главное, это повысит стабильность прогонов автотестов — и мы будем в них увереннее.

Потом кратко поделюсь своими выводами.

Вот что важно не забыть при реализации конфига в своем проекте ↓

Как ускорить автотесты

Вот некоторые вещи, которые следует учитывать при планировании экспериментов:

  • Начать можно с конфигурации с 5 или 6 виртуальными ядрами для мощного эмулятора и 5,5 гигами ОЗУ для эмулятора.

  • Разрыв между ядрами начал уменьшаться после 5 ядер (разница между 5 и 6 составляет около 1,5%).

  • Увеличение оперативной памяти на 1 гигабайт дает прирост скорости до +0,5%.

  • Избыточные ресурсы не всегда хороши.

  • При изменении аппаратного обеспечения эти значения также могут стать другими.

Какие конфигурации вы используете и в скольких потоках запускаете тесты? Поделитесь в комментариях.

А если вы хотите прокачать свои автотесты в нашей команде, посмотрите вакансии Здесь .

Давайте будем ВКонтакте! Теги: #Intel #Разработка мобильных приложений #it-инфраструктура #Kubernetes #вконтакте #Тестирование мобильных приложений #Тестирование ИТ-систем #Xeon #QEMU #OpenSTF #VKSTF

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.