Skip to content
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

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

HW 7 #21

Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions case-study.md
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 тут не помог
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Воу, я бы попробовал на локальной машине поэксперементировать с кол-вом потоков.
Я в своих экспериментах например остановился на 4х
Когда увеличиваю - уже нет линейного прироста производительности, зато комп греется и теряет отзывчивость

На CI обычно можно добавить ядер, если это для вас ценно.


# Шаг 1
начал с RD_PROF и он мне показал 5 самых медленных тестов, один из которых гонялся ~1 минуту

использовал let_it_be в нужных местах и скорость прогона в целом упала до 1,4 минут

с let_it_be были проблемы, то он не хотел работать с тестами вложенные в несколько контекстов, то не хотел работать с timecop и прочее но главной проблемой было то что если запустить файл с тестами то они проходили но если запустить все тесты в проекте то часть тестов не проходила, поскольку он почему то для фабрик сбрасывал ассоциации которые были нужны в тесте, нативного решение не нашел и пришлось переписать тест так что бы ассоциации создавалась прямо внутри теста.
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • он породил нестабильные тесты

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да, ну там надо понимать, что в rspec многое завязано на вход и выход из example.
А let_it_be и before_all работает вне всех экзамплов, поэтому там например нельзя замокать что-то c помощью allow(smth).to receive

но в целом let_it_be очень крутая находка.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍



# Шаг 2
Потом пошел проверять фабрики и картинка была довольно печальной, переделывать фабрики не стал так как времени на это не хватало, но что уже примерно с этим можно сделать я уже знаю.

# Results
В целом время на выполнение тестов было равномерно размазано и дергать каждый по отдельности заняло бы много времени.

так же я попробовал запускать все инструменты из скринкастов что бы прощупать.

let_it_be помог решить проблему когда после паралелльного прогона в конце хвостиком шел очень медленный тест который тратил целую минуту на свое завершение.

Конечно в плане оптимизации тестов в проекте непаханое поле, но проект скоро сдавать и на это времени нет(((

в качестве челенджа в будущем попробую запускать тесты прям в оперативной памяти держа базу в ней
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 да, интересно попробовать


Результат оптимизации:

![Результат оптимизации](https://i.imgur.com/HIptMAH.png)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍