Skip to content

Commit

Permalink
Add url dispatcher benchmark for resolving root route when exists man…
Browse files Browse the repository at this point in the history
…y plain routes in the subtree
  • Loading branch information
asvetlov committed Nov 18, 2024
1 parent 509fddf commit c5743e9
Showing 1 changed file with 38 additions and 0 deletions.
38 changes: 38 additions & 0 deletions tests/test_benchmarks_web_urldispatcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,44 @@ def _run() -> None:
loop.run_until_complete(run_url_dispatcher_benchmark())


def test_resolve_root_route_with_many_fixed_routes(
loop: asyncio.AbstractEventLoop,
benchmark: BenchmarkFixture,
) -> None:
"""Resolve top level PlainResources route 100 times."""
resolve_count = 100

async def handler(request: web.Request) -> NoReturn:
assert False

app = web.Application()
app.router.add_route("GET", "/", handler)
for count in range(250):
app.router.add_route("GET", f"/api/server/dispatch/{count}/update", handler)
app.router.add_route("GET", f"/api/server/dispatch/{count}", handler)
app.router.add_route("GET", "/api/server/dispatch", handler)
app.router.add_route("GET", "/api/server", handler)
app.router.add_route("GET", "/api", handler)
app.freeze()
router = app.router
request = _mock_request(method="GET", path="/")

async def run_url_dispatcher_benchmark() -> Optional[web.UrlMappingMatchInfo]:
ret = None
for _ in range(resolve_count):
ret = await router.resolve(request)

return ret

ret = loop.run_until_complete(run_url_dispatcher_benchmark())
assert ret is not None
assert ret.get_info()["path"] == "/", ret.get_info()

@benchmark
def _run() -> None:
loop.run_until_complete(run_url_dispatcher_benchmark())


def test_resolve_static_root_route(
loop: asyncio.AbstractEventLoop,
benchmark: BenchmarkFixture,
Expand Down

0 comments on commit c5743e9

Please sign in to comment.