|
| 1 | +### Юнит тесты |
| 2 | +#### Сборка и запуск проекта |
| 3 | +Собираем и запускаем проект с конфигом `config.ini` или `testing.ini` |
| 4 | +```bash |
| 5 | +$ docker compose build |
| 6 | + |
| 7 | +$ APP_CONF=../app_conf/testing.ini docker compose up |
| 8 | +``` |
| 9 | + |
| 10 | +#### Запуск тестов |
| 11 | +Запускаем тесты следующей командой |
| 12 | +```bash |
| 13 | +$ docker exec web_speech_trainer-web-1 bash -c 'cd /project/tests && pytest --ignore=selenium' |
| 14 | +``` |
| 15 | + |
| 16 | +`--ignore=selenium` необходим (`pytest -s . -k 'not selenium'` не сработает), чтобы pytest не смотрел на selenium тесты, которые будут собраны в другом контейнере, иначе будут ошибки (selenium тесты будут ссылаться на отсутствующие в текущем контейнере зависимости) |
| 17 | +### Selenium тесты |
| 18 | + |
| 19 | +#### Сборка и запуск проекта |
| 20 | +Сборка и запуск проекта с selenium тестами осуществляется c конфигом `testing.ini` следующим образом |
| 21 | +```bash |
| 22 | +$ docker compose -f docker-compose.yml -f docker-compose-selenium.yml build |
| 23 | + |
| 24 | +$ APP_CONF=../app_conf/testing.ini docker compose -f docker-compose.yml -f docker-compose-selenium.yml up |
| 25 | +``` |
| 26 | +#### Запуск тестов |
| 27 | +Чтобы запустить selenium тесты необходимо выполнить следующую команду |
| 28 | +```bash |
| 29 | +$ docker exec web_speech_trainer-selenium-tests-1 bash -c 'pytest .' |
| 30 | +``` |
| 31 | +От сюда же можно запустить и юнит тесты, описанным в разделе юнит тестов способом |
| 32 | +#### Структура selenium тестов |
| 33 | +##### Selenium session |
| 34 | +Запускаемые тесты используют фикстуру `selenium_session` со `scope="module"`, объявленную в `conftest.py`. Она регистрируется в системе и возвращает экземпляр класса `SeleniumSession` с запущенным и настроенным драйвером. В нашем случае `scope="module"` значит, что для всех тестов в одном модуле будет использоваться один экземпляр `SeleniumSession` (не будет пересоздаваться от теста к тесту в одном модуле). |
| 35 | + |
| 36 | +При необходимости можно объявлять другие фикстуры с другими настройками драйвера, например убрать симуляцию аудиопотока. |
| 37 | +##### Training session |
| 38 | +Класс `TrainingSession` является надстройкой над `SeleniumSession`. Можно сказать, что это API взаимодействия с любой тренировкой. Причем `SeleniumSession` может передаваться между такими надстройками, что позволяет создавать различные сценарии для тестирования. |
| 39 | + |
| 40 | +Например, после завершения тренировки, использовать API для другой странички, чтобы полистать страничку со всеми тренировками и убедиться в наличии новой тренировки. |
| 41 | +##### Test Main |
| 42 | +`test_main.py` - входная точка тестирования, содержащая класс `TestMain`, который назовем сценарием тестирования. Данный класс может наследоваться от других сценариев тестирования, которые в данном контексте уже будут подсценариями. Например в `TestMain` используется подсценарий `SimpleTraining` проверяющий простую тренировку, но после тренировки можно использовать и другие подсценарии. |
| 43 | + |
| 44 | +Исполнение тестов будет идти в порядке наследования, причем названия наследуемых классов не должны иметь префикс `Test`, иначе тесты могут дублироваться (вроде как принято использовать префикс `Base` для таких классов). |
| 45 | + |
| 46 | +Наследование позволяет создавать различные сценарии тестирования. Каждый сценарий лучше описывать в отдельном файле вида `test_<название модуля с тестами>.py`, а их подсценарии либо в этом же файле, либо в файле без префикса `test_`, если планируется использование в других сценариях. |
0 commit comments