-
Notifications
You must be signed in to change notification settings - Fork 50
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
HW 7 #21
base: master
Are you sure you want to change the base?
HW 7 #21
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 и прочее но главной проблемой было то что если запустить файл с тестами то они проходили но если запустить все тесты в проекте то часть тестов не проходила, поскольку он почему то для фабрик сбрасывал ассоциации которые были нужны в тесте, нативного решение не нашел и пришлось переписать тест так что бы ассоциации создавалась прямо внутри теста. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Да, ну там надо понимать, что в rspec многое завязано на вход и выход из example. |
||
но в целом let_it_be очень крутая находка. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 👍 |
||
|
||
|
||
# Шаг 2 | ||
Потом пошел проверять фабрики и картинка была довольно печальной, переделывать фабрики не стал так как времени на это не хватало, но что уже примерно с этим можно сделать я уже знаю. | ||
|
||
# Results | ||
В целом время на выполнение тестов было равномерно размазано и дергать каждый по отдельности заняло бы много времени. | ||
|
||
так же я попробовал запускать все инструменты из скринкастов что бы прощупать. | ||
|
||
let_it_be помог решить проблему когда после паралелльного прогона в конце хвостиком шел очень медленный тест который тратил целую минуту на свое завершение. | ||
|
||
Конечно в плане оптимизации тестов в проекте непаханое поле, но проект скоро сдавать и на это времени нет((( | ||
|
||
в качестве челенджа в будущем попробую запускать тесты прям в оперативной памяти держа базу в ней | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 👍 да, интересно попробовать |
||
|
||
Результат оптимизации: | ||
|
||
 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 👍 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Воу, я бы попробовал на локальной машине поэксперементировать с кол-вом потоков.
Я в своих экспериментах например остановился на 4х
Когда увеличиваю - уже нет линейного прироста производительности, зато комп греется и теряет отзывчивость
На CI обычно можно добавить ядер, если это для вас ценно.