OTUS Homework 4: Selenoid + GGR + Nginx

В этом проекте я собрал инфраструктуру для запуска UI-тестов через Selenoid и добавил Ansible-деплой для локального стенда и удаленных VM.

Что реализовано

  • UI-тесты из HW1 запускаются через удаленный RemoteWebDriver (Selenoid).
  • Поддержаны браузеры: chrome, firefox, mobile_chrome.
  • Подняты сервисы: selenoid, selenoid-ui, ggr, nginx.
  • Один inventory для всех стендов: localhost (WSL), vm1, vm2.

Точки доступа:

  • UI: http://<host_ip>/
  • WebDriver: http://<host_ip>/wd/hub

Версии в проекте

Настройки лежат в ansible/inventory/group_vars/all.yml.

Браузеры:

  • Chrome: 128.0, 127.0
  • Firefox: 125.0, 124.0

Образы инфраструктуры:

  • aerokube/selenoid:1.11.3
  • aerokube/selenoid-ui:1.10.11
  • aerokube/ggr:1.7.2
  • aerokube/ggr-ui:latest-release
  • nginx:1.28.2

Что нужно подготовить перед запуском

На каждой VM должен быть пользователь ansible:

  • вход по SSH-ключу;
  • sudo без пароля (NOPASSWD).

Ниже один простой вариант первичной подготовки VM.

  1. На локальной машине генерирую ключи (если их еще нет):
ssh-keygen -f ~/.ssh/id_ed25519
  1. Захожу на VM под root:
ssh root@10.10.2.127
  1. Под root создаю пользователя ansible, добавляю в sudo и в sudoers:
useradd -m -s /bin/bash ansible
usermod -aG sudo ansible
echo "ansible ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible
chmod 440 /etc/sudoers.d/ansible
  1. Под root кладу публичный ключ в профиль ansible:
install -d -m 700 -o ansible -g ansible /home/ansible/.ssh
cat >> /home/ansible/.ssh/authorized_keys

После запуска этой команды вставляю содержимое ~/.ssh/id_ed25519.pub, затем Ctrl+D.

  1. Под root выставляю права:
chown ansible:ansible /home/ansible/.ssh/authorized_keys
chmod 600 /home/ansible/.ssh/authorized_keys
  1. Проверяю вход под ansible:
ssh -i ~/.ssh/id_ed25519 ansible@10.10.2.127 "whoami && sudo -n true && echo sudo_ok"

Как добавить новые VM

  1. Добавляю хост в ansible/inventory/hosts.ini.
  2. Создаю ansible/inventory/host_vars/vmN.yml:
ansible_host: <ip>
ansible_user: ansible
ggr_selenoid_host_override: selenoid

Запуск Ansible

В PowerShell синтаксис VAR=value command не работает, поэтому запускаю через wsl bash -lc.

Важно: --limit должен быть внутри кавычек команды.

localhost (WSL)

wsl bash -lc "cd /mnt/c/Users/spawn/IdeaProjects/otus-autotests/homework_1/ansible && ANSIBLE_ROLES_PATH=./roles ansible-playbook -i inventory/hosts.ini playbooks/site.yml --limit localhost"

VM1

wsl bash -lc "cd /mnt/c/Users/spawn/IdeaProjects/otus-autotests/homework_1/ansible && ANSIBLE_ROLES_PATH=./roles ansible-playbook -i inventory/hosts.ini playbooks/site.yml --limit vm1"

VM2

wsl bash -lc "cd /mnt/c/Users/spawn/IdeaProjects/otus-autotests/homework_1/ansible && ANSIBLE_ROLES_PATH=./roles ansible-playbook -i inventory/hosts.ini playbooks/site.yml --limit vm2"

Если ключ используется из /mnt/c/..., в WSL может быть ошибка UNPROTECTED PRIVATE KEY FILE.
Я использую копию ключа в WSL-профиле:

mkdir -p ~/.ssh
cp /mnt/c/Users/spawn/.ssh/id_ed25519 ~/.ssh/id_ed25519
cp /mnt/c/Users/spawn/.ssh/id_ed25519.pub ~/.ssh/id_ed25519.pub
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub

Команды для запуска тестов

Все UI-тесты (Chrome)

mvn "-Dexecution.mode=selenoid" "-Dbrowser=chrome" "-Dbrowser.version=128.0" "-Dselenoid.url=http://10.10.2.112/wd/hub" test

Конкретный UI-тест

mvn "-Dexecution.mode=selenoid" "-Dbrowser=chrome" "-Dbrowser.version=128.0" "-Dselenoid.url=http://10.10.2.112/wd/hub" "-Dtest=ru.kovbasa.tests.CourseSearchTest" test

Mobile Chrome

mvn "-Dexecution.mode=selenoid" "-Dbrowser=mobile_chrome" "-Dbrowser.version=128.0" "-Dselenoid.url=http://10.10.2.112/wd/hub" test

Firefox

mvn "-Dexecution.mode=selenoid" "-Dbrowser=firefox" "-Dbrowser.version=125.0" "-Dselenoid.url=http://10.10.2.112/wd/hub" test

Citrus (HW3 API)

Citrus: вынесен в отдельный модуль citrus-tests, реализовано на базе HW3;

mvn -f citrus-tests/pom.xml test

Запуск тестов через Ansible

wsl bash -lc "cd /mnt/c/Users/spawn/IdeaProjects/otus-autotests/homework_1/ansible && ANSIBLE_ROLES_PATH=./roles ansible-playbook -i inventory/hosts.ini playbooks/site.yml --limit vm1 -e run_tests_via_ansible=true"

Запуск с Linux/macOS

На Linux/macOS:

cd ansible
ANSIBLE_ROLES_PATH=./roles ansible-playbook -i inventory/hosts.ini playbooks/site.yml --limit vm1
Description
No description provided
Readme 95 KiB
Languages
Java 100%