From e6f98b104d2140676ad9b6b2e97deab6b36e13f6 Mon Sep 17 00:00:00 2001 From: Marcelo Trylesinski Date: Sun, 9 Aug 2026 14:24:15 +0200 Subject: [PATCH 1/2] Create a fresh parser per benchmark iteration --- tests/test_benchmarks.py | 45 +++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/tests/test_benchmarks.py b/tests/test_benchmarks.py index e38cb73..2d93ca5 100644 --- a/tests/test_benchmarks.py +++ b/tests/test_benchmarks.py @@ -1,7 +1,6 @@ from __future__ import annotations import string -from collections.abc import Iterator from typing import TYPE_CHECKING import pytest @@ -81,37 +80,41 @@ def split(data: bytes, chunk_size: int = CHUNK_SIZE) -> list[bytes]: URLENCODED_LARGE = b"&".join(f"field{i}={'v' * 64}".encode() for i in range(100)) -@pytest.fixture -def multipart_parser() -> Iterator[MultipartParser]: - parser = MultipartParser(BOUNDARY, MULTIPART_CALLBACKS) - yield parser - parser.finalize() +def make_multipart_parser() -> MultipartParser: + return MultipartParser(BOUNDARY, MULTIPART_CALLBACKS) -@pytest.fixture -def querystring_parser() -> Iterator[QuerystringParser]: - parser = QuerystringParser(QUERYSTRING_CALLBACKS) - yield parser - parser.finalize() +def make_querystring_parser() -> QuerystringParser: + return QuerystringParser(QUERYSTRING_CALLBACKS) -def test_multipart_simple_form(multipart_parser: MultipartParser) -> None: - multipart_parser.write(SIMPLE_FORM) +def test_multipart_simple_form() -> None: + parser = make_multipart_parser() + parser.write(SIMPLE_FORM) + parser.finalize() -def test_multipart_large_form(multipart_parser: MultipartParser) -> None: - multipart_parser.write(LARGE_FORM) +def test_multipart_large_form() -> None: + parser = make_multipart_parser() + parser.write(LARGE_FORM) + parser.finalize() -def test_multipart_file_upload(multipart_parser: MultipartParser) -> None: +def test_multipart_file_upload() -> None: + parser = make_multipart_parser() for chunk in FILE_UPLOAD_CHUNKS: - multipart_parser.write(chunk) + parser.write(chunk) + parser.finalize() -def test_multipart_worstcase_boundary_chars(multipart_parser: MultipartParser) -> None: +def test_multipart_worstcase_boundary_chars() -> None: + parser = make_multipart_parser() for chunk in WORSTCASE_BCHAR_CHUNKS: - multipart_parser.write(chunk) + parser.write(chunk) + parser.finalize() -def test_querystring_large_form(querystring_parser: QuerystringParser) -> None: - querystring_parser.write(URLENCODED_LARGE) +def test_querystring_large_form() -> None: + parser = make_querystring_parser() + parser.write(URLENCODED_LARGE) + parser.finalize() From c3186eb2a5a5083283ba1b5e72ceee99a4517026 Mon Sep 17 00:00:00 2001 From: Marcelo Trylesinski Date: Sun, 9 Aug 2026 14:26:42 +0200 Subject: [PATCH 2/2] Start new benchmark series for complete parses --- tests/test_benchmarks.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/test_benchmarks.py b/tests/test_benchmarks.py index 2d93ca5..2062c26 100644 --- a/tests/test_benchmarks.py +++ b/tests/test_benchmarks.py @@ -88,33 +88,33 @@ def make_querystring_parser() -> QuerystringParser: return QuerystringParser(QUERYSTRING_CALLBACKS) -def test_multipart_simple_form() -> None: +def test_parse_multipart_simple_form() -> None: parser = make_multipart_parser() parser.write(SIMPLE_FORM) parser.finalize() -def test_multipart_large_form() -> None: +def test_parse_multipart_large_form() -> None: parser = make_multipart_parser() parser.write(LARGE_FORM) parser.finalize() -def test_multipart_file_upload() -> None: +def test_parse_multipart_file_upload() -> None: parser = make_multipart_parser() for chunk in FILE_UPLOAD_CHUNKS: parser.write(chunk) parser.finalize() -def test_multipart_worstcase_boundary_chars() -> None: +def test_parse_multipart_worstcase_boundary_chars() -> None: parser = make_multipart_parser() for chunk in WORSTCASE_BCHAR_CHUNKS: parser.write(chunk) parser.finalize() -def test_querystring_large_form() -> None: +def test_parse_querystring_large_form() -> None: parser = make_querystring_parser() parser.write(URLENCODED_LARGE) parser.finalize()