Files
homework_1/README.md

150 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. На локальной машине генерирую ключи (если их еще нет):
```bash
ssh-keygen -f ~/.ssh/id_ed25519
```
2. Захожу на VM под `root`:
```bash
ssh root@10.10.2.127
```
3. Под `root` создаю пользователя `ansible`, добавляю в `sudo` и в `sudoers`:
```bash
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
```
4. Под `root` кладу публичный ключ в профиль `ansible`:
```bash
install -d -m 700 -o ansible -g ansible /home/ansible/.ssh
cat >> /home/ansible/.ssh/authorized_keys
```
После запуска этой команды вставляю содержимое `~/.ssh/id_ed25519.pub`, затем `Ctrl+D`.
5. Под `root` выставляю права:
```bash
chown ansible:ansible /home/ansible/.ssh/authorized_keys
chmod 600 /home/ansible/.ssh/authorized_keys
```
6. Проверяю вход под `ansible`:
```bash
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`:
```yaml
ansible_host: <ip>
ansible_user: ansible
ggr_selenoid_host_override: selenoid
```
## Запуск Ansible
В PowerShell синтаксис `VAR=value command` не работает, поэтому запускаю через `wsl bash -lc`.
Важно: `--limit` должен быть внутри кавычек команды.
### localhost (WSL)
```powershell
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
```powershell
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
```powershell
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-профиле:
```bash
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)
```bash
mvn "-Dexecution.mode=selenoid" "-Dbrowser=chrome" "-Dbrowser.version=128.0" "-Dselenoid.url=http://10.10.2.112/wd/hub" test
```
### Конкретный UI-тест
```bash
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
```bash
mvn "-Dexecution.mode=selenoid" "-Dbrowser=mobile_chrome" "-Dbrowser.version=128.0" "-Dselenoid.url=http://10.10.2.112/wd/hub" test
```
### Firefox
```bash
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;
```bash
mvn -f citrus-tests/pom.xml test
```
### Запуск тестов через Ansible
```powershell
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:
```bash
cd ansible
ANSIBLE_ROLES_PATH=./roles ansible-playbook -i inventory/hosts.ini playbooks/site.yml --limit vm1
```