|
| 1 | +# Оптимизация времени выполнения тестов |
| 2 | + |
| 3 | +Для оптимизации был выбран рабочий проект. |
| 4 | + |
| 5 | +# Подготовка |
| 6 | + |
| 7 | +Первое что необходимо было сделать это замерить текущее время прогона всех тестов |
| 8 | +и настроить отправку этой метрики в `InfluxDB`. |
| 9 | + |
| 10 | +Изначальное время выполнения `1444` тестов оказалось почти `6` минут: |
| 11 | + |
| 12 | +``` |
| 13 | +Finished in 5 minutes 54 seconds (files took 3.78 seconds to load) |
| 14 | +1444 examples, 0 failures |
| 15 | +``` |
| 16 | + |
| 17 | +С отправкой метрик в `InfluxDB` возникли некоторые сложности. |
| 18 | + |
| 19 | +Вначале я хотел сделать отправку в cloud версию этой БД что бы не пришлось её разворачивать у себя, |
| 20 | +но по какой то причине данные туда не уходили, соединение с сервисом отваливалось по таймауту, |
| 21 | +так что пришлось отказаться от этой идеи. |
| 22 | + |
| 23 | +После чего я решил развернуть эту БД у себя локально с помощью `docker`-а. В процессе работы было выяснено |
| 24 | +что в `Chronograf`-е особой необходимости нет, т.к. контейнер с `InfluxDB` уже предоставляет неплохой |
| 25 | +интерфейс с возможностью отрисовки графиков и создания Dashboard-ов. |
| 26 | + |
| 27 | +Итоговый конфиг в докере для `InfluxDB` оказался таким: |
| 28 | + |
| 29 | +```yml |
| 30 | +services: |
| 31 | + influxdb: |
| 32 | + image: influxdb |
| 33 | + ports: |
| 34 | + - '8086:8086' |
| 35 | + volumes: |
| 36 | + - influxdb-storage:/var/lib/influxdb2 |
| 37 | + |
| 38 | +volumes: |
| 39 | + influxdb-storage: |
| 40 | +``` |
| 41 | +
|
| 42 | +В этой конфигурации данные успешно уходят в `InfluxDB`. |
| 43 | + |
| 44 | +# Оптимизация |
| 45 | + |
| 46 | +## parallel_tests |
| 47 | + |
| 48 | +После распараллеливания время прогона тестов упало с `360` до `150` секунд. |
| 49 | + |
| 50 | +### TODO |
| 51 | + |
| 52 | +Наибольшее время занимает прогон `feature` тестов, требующих браузера. |
| 53 | +В дальнейшем, по мере увеличения количества тестов, |
| 54 | +можно будет разделить запуск тестов на тесты требующие браузер (и долго выполняющиеся) и все остальные. |
| 55 | +И локально запускать только быстрые, не требующие браузера, тесты. |
| 56 | +Полный прогон в любом случае будет выполняться в CI. |
0 commit comments