Skip to content

Commit

Permalink
[PR #10114/94569554 backport][3.11] Add 304 benchmark for FileResponse (
Browse files Browse the repository at this point in the history
#10115)

Co-authored-by: J. Nick Koston <[email protected]>
  • Loading branch information
patchback[bot] and bdraco authored Dec 5, 2024
1 parent ae153ab commit 78473b9
Showing 1 changed file with 46 additions and 5 deletions.
51 changes: 46 additions & 5 deletions tests/test_benchmarks_web_fileresponse.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
import asyncio
import pathlib

from multidict import CIMultiDict
from pytest_codspeed import BenchmarkFixture

from aiohttp import web
from aiohttp import ClientResponse, web
from aiohttp.pytest_plugin import AiohttpClient


Expand All @@ -24,15 +25,15 @@ async def handler(request: web.Request) -> web.FileResponse:
app = web.Application()
app.router.add_route("GET", "/", handler)

async def run_file_resonse_benchmark() -> None:
async def run_file_response_benchmark() -> None:
client = await aiohttp_client(app)
for _ in range(response_count):
await client.get("/")
await client.close()

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


def test_simple_web_file_sendfile_fallback_response(
Expand All @@ -53,12 +54,52 @@ async def handler(request: web.Request) -> web.FileResponse:
app = web.Application()
app.router.add_route("GET", "/", handler)

async def run_file_resonse_benchmark() -> None:
async def run_file_response_benchmark() -> None:
client = await aiohttp_client(app)
for _ in range(response_count):
await client.get("/")
await client.close()

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


def test_simple_web_file_response_not_modified(
loop: asyncio.AbstractEventLoop,
aiohttp_client: AiohttpClient,
benchmark: BenchmarkFixture,
) -> None:
"""Benchmark web.FileResponse that return a 304."""
response_count = 100
filepath = pathlib.Path(__file__).parent / "sample.txt"

async def handler(request: web.Request) -> web.FileResponse:
return web.FileResponse(path=filepath)

app = web.Application()
app.router.add_route("GET", "/", handler)

async def make_last_modified_header() -> CIMultiDict[str]:
client = await aiohttp_client(app)
resp = await client.get("/")
last_modified = resp.headers["Last-Modified"]
headers = CIMultiDict({"If-Modified-Since": last_modified})
return headers

async def run_file_response_benchmark(
headers: CIMultiDict[str],
) -> ClientResponse:
client = await aiohttp_client(app)
for _ in range(response_count):
resp = await client.get("/", headers=headers)

await client.close()
return resp # type: ignore[possibly-undefined]

headers = loop.run_until_complete(make_last_modified_header())

@benchmark
def _run() -> None:
resp = loop.run_until_complete(run_file_response_benchmark(headers))
assert resp.status == 304

0 comments on commit 78473b9

Please sign in to comment.