From 1a353d90ebf32285f2f7e53807bfe095fcfe8099 Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Tue, 17 Sep 2019 14:49:42 +0100 Subject: [PATCH] Create the app once per run, not once per test Turns out our tests spent a lot of time recreating the app for each test case, which is quite intense. This commit makes the fixture sessions level, so the app is only created once per test session, not once per test function. 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 seconds[1]. 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 1. With a 2.2GHz quad-core Intel Core i7 processor on a 2015 MacBook Pro --- scripts/run_tests.sh | 2 +- tests/conftest.py | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/scripts/run_tests.sh b/scripts/run_tests.sh index f1d1c58a2a..47994032ea 100755 --- a/scripts/run_tests.sh +++ b/scripts/run_tests.sh @@ -37,5 +37,5 @@ npm test display_result $? 3 "Front end code style check" ## Code coverage -py.test -n4 --maxfail=10 --cov=app --cov-report=term-missing tests/ --junitxml=test_results.xml --strict -p no:warnings +py.test -n auto --maxfail=10 --cov=app --cov-report=term-missing tests/ --junitxml=test_results.xml --strict -p no:warnings display_result $? 4 "Code coverage" diff --git a/tests/conftest.py b/tests/conftest.py index dc89436b77..30f84054aa 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -36,7 +36,7 @@ class ElementNotFound(Exception): pass -@pytest.fixture +@pytest.fixture(scope='session') def app_(request): app = Flask('app') create_app(app) @@ -47,8 +47,6 @@ def app_(request): app.test_client_class = TestClient yield app - ctx.pop() - @pytest.fixture(scope='function') def service_one(api_user_active):