Speed up unit tests for projects that use extensions.
Review Request #5905 — Created May 30, 2014 and submitted
Projects supporting extensions that used the test HTTP client would end
up reloading all extensions, creatingRegisteredExtension
entries, every
time a request was performed. This added up quite a bit over time.This change does two things to address this problem.
1. The
RegisteredExtension
creation code has been improved. Instead of
usingget_or_create
, we attempt a create and fall back on a get. This
chops the number of queries in half, since we no longer are assuming
there's an entry in the database already (which is a bad assumption,
since earlier in the function, we checked and didn't see any).While here, I also fixed a bug where the wrong value was being
used for the stored extension name, due to a scoping issue.2.
ExtensionsMiddleware
no longer performs expiration checks if
settings.RUNNING_TEST
is True. It's up to the projects to set this
for the test run, though.
Ran the Review Board test suite. It went down from ~147.78 seconds to
~125.45 seconds -- a ~22 second savings. That's with 9 extensions
installed (not enabled) on the system.