Create the app once per run, not once per test #3125
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Turns out our tests spent a lot of time recreating the app for each test case, which is quite intense.
This commit moves the app-creating code outside the fixture, so the fixture re-uses the same app for every test.
This cuts down the time taken to run the test suite to about 50 seconds.
It also makes the tests more parallelizable. Before this change going from 4 to 8 processes made the tests slower. Now it cuts them down from about 50 seconds to about 35 seconds1. So this commit also lets Pytest choose the best number of processes to run, since on my machine it chooses 8, which is the fastest.
Overall this means the tests take about 15% of the time they used to. Assuming each person on the teams runs the tests on average once a day, this will save 15 hours per person, per year.
Before
After