Fred - это инструмент визуальной регрессии OpenSource, используемый для сравнения двух экземпляров веб -сайта. Фред отвечает за автоматическое тестирование на визуальную регрессию с целью обеспечения того, чтобы функциональность не была нарушена, сравнивая текущий (базовый уровень) и обновленную версию веб -сайта. Фред сравнивает следующее:
Визуальный анализ вычисляет нормализованную среднюю квадратную ошибку и индекс структурного сходства на снимках экрана базовых и обновленных сайтов, в то время как визуальный ИИ рассматривает макет и изменения содержания независимо, применяя методы машинного обучения сегментации изображений для распознавания текста высокого уровня и визуальных структур изображений. Это уменьшает влияние динамического содержания, дающего ложные срабатывания.
Используйте Фред, если вам нужно:
Фред разработан, чтобы быть масштабируемым. Он имеет внутреннюю очередь и может обрабатывать веб -сайты параллельно в зависимости от количества доступных оперативных памяти и процессоров (или графических процессоров).
_fred-v1 . Обратите внимание, что v2.x (текущая версия) не содержит кода для обучения/переподготовки модели ML. Если вам нужно это сделать, проверьте исходный код в папке V1. Модели идентичны, поэтому, если вы создаете свою индивидуальную обученную модель, подключите ее в V2, и она будет работать. Вы можете запустить Фред либо в качестве докера, либо как локальный процесс.
Если вы просто хотите клонировать и запустить программное обеспечение, мы предоставили Dockerfile. Чтобы запустить:
git clone https://github.com/adobe/frontend-regression-validator.git
cd frontend-regression-validator/docker
docker build --no-cache -t fred .
docker run -p 5000:5000 -m 8g --memory-reservation=8g --oom-kill-disable=True --memory-swap 8G fred Если вы все еще сталкиваетесь с проблемами с ошибками памяти, выделите больше памяти из приложения UI Docker. Просто нажмите на значок Docker на панели инструментов, перейдите к Preferences - Advanced , а затем потяните слайдер до 8GB или более, особенно если вы планируете использовать ML (необязательно). Мы рекомендовали запустить его локально, а не использовать DockerFile или увеличить память, выделенную для Docker at least 8GB, prefferably 16GB .
Убедитесь, что вы установили chromedriver . Если у вас его нет, установите его на Mac с:
brew tap homebrew/cask && brew cask install chromedriver
или на Linux с:
sudo apt-get install chromium-chromedriver
Затем запустите следующее:
git clone https://github.com/adobe/frontend-regression-validator.git
cd frontend-regression-validator
pip install -r requirements.txt
cd fred/ml
cat model_files.bz2.parta* > model_files.bz2
tar xjf model_files.bz2
cd ..
python3 run.py
Это запустит экземпляр Flask, который отвечает на запросы, а также предлагает интерфейс веб -пользователя. QuickNote: Используйте --port , чтобы указать порт прослушивания, по умолчанию он слушает на 5000 . Пожалуйста, просмотрите более подробную информацию о параметрах стартапа Фреда здесь.
Взаимодействие с Фредом выполняется либо веб -интерфейсом, либо с помощью вызовов API. Пользовательский интерфейс просто позволяет пользователю отправлять вызовы в конечную точку API и просмотреть результаты.
Чтобы открыть веб -интерфейс, перейдите по адресу http://0.0.0.0:5000/static/submit.html (отрегулируйте порт соответственно). Заполните все необходимые поля, запустите задание и подождите, пока она не завершится. Просмотреть результаты, нажав на ссылку Jobs в заголовке.
Чтобы использовать API, просмотрите выделенный API Readme здесь.
Фред ждет, пока он не получит запрос на сравнение веб -сайта (публикуйте звонок в /api/verify ). Это начинает процесс ползания. Мы можем попросить увидеть все задания с помощью Call to /api/viewjobs и получить статус конкретной работы с помощью получения /api/results предоставляющих идентификатор задания в качестве параметра.
Таким образом, ввод для FRED - это пара URL -адресов для сравнения.
Процесс начинается с того, что Фред ползет по URL -адресам, чтобы извлечь несколько страниц для сравнения, а затем отображает каждую страницу и делает скриншоты.
Консоль и сетевые журналы сравниваются.
Каждый скриншот анализируется (как пары базовых/обновленных скриншотов, для каждого указанного разрешения).
Если включена, каждая пара скриншотов также подвергается анализу ML
Результаты сохраняются локально (пользователь должен периодически проверять через API до тех пор, пока status не будет установлен для Done , и/или некоторая error установлена.)
Результатом является объект JSON, который в ключе report содержит ряд результатов. overall_divergence показатель_DIVERGENCE-это взвешенная сумма сети, визуальной и визуальной (если включена) дивергенции. Оценка 0 означает идеальную матч (нет разницы между базовой линией и обновлением), в то время как более высокие оценки до 100 различий.
При необходимости используйте визуальный интерфейс, чтобы быстро исследовать результаты. В противном случае, report также содержит ссылки на необработанные изображения, а также аналитические изображения, которые выделяют различия, если вы хотите использовать FRED в автоматическом виде.
Поскольку Фред предназначен для масштабируемого, он логически разделен на два компонента: crawler и ML . Компонент crawler является основной точкой входа, с которой пользователь взаимодействует. Компонент ML , будучи тем же кодом, что и компонент crawler , является просто еще одним прослушиванием конечной точки для вызовов API. Логика этого разделения заключается в том, что графические процессоры стоят дорого, а процессоры - нет. Таким образом, у нас может быть много сканеров, которые, в свою очередь, предпринимают запросы на несколько актуальных экземпляров Fred (называемые компонентами ML ) для выполнения анализа ML.
Например, представьте себе сценарий, в котором у нас есть 1000 веб -сайтов для ежедневного анализа. Мы создаем 10 виртуальных машин, каждая с 32 ГБ ОЗУ и 8 VCPU. Каждый экземпляр будет получать 100 /api/verify вызовов. Предположим, что мы установили --crawler_threads на 5, что означает, что мы можем одновременно ползать 5 сайтов. Кроме того, поскольку у нас есть только одна машина графического процессора с 4 графическими процессорами, мы запускаем на нем экземпляр FRED, который мы назовем компонентом ML . В этом случае мы устанавливаем --ai_threads на 4, то есть мы одновременно запускаем 4 мл проверки. Теперь, по каждому из запросов Post API в компонентах crawler , мы устанавливаем ml_address на адрес компонента ml . Что теперь произойдет, так это то, что всякий раз, когда компонент crawler заканчивается для ползания и анализирует пару веб-сайтов, он отправит компонент ML свои скриншоты и просит их анализировать. Компонент ml добавит этот запрос в свою очередь, и когда GPU будет доступен, он будет выполнять сравнение на нем. По завершении он автоматически отчитывается обратно на создающий компонент crawler свой анализ. По сути, этот подход масштабирует производительность линейно с количеством доступных тестовых машин.
Фред Рантта сильно варьируется от сложности сайта. Большая часть времени проводится в компоненте Crawler, так как (к сожалению) загрузка веб -сайта не является детерминированным процессом. Иногда веб -сайт просто висит, или появляется всплывающее окно, или какой -то внешний ресурс отказывается загружать. Внутренне у нас есть единственное средство от этого: своего рода try-catch перезагрузить веб-сайт, если случится что-то ужасное. Но это в сочетании с тем фактом, что мы ждем несколько секунд после того, как страница говорится, что она загружена, плюс повторные скриншоты, чтобы обнаружить динамическое содержание, значительно увеличивая время ползания.
Часть полза обычно занимает 2-10 минут, в зависимости от количества ползающих страниц.
Визуальный анализ (с каждым скриншотом, ограниченным не более 20 мегапикселей) занимает ~ 5-10 секунд на пару изображений. Каждое дополнительное разрешение означает другой набор пар изображений.
Визуальный анализ AI (ML) занимает 0-30 секунд на пару изображений на графическом процессоре . Любой GPU подойдет, даже старый K80 будет работать очень быстро, так как ML PAR-это U-Net (сложенные сверточные слои). Вы всегда можете запустить процессор, но вместо 30 секунд на пару изображений вы можете подождать 5 минут на пару изображений.
В целом, эмпирическое правило для ползания с поддержкой ML, начало до конца, составляет 1 минуту или меньше на страницу.