82 lines
1.8 KiB
Markdown
82 lines
1.8 KiB
Markdown
|
# Getting Started
|
||
|
|
||
|
Sanic Testing is the *official* testing client for Sanic. Its primary use is to power the tests of the Sanic project itself. However, it is also meant as an easy-to-use client for getting your API tests up and running quickly.
|
||
|
|
||
|
## Minimum requirements
|
||
|
|
||
|
- **Python**: 3.7+
|
||
|
- **Sanic**: 21.3+
|
||
|
|
||
|
Versions of Sanic older than 21.3 have this module integrated into Sanic itself as `sanic.testing`.
|
||
|
|
||
|
## Install
|
||
|
|
||
|
Sanic Testing can be installed from PyPI:
|
||
|
|
||
|
```
|
||
|
pip install sanic-testing
|
||
|
```
|
||
|
|
||
|
## Basic Usage
|
||
|
|
||
|
As long as the `sanic-testing` package is in the environment, there is nothing you need to do to start using it.
|
||
|
|
||
|
### Writing a sync test
|
||
|
|
||
|
In order to use the test client, you just need to access the property `test_client` on your application instance:
|
||
|
|
||
|
```python
|
||
|
import pytest
|
||
|
from sanic import Sanic, response
|
||
|
|
||
|
@pytest.fixture
|
||
|
def app():
|
||
|
sanic_app = Sanic("TestSanic")
|
||
|
|
||
|
@sanic_app.get("/")
|
||
|
def basic(request):
|
||
|
return response.text("foo")
|
||
|
|
||
|
return sanic_app
|
||
|
|
||
|
def test_basic_test_client(app):
|
||
|
request, response = app.test_client.get("/")
|
||
|
|
||
|
assert request.method.lower() == "get"
|
||
|
assert response.body == b"foo"
|
||
|
assert response.status == 200
|
||
|
```
|
||
|
|
||
|
### Writing an async test
|
||
|
|
||
|
In order to use the async test client in `pytest`, you should install the `pytest-asyncio` plugin.
|
||
|
|
||
|
```
|
||
|
pip install pytest-asyncio
|
||
|
```
|
||
|
|
||
|
You can then create an async test and use the ASGI client:
|
||
|
|
||
|
```python
|
||
|
import pytest
|
||
|
from sanic import Sanic, response
|
||
|
|
||
|
@pytest.fixture
|
||
|
def app():
|
||
|
sanic_app = Sanic(__name__)
|
||
|
|
||
|
@sanic_app.get("/")
|
||
|
def basic(request):
|
||
|
return response.text("foo")
|
||
|
|
||
|
return sanic_app
|
||
|
|
||
|
@pytest.mark.asyncio
|
||
|
async def test_basic_asgi_client(app):
|
||
|
request, response = await app.asgi_client.get("/")
|
||
|
|
||
|
assert request.method.lower() == "get"
|
||
|
assert response.body == b"foo"
|
||
|
assert response.status == 200
|
||
|
```
|