diff --git a/case-study.md b/case-study.md new file mode 100644 index 0000000..f03f0a0 --- /dev/null +++ b/case-study.md @@ -0,0 +1,28 @@ +Решил оптимизировать мой текущий проект(~83% покрытия и 1905 тестов), тесты гонялись в один поток ~10 минут, но уже ранее до того как начал проходить курс я предложил использовать parallel tests и скорость прогона упала до ~2.7(и это с учетом правок сделанных после предедущих уроков в курсе, изначально было ~3 минуты) минут на моей локальной машине(12 потоков), к сожалению в ci используем только одно ядро так что parallel tests тут не помог + +# Шаг 1 +начал с RD_PROF и он мне показал 5 самых медленных тестов, один из которых гонялся ~1 минуту + +использовал let_it_be в нужных местах и скорость прогона в целом упала до 1,4 минут + +с let_it_be были проблемы, то он не хотел работать с тестами вложенные в несколько контекстов, то не хотел работать с timecop и прочее но главной проблемой было то что если запустить файл с тестами то они проходили но если запустить все тесты в проекте то часть тестов не проходила, поскольку он почему то для фабрик сбрасывал ассоциации которые были нужны в тесте, нативного решение не нашел и пришлось переписать тест так что бы ассоциации создавалась прямо внутри теста. +но в целом let_it_be очень крутая находка. + + +# Шаг 2 +Потом пошел проверять фабрики и картинка была довольно печальной, переделывать фабрики не стал так как времени на это не хватало, но что уже примерно с этим можно сделать я уже знаю. + +# Results +В целом время на выполнение тестов было равномерно размазано и дергать каждый по отдельности заняло бы много времени. + +так же я попробовал запускать все инструменты из скринкастов что бы прощупать. + +let_it_be помог решить проблему когда после паралелльного прогона в конце хвостиком шел очень медленный тест который тратил целую минуту на свое завершение. + +Конечно в плане оптимизации тестов в проекте непаханое поле, но проект скоро сдавать и на это времени нет((( + +в качестве челенджа в будущем попробую запускать тесты прям в оперативной памяти держа базу в ней + +Результат оптимизации: + +![Результат оптимизации](https://i.imgur.com/HIptMAH.png)