From f177acec1bbd4bc1c2047bfd7b39d2a13b1266cf Mon Sep 17 00:00:00 2001 From: elenachekhina Date: Sat, 22 Mar 2025 15:25:43 +0400 Subject: [PATCH] test-suite --- after.png | Bin 0 -> 4395 bytes before.png | Bin 0 -> 7557 bytes case-study.md | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 after.png create mode 100644 before.png create mode 100644 case-study.md diff --git a/after.png b/after.png new file mode 100644 index 0000000000000000000000000000000000000000..bc395177b9464ea3bd9d7220834ab603da75ea0f GIT binary patch literal 4395 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 literal 0 HcmV?d00001 diff --git a/before.png b/before.png new file mode 100644 index 0000000000000000000000000000000000000000..c6b46a0f792f26c1a3ff63eb7c0b4164b7b1a31d GIT binary patch literal 7557 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 WY}87!`3+nKIeo&}w%q#Cz5f8i0b6hY literal 0 HcmV?d00001 diff --git a/case-study.md b/case-study.md new file mode 100644 index 0000000..e511ec2 --- /dev/null +++ b/case-study.md @@ -0,0 +1,107 @@ +# Case-study оптимизации + +## Актуальная проблема +В нашем проекте тесты (6594) проходят за примерно 5,5 минут на CI (локально около 3 минут). + +Чуть меньше года назад была итерация по ускорению тестов, результат которой: +30 минут -> 4 минуты (CI) +8,5 минут -> 3 минуты (локально) +В первой итерации основные изменения: +вынесла в сиды 2 справочника, объекты которых создавались в каждом тесте +уменьшила вложенность фабрик +вынесла в фикстуры дефолтные фабрики +привела в порядок использование фабрик в самых долгих тестах (let_it_be, build, before_all) + +Локально время не дегрдировало, на CI время поменялось после переезда в Gitlab +Я решила попробовать ускорить тесты еще раз. + +## Формирование метрики +Для того, чтобы понимать, дают ли мои изменения положительный эффект на быстродействие программы я придумал использовать такую метрику: +среднее время выполнения тестов за 3 запуска на локальной машине должно укладываться в 2 минуты + +## Вникаем в детали системы, чтобы найти главные точки роста +Время до оптимизаций: Finished in 3 minutes 7.8 seconds (files took 4.04 seconds to load) + +Для того, чтобы найти "точки роста" для оптимизации я воспользовался rspec, ruby-prof, stackprof, test-prof и другими инструментами, которые мы рассмотрели на лекциях. + +Вот какие проблемы удалось найти и решить + +### Ваша находка №1 +воспользовалась test-prof FPROF=flamegraph, нашла вложенность фабрик, которую можно убрать, начала с накладных +пересмотрела еще раз фабрики, нашла избыточную вложенность, которую можно убрать. Экономит не так много времени, зато уменьшается вложенность +было фабрик: Total: 20290 +стало: Total: 20093 +![before.png](before.png) +![after.png](after.png) + +### Ваша находка №2 +воспользовалась test-prof FPROF=1, нашла часто используемую фабрику с долгим времен создания, убрала лишние поля +фабрика компаний занимает много времени несмотря на свою простоту, посмотрим что внутри: +много sequence и ненужных полей, попробуем убрать и проверить эффект: + + name total top-level total time time per call top-level time +было: company 2075 1268 24.2947s 0.0117s 14.6411s +стало: company 2075 1268 18.5263s 0.0089s 10.9690s + +Проверка времени на текущий момент: Finished in 2 minutes 57 seconds (files took 3.99 seconds to load) + +### Ваша находка №3 +По отчету test-prof FPROF=1 FPROF_VARS=1 находим часто создаваемую фабрику, вынесем ее в фикстуру +Вынесем фикстуру админа в before(:suite) + +user 1629 1604 20.2135s 0.0124s 20.1218s +Total: 19893 +Total top-level: 12747 +Total time: 01:36.860 (out of 03:06.752) +Total uniq factories: 110 + +user 1035 1010 13.4071s 0.0130s 13.3243s +Total: 18057 +Total top-level: 12143 +Total time: 01:28.752 (out of 02:54.755) +Total uniq factories: 110 + +[TEST PROF INFO] AnyFixture usage stats: + +key build time hit count saved time +platform_admin 00:00.040 593 00:24.047 + +### Ваша находка №4 +Вынесем фикстуру forwarder_operator: + +[TEST PROF INFO] AnyFixture usage stats: + +key build time hit count saved time +forwarder_operator 00:00.009 126 00:01.237 + +[TEST PROF INFO] Factories usage + +Total: 17554 +Total top-level: 12020 +Total time: 01:27.353 (out of 02:54.839) +Total uniq factories: 110 + +user 910 885 11.5259s 0.0127s 11.4501s + +Finished in 2 minutes 51.9 seconds (files took 4.2 seconds to load) + +### Ваша находка №5 +Надо бы еще вынести в фикстуру одну авиакомпанию, которая создается почти во всех тестах и пользователя для авиакомпании, тогда кол-во фабрик сократится еще на 1267 + 235 = 1502 +Но так как АК достаточно плотно интегрирована во все тесты и большинство фабрик, то это задача не их простых, поэтому пока оставим как есть + +Даже с внедрением этих изменений не думаю, что удастся уложиться в 120 секунд без распараллеливания +Хотя там еще будет затронуто создание компаний, накладных и пр. Будет видно, только если вынести фикстуру + +### Ваша находка №N +Ну и распараллелим тесты, чтобы ускорить их выполнение: +gem 'parallel_tests' + +rake "parallel:spec[3]" +Took 68 seconds (1:08) +Took 67 seconds (1:07) +Took 63 seconds (1:03) + +вполне себе успех, уложились в бюджет)) + +## Результаты +В результате проделанной оптимизации наконец удалось уложиться в бюджет в 120 секунд на локальной машине