sanic/tests/benchmark/test_route_resolution_benchmark.py
2023-10-25 02:28:52 +01:00

82 lines
2.2 KiB
Python

from random import choice, seed
from pytest import mark
import sanic.router
from sanic.request import Request
seed("Pack my box with five dozen liquor jugs.")
# Disable Caching for testing purpose
sanic.router.ROUTER_CACHE_SIZE = 0
class TestSanicRouteResolution:
@mark.asyncio
async def test_resolve_route_no_arg_string_path(
self, sanic_router, route_generator, benchmark
):
simple_routes = route_generator.generate_random_direct_route(
max_route_depth=4
)
router, simple_routes = sanic_router(route_details=simple_routes)
route_to_call = choice(simple_routes)
request = Request(
f"/{route_to_call[-1]}".encode(),
{"host": "localhost"},
"v1",
route_to_call[0],
None,
None,
)
result = benchmark.pedantic(
router.get,
(
request.path,
request.method,
request.headers.get("host"),
),
iterations=1000,
rounds=1000,
)
assert await result[1](None) == 1
@mark.asyncio
async def test_resolve_route_with_typed_args(
self, sanic_router, route_generator, benchmark
):
typed_routes = route_generator.add_typed_parameters(
route_generator.generate_random_direct_route(max_route_depth=4),
max_route_depth=8,
)
router, typed_routes = sanic_router(route_details=typed_routes)
route_to_call = choice(typed_routes)
url = route_generator.generate_url_for_template(
template=route_to_call[-1]
)
print(f"{route_to_call[-1]} -> {url}")
request = Request(
f"/{url}".encode(),
{"host": "localhost"},
"v1",
route_to_call[0],
None,
None,
)
result = benchmark.pedantic(
router.get,
(
request.path,
request.method,
request.headers.get("host"),
),
iterations=1000,
rounds=1000,
)
assert await result[1](None) == 1