Keploy as a Flask testing framework
Keploy tests Flask applications by recording real requests through the running WSGI server and every SQLAlchemy query or outbound call they trigger, then replaying both as assertions. There is no test_client to construct and no app fixture to maintain.
keploy record -c "gunicorn -b 0.0.0.0:8000 app:app"What Keploy gives a Flask team
Any Flask app, unchanged
Keploy runs the app through flask run, gunicorn, or uWSGI. Blueprints, app factories, and extension initialisation all execute because capture happens at the socket rather than inside Werkzeug.
- Flask 2.0 and above
- flask run, gunicorn, or uWSGI
- Blueprints and app factories
- Extensions initialise for real
Why Flask integration tests slow teams down
The friction is rarely the assertions. It is everything around them — spinning up dependencies, keeping mocks honest, and repairing tests after every refactor.
Testing Flask: by hand, with pytest + test_client, or with Keploy
test_client dispatches into a testing-mode app. Keploy records the running gunicorn server, so the configuration, extensions, and middleware under test are the ones you actually deploy.
Select any row for the full comparison, with code.
What you write for Flask vs what Keploy records
All three produce the same assertion. Only the third still passes after the next refactor without anyone editing it.
Two monkeypatches against module paths, and no request context. Routing, before_request hooks, and error handlers are all absent.
Correct and idiomatic — and it runs against a TESTING-mode app with a different database URI than the one you deploy.
Recorded under the configuration you deploy, so a setting that only differs in TESTING mode cannot hide a bug from this case.
Times are estimates for authoring one endpoint’s coverage from scratch, not measurements.
Flask testing tools, compared
The options a team on Python actually reaches for, and where each one genuinely wins. Select a row for the full comparison.
Assessments reflect each tool’s documented behaviour, not benchmark measurements.
Record your Flask app once, replay it forever
Keploy sits below your Flask process at the network layer. It watches the calls your app already makes, then serves them back on replay so tests run with no dependencies attached.
Keploy records a GET call to /api/v1/orders/{id} on a Flask service and captures the dependency calls it makes.
What Keploy mocks for Flask, with zero config
5 of the 6 dependencies a typical Flask service talks to are stubbed from the recording itself — no mock classes, no fixture files, no containers in CI.
- Auto-mocked
PostgreSQLView page
Postgres protocol under psycopg and SQLAlchemy
- Auto-mocked
MySQLView page
MySQL protocol under PyMySQL
- Auto-mocked
RedisView page
RESP under redis-py and Flask-Caching
- Auto-mocked
MongoDBView page
Wire protocol under PyMongo
- Outbound HTTPAuto-mocked
Outbound HTTP
Any requests, httpx, or urllib3 call
- Partial
Celery
Task enqueue over the broker protocol
Your first Flask test suite in under five minutes
Every command below runs against your existing Flask service. Nothing in your source tree changes.
1Install the Keploy CLI
A single binary. It needs a Linux kernel with eBPF support, or Docker on macOS and Windows — and it adds nothing to your project's dependencies.
curl -sSL https://keploy.io/install.sh | bash2Record your service
Pass the command you already use to start the app. Keploy runs it and watches every socket it opens.
keploy record -c "gunicorn -b 0.0.0.0:8000 app:app"3Exercise the paths you care about
Drive the running server. Every request becomes a test case with its SQLAlchemy queries and outbound calls captured alongside.
curl -X POST localhost:8000/orders/ord_1/confirm -H 'Content-Type: application/json' -d '{"payment_token":"tok_123"}'4Replay in CI
Replay serves the recorded dependency responses, so the job needs no service containers and no Docker daemon.
keploy test -c "gunicorn -b 0.0.0.0:8000 app:app" --delay 8
Ready to try it on your own Flask service?
Works with the rest of your Flask stack
Keploy records at the network layer, so framework and driver choices inside your Flask app do not change how it captures traffic.
Python
The language page covers driver-level coverage in depth.
SQLAlchemy
Queries record as the SQL they emit, with real rows.
PostgreSQL
psycopg traffic records at the protocol layer.
Redis
Flask-Caching exchanges record in order.
Celery
Task enqueues appear as broker traffic on the recording.
Gunicorn
Record through gunicorn to exercise the production worker path.
Testing the rest of your stack
- Languages
Keploy as a Python testing framework
Turn the requests your Python service already handles into a pytest-grade regression suite, with every dependency mocked from the recording.
Read the guide - Databases
Keploy as a PostgreSQL testing framework
Record the Postgres frontend/backend protocol once and replay real result sets in tests — no container, no pg-mem, no schema to rebuild.
Read the guide - Caches & Stores
Keploy as a Redis testing framework
Record RESP traffic once and replay real cache hits, misses, TTLs, and pipeline responses without a Redis server in CI.
Read the guide - Databases
Keploy as a MongoDB testing framework
Mock MongoDB at the wire protocol — real documents, real BSON types, real aggregation results — without a mongod binary in CI.
Read the guide - Frameworks
Keploy as a Django testing framework
No test database to create and destroy, no fixtures to load — Keploy records your Django app serving real requests and replays the ORM queries it made.
Read the guide - Frameworks
Keploy as a FastAPI testing framework
Test FastAPI routes through the real ASGI server instead of TestClient, with async database calls mocked from the recording.
Read the guide
Join our GlobalCommunity
Connect with developers worldwide. Follow updates, ask questions, share feedback, and ship faster with other Keploy builders.
“Best report of integration and API tests I've seen — which we don't get from RestAssured.”
G2“Future of microservices testing. I don't write tests now!”
G2 · 5/5“An amazing product that simplifies the automation.”
Gartner · 4.0