mirror of
https://github.com/GSA/notifications-api.git
synced 2026-09-11 18:38:14 -04:00
Merge pull request #1201 from alphagov/parallel-db-tests
run tests in multiple threads at once
This commit is contained in:
@@ -3,6 +3,7 @@ pycodestyle==2.3.1
|
|||||||
pytest==3.2.1
|
pytest==3.2.1
|
||||||
pytest-mock==1.6.2
|
pytest-mock==1.6.2
|
||||||
pytest-cov==2.5.1
|
pytest-cov==2.5.1
|
||||||
|
pytest-xdist==1.20.0
|
||||||
coveralls==1.2.0
|
coveralls==1.2.0
|
||||||
moto==1.1.1
|
moto==1.1.1
|
||||||
freezegun==0.3.9
|
freezegun==0.3.9
|
||||||
|
|||||||
@@ -30,5 +30,6 @@ fi
|
|||||||
pycodestyle .
|
pycodestyle .
|
||||||
display_result $? 1 "Code style check"
|
display_result $? 1 "Code style check"
|
||||||
|
|
||||||
py.test --cov=app --cov-report=term-missing tests/ --junitxml=test_results.xml
|
# run with four concurrent threads
|
||||||
|
py.test --cov=app --cov-report=term-missing tests/ --junitxml=test_results.xml -n 4
|
||||||
display_result $? 2 "Unit tests"
|
display_result $? 2 "Unit tests"
|
||||||
|
|||||||
+32
-4
@@ -1,12 +1,13 @@
|
|||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
import os
|
import os
|
||||||
|
|
||||||
import boto3
|
|
||||||
import pytest
|
|
||||||
from alembic.command import upgrade
|
from alembic.command import upgrade
|
||||||
from alembic.config import Config
|
from alembic.config import Config
|
||||||
from flask_migrate import Migrate, MigrateCommand
|
from flask_migrate import Migrate, MigrateCommand
|
||||||
from flask_script import Manager
|
from flask_script import Manager
|
||||||
|
import boto3
|
||||||
|
import pytest
|
||||||
|
import sqlalchemy
|
||||||
|
|
||||||
from app import create_app, db
|
from app import create_app, db
|
||||||
|
|
||||||
@@ -45,9 +46,36 @@ def client(notify_api):
|
|||||||
yield client
|
yield client
|
||||||
|
|
||||||
|
|
||||||
|
def create_test_db(database_uri):
|
||||||
|
# get the
|
||||||
|
db_uri_parts = database_uri.split('/')
|
||||||
|
postgres_db_uri = '/'.join(db_uri_parts[:-1] + ['postgres'])
|
||||||
|
|
||||||
|
postgres_db = sqlalchemy.create_engine(
|
||||||
|
postgres_db_uri,
|
||||||
|
echo=False,
|
||||||
|
isolation_level='AUTOCOMMIT',
|
||||||
|
client_encoding='utf8'
|
||||||
|
)
|
||||||
|
try:
|
||||||
|
result = postgres_db.execute(sqlalchemy.sql.text('CREATE DATABASE {}'.format(db_uri_parts[-1])))
|
||||||
|
result.close()
|
||||||
|
except sqlalchemy.exc.ProgrammingError:
|
||||||
|
# database "test_notification_api_master" already exists
|
||||||
|
pass
|
||||||
|
finally:
|
||||||
|
postgres_db.dispose()
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='session')
|
@pytest.fixture(scope='session')
|
||||||
def notify_db(notify_api):
|
def notify_db(notify_api, worker_id):
|
||||||
assert db.engine.url.database != 'notification_api', 'dont run tests against main db'
|
assert 'test_notification_api' in db.engine.url.database, 'dont run tests against main db'
|
||||||
|
|
||||||
|
# create a database for this worker thread -
|
||||||
|
from flask import current_app
|
||||||
|
current_app.config['SQLALCHEMY_DATABASE_URI'] += '_{}'.format(worker_id)
|
||||||
|
create_test_db(current_app.config['SQLALCHEMY_DATABASE_URI'])
|
||||||
|
|
||||||
Migrate(notify_api, db)
|
Migrate(notify_api, db)
|
||||||
Manager(db, MigrateCommand)
|
Manager(db, MigrateCommand)
|
||||||
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
|
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
|
||||||
|
|||||||
Reference in New Issue
Block a user