- PVSM.RU - https://www.pvsm.ru -

Меня зовут Кирилл Коргов, я отвечаю за то, чтобы ферма устройств работала и развивалась. Кстати, называть её просто фермой было бы скучно, поэтому где-то на заре проекта мы по-доброму назвали её близким по смыслу словом «Колхоз». Если интересно, с чего Колхоз начинался, как пандемия привела к неожиданному росту его популярности и что общего у макбуков с лотками для офисной бумаги, прошу под кат.
Объясню, как оно работало у нас до Колхоза и с чем случались проблемы.
Тестирование в Яндексе бывает двух типов. Первый — когда сами разработчики что-то тестируют в процессе своей работы. Для этого, помимо устройств команды, у нас есть Гиперкуб, мы уже писали о нём [1] на Хабре. Если кратко — в офисах Яндекса стоят специальные шкафы с разными девайсами, которые сотрудники могут брать для тестов. Запомните про них — они ещё поучаствуют в истории Колхоза.
Второй тип — тестирование через внутренний сервис Crowd. Это служба удалённых тестировщиков Яндекса, которые проводят тесты по запросу разработчиков. Исполнители получают готовый сценарий — что и на чём нужно проверить. Например: посмотреть, как отображается новый блок в приложении. Создаём задание, указываем требуемые версии телефонов и ОС, нужное количество тестов и выкладываем на внутренний сервис. Тестировщики, свободные в этот момент, берут задачу и присылают нам результаты.
Изначально, мы создавали ферму именно для крауд-тестирования, поэтому расскажу о нём подробнее.
Удалённые тестировщики сервиса Crowd работают из разных регионов, без привязки к рабочему дню, поэтому тесты не останавливаются даже ночью или в выходные. Ещё крауд-тестирование позволяет получить результат гораздо быстрее, чем инхаус: сто тестировщиков проведут сто тестов за пару часов, а команда из нескольких человек потратит на это дни.
Но нам не пришлось бы создавать ферму устройств, если бы всё было так идеально. Главной болью крауд-тестирования стало разнообразие девайсов — вернее, его отсутствие. У каждого удалённого тестировщика имелся свой телефон, не самый мощный ноутбук/ПК и всё. На них он и проводил тесты. Из этого вытекали проблемы:
В особых случаях мы выдавали тестировщикам устройства Яндекса, но это была редкая и долгая практика. Как я уже говорил, исполнители работают из разных регионов, и тут этот плюс превращается в минус. Пока мы отправим устройство для теста, пока тестировщик его получит, выполнит задачу, пройдёт неделя, а то и больше. При этом во время транспортировки устройство не приносит пользу.
По всем этим причинам нам и пришла в голову идея фермы удалённых устройств для тестирования в сервисе Crowd. И тут я перехожу к истории создания Колхоза — длинной, но увлекательной.
В начале 2018 года мы поняли, что хорошо бы иметь какую-то ферму, чтобы всё тестирование проходило удалённо и под нашим контролем. Сначала даже не думали о собственной разработке, а просто смотрели, какие решения уже существуют.
Подошло только одно — Open STF, ферма для Android-смартфонов. Для iOS подобную функциональность предлагали облачные провайдеры, но такие фермы стоили очень дорого и были развёрнуты на удалённых серверах — а мы не всегда можем отправлять за пределы компании приложения в статусе beta.
Решили для начала попробовать Open STF. Принцип работы фермы:

Open STF — международная платформа, интерфейс только на английском
Тут мы поняли, что у нас, оказывается, много специфических требований к ферме для крауд-тестирования. Например, остро не хватало возможности автоматизированно следить за состоянием устройств и ограничивать к ним доступ. Телефон мог сломаться, а мы даже не знали об этом, и он продолжал числиться в нашей базе. Или несколько тестировщиков одновременно приходили на один и тот же смартфон и мешали друг другу.
Open STF не была заточена под задачи нашего сервиса Crowd. Это был софт, на котором к одному девайсу параллельно могли подключаться несколько тестировщиков. К тому же устройства часто падали, а добавление новых смартфонов одновременно с выполнением заданий на ферме вызывало проблемы.
Мы подключили через Open STF несколько десятков Android-смартфонов и пользовались ими, когда у удалённых тестировщиков не было нужной модели телефона или версии ОС для задачи. Но главные проблемы мы этим не закрыли — по-прежнему не хватало устройств на iOS, а о масштабировании не было речи.

В Open STF отсутствовала возможность забронировать девайс — просто открываешь и пользуешься, иногда вместе с другими тестировщиками
Идея была простой — сделать собственное решение наподобие Open STF, но для iOS и с нужной нам функциональностью для крауд-тестирования. Представляли, что для начала хватит компьютера Mac (потому что только с ними можно по-настоящему подружить девайсы на iOS), к которому мы подключим 10–15 устройств, разместив их в серверной. Тестировщикам станут круглосуточно доступны айфоны с редкими версиями — мы частично закроем проблему, а дальше будем расширяться.
Как это часто бывает, на деле всё оказалось сложнее.
Летом 2018 года начали разработку фермы: организовали распределённую команду между офисами Яндекса в Минске и Санкт-Петербурге. Минская команда собрала первые прототипы — софт для подключения к iOS-устройствам, а также интерфейс управления. Мы в Питере делали софт для ограничения доступа, бэкенд и бизнес-логику.
Примерно за три месяца наша команда научилась получать картинку с устройства и имитировать управление им в удалённом режиме. На телефоны устанавливали наше iOS-приложение, связывали его с системой, развёрнутой на компьютере — и все действия, которые мы совершали через сторонний веб-интерфейс, телефон воспринимал как реальные действия пользователя.
Первые тестовые стенды — два компьютера и два подключённых к ним телефона — были готовы в Минске к концу осени 2018-го. И тут выяснилось серьёзное ограничение, которое мы до сих пор не победили: на одном Mac может нормально работать только одно iOS-устройство. При подключении удалённого доступа к двум и более девайсам кадры двух устройств путались. Попробовали перейти на получение картинки через снятие скриншота прямо на устройстве — FPS оказался на уровне 1–5 кадров в секунду. Естественно, при таком быстродействии невозможно что-то тестировать.
Постоянную инсталляцию развернули уже в Питере в начале 2019-го — там площадь позволяла разместить нужное оборудование в коммутационной комнате. Вместо запланированного одного компьютера поставили пять Mac mini. Подключили к ним десять iOS-устройств (по два на каждый Mac), которые работали по очереди. В одну сессию был активен только один связанный с компьютером девайс, второй в это время становился недоступен. Это позволило нам поддерживать FPS от 12 до 15 кадров в секунду без буферизации — можно сказать, устройства почти моментально реагировали на нажатия в интерфейсе.
Систему бронирования и изоляции сессии заложили сразу, так что одной проблемой стало меньше (как эта система работает, расскажу чуть дальше). Но было непонятно, как масштабировать ферму — десять iOS-устройств на тысячи исполнителей было мало. К тому же первое решение оказалось очень требовательным к компьютерам тестировщиков — съедало много RAM и сетевого трафика. Эти ограничения нам ещё предстояло победить.

Самая первая и самая скромная версия Колхоза
Пока мы ломали голову над тем, как совладать с ограничениями Apple и подключить к одному компьютеру несколько устройств, помощь пришла с другой стороны.
На складах у хелпдеска Яндекса в тот момент образовалось какое-то количество старых макбуков. Они уже не подходили по параметрам для работы разработчиков, но вполне годились нам на роль агента для управления iOS-устройствами. Спасибо коллегам из хелпа — великодушно поделились с нами железом.
Дело пошло быстрее. Весной 2019-го ферма сразу выросла на двадцать макбуков. Дальше ребята из хелпдеска отдавали в Колхоз рабочие компьютеры Apple, если они больше никому были не нужны. Нам оставалось только докупать телефоны и планшеты на iOS и подключать их к агентам. Чем мы и занялись.
В первую очередь приобретали устройства, которых в сервисе Crowd не было совсем (но имелись запросы на них) или которых часто не хватало. В последнем случае тесты в Колхозе на этих девайсах проходили с большими сроками, и это нарушало дедлайн у проектов Яндекса. После того как закрыли критические дыры, перешли на докупку просто популярных устройств, чтобы постепенно всё больше тестов переводить на ферму.
Одновременно с ростом фермы мы вдруг осознали, что все наши устройства — телефоны, планшеты — в первую очередь пользовательские, а не промышленные, как серверное оборудование. Почему-то они не хотели сами жить и стабильно работать 24/7, а требовали внимания. Нормой стала ситуация, когда девайсы постоянно ломаются, зависают, выключаются или перезагружаются.
Решили, что нам нужен специальный человек, который будет технически поддерживать ферму — взяли в команду системного администратора. Плюс создали чат в телеграме, где пользователи задавали вопросы напрямую разработчикам фермы: как подключиться, сбросить настройки, что делать, если устройство зависло, и так далее. Постепенно мы обзаведёмся и полноценной службой поддержки, но это будет только через год, когда ферма разрастётся до такой степени, что станет невозможно отвечать всем своими силами.

Поначалу макбуки, как и десктопы, стояли на ребре или на верхней полке, рядом с каждым лежал телефон. Место распределялось неэффективно, но решение для этого мы нашли позже
Наша ферма для iOS росла и крепла, а софт для Android наши исполнители по-прежнему тестировали через Open STF. И страдали всё от тех же проблем: не было автоматического контроля за состоянием устройств и отсутствовало бронирование девайса только для себя. От этого, как уже говорил, хромали удобство (удалённые тестировщики на одном устройстве мешали друг другу) и конфиденциальность (любой мог увидеть данные, которые вводит исполнитель).
Попробовали влиять инструкциями — запретили заходить на девайс с пометкой «Занято». Появилась другая загвоздка — выяснилось, что тестировщики часто забывали выходить из сессии, и пометка «Занято» висела, даже когда устройством никто не пользовался.
Осенью 2019 года мы начали искать решение: как дотащить базовую функциональность нашей фермы до Open STF. Делать полностью свой софт под Android нам не хотелось — рабочая технология уже существовала, и не факт, что мы сделали бы лучше. Вариант форкнуть стороннее решение и развивать свою ветку тоже пока отмели, потому что опасались сложностей с обновлением до новых версий.
Решили начать с единого интерфейса, чтобы тестирование на iOS и Android проходило в одном месте, на сайте нашей фермы. Напомню, через Open STF тесты проходили в их веб-приложении.
Самым простым вариантом было сделать iframe — чтобы в окне на нашем сайте стал доступен интерфейс сторонней фермы. Эту идею сразу отмели и начали делать нормально. За несколько дней мы адаптировали интерфейс Колхоза для отображения и управления Android-устройством. Но технологии по-прежнему были завязаны на Open STF, просто пользователи об этом не знали.
Критическим оставался вопрос с изоляцией сессии. И тут мы додумались поставить между нашими устройствами и сторонним софтом reverse proxy в виде nginx, куда встроили специальную авторизацию на каждый запрос.
Как работала проверка:
Всё. Один человек мог открыть ровно одно устройство, так как на время сессии мы автоматически блокировали девайс для других бронирований. Так мы донесли удобство и конфиденциальность тестирования и до Open STF.
На этом этапе у нас уже было около 60 девайсов на Android и 30 на iOS. На выделенных нам полках в общей коммутационной начал разрастаться хаос с кучей проводов. А с появлением бронирования фермой заинтересовались штатные сотрудники Яндекса — они понесли нам на подключение и обслуживание ещё и свои рабочие устройства, чтобы мы централизованно их поддерживали. Эти телефоны и планшеты становились доступны всем — и это было круто, потому что наш парк устройств рос без всяких вложений. Но на своих полках мы перестали помещаться.
С переносом к себе в интерфейс Android-фермы мы убили сразу двух зайцев. Получили единую модель данных, которая умеет работать с разными технологиями, и расширили базу устройств за счёт девайсов сотрудников. И в это же время нам выделили первую собственную комнатку!

Собираем стеллажи в новой серверной
Немного расскажу, как мы обживались в новой серверной.
Переезжали постепенно — нельзя было просто всё отключить и разом перенести, ведь тестирование работало круглосуточно. Поэтому мы частично отключали какие-то устройства и переносили их в новое помещение. Потом, когда освобождались другие, шла следующая партия. В процессе мы научились жить в условиях, когда ферма распределена на несколько комнат.
Специально для нас помещение оборудовали: установили бесперебойники, систему охлаждения, стеллажи под устройства. Но главной проблемой оставалось грамотное использование места, которое всё равно было в дефиците.
Особенно сложно выходило с iOS-фермой. Какое-то время макбуки стояли у нас на ребре, а рядом с каждым лежал телефон. Потом пробовали использовать полки с разделителями — вставляли телефоны, как книжки. Но всё это получалось неэффективно, потому что полка большая, а телефоны маленькие: даже если ставили в ряд десять девайсов, много места всё равно оставалось свободным.


Так умещали андроиды. Половина полки пустовала
И только в январе 2020 года мы нашли решение — лотки для бумаг! Оказалось, что туда идеально встаёт макбук с экраном в 13 дюймов — миллиметр в миллиметр. Не помню, как мы это выяснили, но лотки стали находкой года. Теперь они выполняют на нашей ферме функцию серверного шкафа. Чтобы подключать провода, мы вырезаем в лотках отверстия под зарядку для ноутбука и USB для телефонов.
Ноу-хау стали использовать универсально. Для iOS-фермы: ставим приоткрытый макбук в лоток и на него кладём телефон. Для Android-фермы: устанавливаем стопки лотков возле агента, в каждый помещаем несколько телефонов или телефон и планшет — в зависимости от диагонали. Важно, что лотки можно ставить один на другой — тогда на каждую полку входит одна или две стопки по шесть лотков.
Если раньше на одну полку мы могли сложить только 10 устройств, подключённых к одному компьютеру, то теперь там помещалось до 24 девайсов. Оптимизацию места провели успешно — можно было закупать больше устройств, расширять ферму и не переживать, что всё повалится с полок.

С лотками стало возможно использовать пространство на полках «в высоту»

Макбуки разместились просто идеально — по пять штук там, где раньше влезало только два
Когда мы начали работу над фермой устройств на Android и iOS, у нас уже был удалённый доступ к десктопам для тестировщиков. Работали через TeamViewer, но он поддерживал не полное логирование действий, и расшарить лицензию мы могли на ограниченное количество человек — это плохо при масштабировании. К тому же лицензии выдавали вручную, на персональный логин тестировщика — это отнимало много времени.
В начале 2019 года мы бросили все силы на iOS-ферму, а десктопы до поры не трогали. Но как только разгребли все главные проблемы со смартфонами, у нас дошли руки и до этого направления.
Серьёзный недочёт старой версии десктоп-фермы был в том, что к TeamViewer могли подключаться все тестировщики этого направления — из общего списка исполнителей, которые знали пароли для доступа к разным устройствам. При этом TeamViewer работал на своих серверах, и не было возможности внедрить строгую внутреннюю авторизацию: чтобы один конкретный человек получал доступ к нужному устройству в определённое время.

К любому ПК два-три человека могли подключиться одновременно и начать мешать друг другу
В январе 2020 года у нас заканчивалась лицензия в TeamViewer — мы решили, что это отличный момент, чтобы перетащить десктопы к себе в интерфейс, как Android-устройства.
Сначала попробовали управлять устройствами через VNC. Это решило вопрос с безопасностью. Всё работало по той же схеме, что и смартфоны — тестировщик получал одноразовую ссылку на сессию работы с конкретным устройством. Но потом мы выяснили, что при управлении через веб-клиент VNC с Mac приходит всего три кадра в секунду вместо желаемых пятнадцати — картинка тормозит из-за большого разрешения экрана и отсутствия в веб-клиенте поддержки проприетарных кодеков, которые обеспечивают хорошее быстродействие в десктопных VNC-клиентах на macOS.

Поначалу после переезда в новую серверную наши стеллажи стояли полупустые — простор и порядок. Но скоро нам снова некуда будет складывать устройства
Разработали свою технологию с приемлемым качеством. Получилось нативное приложение на C++ (так как важна скорость). Оно делает захват экрана через системное API в macOS и по маске сравнивает очередной кадр с предыдущим — чтобы для экономии трафика посылать в сеть только те кусочки кадра, которые отличаются. Эти кусочки приложение кодирует с помощью TurboJPEG и отправляет картинками, а не буферизированным видеопотоком, что позволяет видеть моментальную реакцию на действия пользователя.
Технологию делали в первую очередь для macOS, но получилось кроссплатформенное решение, которое сейчас используем для Linux и частично для Windows. Стандартное бронирование и авторизацию для тестировщиков, конечно, сразу вшили.
Мы добрались до весны 2020-го. Примечательно, что ещё до карантина к нам пришли коллеги из поисковой выдачи Яндекса и попросили организовать на ферме доступ к внутренней сети компании — чтобы на наших устройствах открывались сервисы и приложения на стадии разработки.
Внутреннюю сеть сотрудники могли самостоятельно настроить на устройствах из Гиперкуба, но её не было в Колхозе. А так как у нас уже накопилось больше девайсов, чем в каждом отдельно взятом кубике, то сотрудники хотели пользоваться этим разнообразием. Особенно просили те, кто часто работал удалённо или уставал ходить по офису к Гиперкубу. Мы взялись за дело.
Не удавалось взять и подключить даже часть телефонов к внутренней сети. По требованиям безопасности нужно отслеживать, какие действия пользователи совершают в сети Яндекса. На ферме же каждый девайс был общим, поэтому на него не устанавливался чей-то конкретный сертификат. Плюс устройства были подключены к другой Wi-Fi-сети.
Мы внедрили авторизацию на сетевом уровне.
А через два дня после того, как мы сделали внутренний доступ, весь Яндекс отправился на удалёнку. Популярность фермы у разработчиков и других сотрудников взлетела!

Нагрузка на Колхоз росла, и стороннее решение для устройств на Android перестало нас устраивать.
У Open STF часто не загружался фронтенд. Статус устройства горел зелёным (готовым к работе), а удалённый экран не грузился. Нам приходили жалобы, а мы никак не могли повлиять на стабильность стороннего решения.
Пришла пора разрабатывать свою версию Android-фермы. Но мы решили это делать с минимальными изменениями, чтобы по-прежнему было не очень сложно обновить софт управления с выходом новой версии Android.
Форк заключался в том, что мы выпилили всю авторизацию — то есть, наоборот вырезали часть функциональности из Open STF, чтобы не мешала. И затем развернули копию этого софта прямо у себя в серверной, на тех же компьютерах, куда были подключены наши устройства на Android.
Было: одна большая Open STF, которая обслуживала все устройства и тянула их за собой в случае проблем; плюс прокси-сервер для проверки авторизации. Стало: четыре маленьких локальных фермы, каждая из которых не зависит от других и даёт прямой доступ к устройствам под контролем нашего бэкенда.
Обычно мы заклеиваем камеру на устройствах, и на снимке виден только чёрный экран:
Но иногда можно увидеть лоток, в котором лежат устройства:
Подключение Гиперкуба
Благодаря новой архитектуре Android-фермы мы получили возможность устанавливать часть софта для управления устройствами на компьютеры вне серверной Колхоза. Как раз в это время к нам пришли администраторы Гиперкуба и предложили добавить на ферму их устройства — во время пандемии сотрудники разобрали их по домам и не могли передавать девайсы друг другу.
Всё, что нам нужно было сделать, — установить специальную программу на компьютеры в Гиперкубе. И в Колхозе появилось больше тысячи новых устройств на Android. Единственное ограничение — эти телефоны были доступны только штатным сотрудникам, потому что не имели доступа к внешнему Wi-Fi. Но в период пандемии и массового перехода на удалёнку это расширение оказалось полезным.
Увы, с iOS-девайсами такая интеграция была невозможна — мы не могли засунуть в кубик сорок дополнительных ноутбуков, чтобы к каждому подключить по телефону. А с Android — пожалуйста. Их можно десятками подсоединять к одному агенту, и всё работает быстро и качественно. Наш рекорд — к одному мощному компьютеру подключены сто девайсов на Android.
Но после интеграции Гиперкуба мы поняли, что можем сделать сервером фермы любой рабочий ноутбук — на macOS, Windows или Linux. И уже к нему сотрудники смогут подключать все нужные им устройства. Эту возможность мы стали предоставлять распределённым командам: они собирают маленькую ферму с собственными девайсами прямо у себя в кабинете и сами решают, кому давать права управления их устройствами. После этого команда может подключаться к своим рабочим девайсам из любых точек мира — через единый интерфейс Колхоза.

С ростом парка устройств провода снова начали походить на распутанный клубок
Дальше история Колхоза не заканчивается, но двигается вперёд маленькими шагами. Поделюсь самыми важными.
Летом 2020 года мы перестали справляться с сообщениями в ламповом чате команды. Тогда завели большую справку с инструкциями по ферме и обучающими видео. А ещё — полноценный саппорт в виде окошка быстрого чата в интерфейсе.
Если пользователь не находит ответ на свой вопрос в готовой справке, он может обратиться к саппорту:
Наша служба поддержки, как и тестировщики, работает удалённо. Это люди, которые хорошо знают ферму и помогут в большинстве возникающих вопросов. Если пользователи пожалуются на неисправность устройства, саппорт проверит, действительно ли есть проблема. Если да — устройство пометят как нерабочее и попробуют починить удалённо. Не получится — передадут информацию о поломке офлайн-администраторам.
Кроме этого, есть автоматические диагностики — все устройства периодически запускают самотестирование, которое проверяет основные функции. Когда что-то не работает, устройство получает пометку, чтобы пользователи его не брали.

У одного из тестировщиков подвисла тестовая версия Навигатора
Запрос на эту фичу был с самого начала, но не сразу получилось внедрить автоматическую чистку. Поэтому долгое время мы просто просили пользователей: выйдите отовсюду, удалите файлы и установленные приложения. Но, конечно, далеко не все это делали. Когда другие люди брали устройство, им сначала приходилось чистить девайс и сбрасывать предыдущие настройки.
В 2020 году мы наконец-то смогли добавить автоматическое обнуление на смартфонах. Теперь система после каждой сессии проверяет и стирает установленные программы, чистит часть файловой системы устройства, загрузки, выходит из приложений. Всем стало проще работать.

Просим пользователей не логиниться в личных аккаунтах
Изначально звук на наших устройствах не воспроизводился. Через удалённый доступ нельзя было послушать голосовые команды, сигналы в приложениях, трек в видео. Эту фичу у нас часто просили команды Яндекс Музыки и Карт. Мы долгое время изучали разные способы, как дотащить звук до пользователя через все наши серверные и удалённое управление.
Особенность передачи звука с фермы — рядом всегда находится много других устройств, которые тоже как-то звучат. Поэтому звук нужно снимать только системно, не через динамики. Если зайти в серверную Колхоза, там на одном телефоне играет рэп, на другом кто-то смотрит стрим, на третьем тестируются Карты. Шум порой стоит невозможный.
Мы нашли два решения. Первое — для Android-устройств: проводом получать звук через разъём наушников. Второе — для iOS: внезапно оказалось, что механизм, позволяющий использовать только один девайс на одном ноутбуке, умеет передавать и звук тоже. Спасибо и на том.
Добавили нестандартные устройства
У нас давно числились в базе головные автомобильные устройства, которыми для нашего сервиса являются планшеты на Android. С развитием фермы мы вывели их в отдельную вкладку «Умные устройства». После добавления поддержки звука туда же попала Яндекс Станция. А потом, по запросу Группы тестирования Алисы и Умных устройств, у нас появились и телевизоры.


Кто-то тестирует Android TV

Новенькие, закупленные на ферму Яндекс Станции
По умолчанию у нас работает автоматическое тегирование, которое при подключении устройства к ферме выясняет и вносит в систему его характеристики. В среднем это 30-40 параметров: от модели телефона и версии ОС до разрешения экрана и быстродействия. В итоге мы получаем детальную базу устройств, из которой пользователь может выбрать максимально подходящее — отметить в системе нужные фильтры и получить список доступных девайсов.
В начале 2021 года мы сделали возможность оценить устройство после работы — так к техническим характеристикам девайса добавился его рейтинг. Если устройство часто тормозит или плохо справляется с тестами, у него будет низкий рейтинг, а если всё летает — то высокий.
Рейтинг помог нам обнаружить самые плохие устройства и убрать их из раздачи или заменить новыми. Делать вручную это было бы долго и тяжело, а так на помощь нам пришёл классический краудсорсинг — по отзывам сотен людей мы стали быстро получать точную оценку каждого девайса.

При завершении бронирования система просит пользователя оценить устройство
Кроме того, система теперь подбирает пользователю девайсы с самым высоким рейтингом из доступных, а не первые попавшиеся. До этого часто были случаи, когда тестировщики получали медленное устройство и жаловались на него, в то время как более мощный подходящий девайс лежал без дела. Рейтинг оптимизировал распределение.
На скрине выше видна голубая плашка-предупреждение о видеозаписи всех сессий. Эту фичу мы внедрили в целях безопасности и контроля качества. Раньше при неполадках на устройстве тестировщики не всегда нажимали кнопку «Запись» — потом было сложно в точности воспроизвести замеченные дефекты и разобраться, что работает не так. С видеозаписью всех сессий на бэкенд фермы проблему решили. Теперь можно автоматически получить скринкаст своих тестов с любого девайса.
У администраторов Колхоза есть доступ ко всем видео. Это помогает контролировать качество работы устройств, вычислять читеров или делать сложный дебаг (учитывать все действия на девайсе, а не только указанные в баг-репорте).
Изначально у нас не было никаких ограничений по времени использования устройства и их количеству на одного пользователя. В крауд-тестировании с этим не возникало проблем — удалённый тестировщик приходил, брал подходящий девайс, делал свой тест по инструкции и уходил. А вот с наплывом в Колхоз разработчиков начались сложности.
Некоторые бронировали двадцать устройств на час и перебирали их — смотрели, с каким больше нравится работать. Бывали и бронирования на целый день, по которым даже не открывали устройство — забывали или не успевали. Чтобы такого не было, мы ввели квоты.
Теперь у каждого сотрудника есть три часа в день на использование девайсов в Колхозе. Но если квота закончилась, а человеку нужно продолжать работать, он может запросить увеличение времени.

Опираясь на рейтинг и информацию о бронированиях, мы делаем выводы: каких устройств не хватает, а какие совсем не используются. Это помогает нам перестраивать базу под потребности тестирования — чтобы ненужные девайсы не занимали слоты на ферме.
Например, слишком старые версии ОС перестают быть актуальными — тогда мы оставляем несколько устройств с такими системами на всякий случай, а остальные обновляем до более востребованных.
Кстати, новые версии ОС у нас появляются сразу после релиза, а модели телефонов — как только выходят в продажу. Например, в Колхозе можно потестировать Huawei с HMS, Google Pixel 2, 3, 4a, 5 и 6, версии Android от 4.2.2 до новейшей беты 13 и устройства на iOS от 9 до 16 версии. Но зачастую проблемы возникают именно со старыми системами и устройствами, которые не так просто купить. Поэтому мы стараемся сохранять редкие девайсы и ОС.
Ещё одна фича, которую мы не сразу смогли внедрить. На компьютере, куда подключено устройство, прописываем для связи с девайсом прокси-сервер — но не настоящий, а особый. Он (прокси) через веб-сокеты заворачивает в туннель приходящие к нему запросы. Этот туннель протягивается от наших серверов до интерфейса фермы на компьютере пользователя, где тоже ставится специальное приложение, соединённое с нашим сервером. Грубо говоря, в этот момент ферма становится мостиком, по которому до устройства дотягивается локальный интернет с компьютера пользователя. И человек во Владивостоке может раздать свою сеть на наш девайс в Питере.

Схема даёт две возможности: перехватывать и анализировать трафик с удалённого устройства
Периодически нам поступают запросы на поддержку автотестов, но мы пока сконцентрированы на ручном тестировании. Поэтому стали предоставлять API, через который можно забронировать устройство и попробовать своими средствами сделать инфраструктуру для автотестирования.
Потом эти пользовательские системы подключаются к API фермы и выполняют заданные действия. Благодаря этому для Android-устройств теперь возможна удалённая отладка тестов.
Если оглядываться назад, то мы, конечно, не ожидали, что ферма разрастётся до таких масштабов. Создавали её для iOS-устройств, чтобы предоставить удалённым тестировщикам дефицитные версии телефонов и ОС, а в итоге сделали мультиплатформенное решение, которое поддержало девайсами весь Яндекс на удалёнке и позволило сервису Crowd вырасти из 100 исполнителей в текущие 3000+ человек.
Всё это было бы невозможно без поддержки ряда команд Яндекса, которые помогали нам развивать сервис на разных этапах истории. Хелпдеск спас железом, Гиперкуб поделился устройствами, группы Поиска, Алисы, Навигатора и Музыки помогли с внедрением полезных фич. Парк Колхоза стартовал с 12 айфонов и 30 андроидов, а теперь у нас больше 200 iOS-устройств, около 450 андроидов и больше 50 умных девайсов, Станций и телевизоров. И всё это можно продолжать масштабировать.
В глобальном смысле Колхоз даёт людям возможность войти в профессию тестировщика с одним компьютером. Раньше лишь у малой части удалённых исполнителей имелись на руках разные устройства: планшеты на Android, айпады, свои Станции, умные часы, блютус-гарнитуры, смартфоны на разных ОС. Большинство же работало с одним лэптопом и смартфоном — многие задания тестировщикам было просто не на чем выполнять.
В планах — продолжать наращивать качество и объём тестирования, увеличивать возможности фермы за счёт технических доработок.
Если у вас появились идеи, как ещё можно использовать Колхоз, пишите в комментарии, будем рады свежим мыслям.
Автор: Кирилл
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/diy-ili-sdelaj-sam/378640
Ссылки в тексте:
[1] Гиперкуб, мы уже писали о нём: https://habr.com/ru/company/yandex/blog/485050/
[2] Источник: https://habr.com/ru/post/686324/?utm_source=habrahabr&utm_medium=rss&utm_campaign=686324
Нажмите здесь для печати.