Skip to content

Commit 9c7e47e

Browse files
committed
Обновленый ридми для тестирования
1 parent 71c133d commit 9c7e47e

File tree

1 file changed

+34
-11
lines changed

1 file changed

+34
-11
lines changed

tests/README.md

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,46 @@
1-
## Подготовка
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+
```
215

3-
Сборка и запуск проекта с selenium тестами осуществляется из корня проекта следующими командами
16+
`--ignore=selenium` необходим (`pytest -s . -k 'not selenium'` не сработает), чтобы pytest не смотрел на selenium тесты, которые будут собраны в другом контейнере, иначе будут ошибки (selenium тесты будут ссылаться на отсутствующие в текущем контейнере зависимости)
17+
### Selenium тесты
418

19+
#### Сборка и запуск проекта
20+
Сборка и запуск проекта с selenium тестами осуществляется c конфигом `testing.ini` следующим образом
521
```bash
622
$ docker compose -f docker-compose.yml -f docker-compose-selenium.yml build
723

824
$ APP_CONF=../app_conf/testing.ini docker compose -f docker-compose.yml -f docker-compose-selenium.yml up
925
```
10-
## Запуск тестов
11-
12-
#### Selenium
26+
#### Запуск тестов
1327
Чтобы запустить selenium тесты необходимо выполнить следующую команду
14-
1528
```bash
1629
$ docker exec web_speech_trainer-selenium-tests-1 bash -c 'pytest .'
1730
```
18-
#### Без selenium
19-
Однако возникают сценарии, требующие запуска тестов помимо selenium, можно воспользоваться командой
31+
От сюда же можно запустить и юнит тесты, описанным в разделе юнит тестов способом
32+
#### Структура selenium тестов
33+
##### Selenium session
34+
Запускаемые тесты используют фикстуру `selenium_session` со `scope="module"`, объявленную в `conftest.py`. Она регистрируется в системе и возвращает экземпляр класса `SeleniumSession` с запущенным и настроенным драйвером. В нашем случае `scope="module"` значит, что для всех тестов в одном модуле будет использоваться один экземпляр `SeleniumSession` (не будет пересоздаваться от теста к тесту в одном модуле).
2035

21-
```bash
22-
$ docker exec web_speech_trainer-web-1 bash -c 'cd /project/tests && pytest --ignore=selenium'
23-
```
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

Comments
 (0)