ClearcodeHQ / pytest-redis

Redis fixtures and fixture factories for Pytest.This is a pytest plugin, that enables you to test your code that relies on a running Redis database. It allows you to specify additional fixtures for Redis process and client.
https://pypi.python.org/pypi/pytest-redis/
GNU Lesser General Public License v3.0
100 stars 16 forks source link

Session-scoped redisdb #590

Open Seluj78 opened 9 months ago

Seluj78 commented 9 months ago

I would like to be able to ask pytest-redis to setup a redis instance once per session so I can easily distribute it why pytest-xdist.

Why ? Well it works perfectly right now, but it's hella slow

@pytest.fixture(scope="function")
def app(redisdb):
    application = create_app(redis_instance=redisdb)
    application.testing = True
    return application

@pytest.fixture(scope="function")
def redis_client(app) -> StrictRedis:
    return app.redis

@pytest.fixture(scope="function")
def client(app):
    with app.test_client() as testing_client:
        with app.app_context():
            yield testing_client

Since redisdb is a function-scoped fixture, I have to scope all my other fixtures using app or client as function which really slows down my tests.

I don't want my xdist workers to share anything, on the contrary. I just want the same redis instance for the whole session, for the sake of efficiency and speed (takes about 8 minutes to run 900 tests on github actions with 2 workers, and 2 minutes on 12 workers on my laptop)

shaeselix commented 8 months ago

+1. If there are any good workarounds to get "module" or "session" scopes, please let us know