Skip to content

Commit 6e44d36

Browse files
committed
adding benchmarking, currently only for http funcs
1 parent 5423e0a commit 6e44d36

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

tests/test_benchmark_http.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
from collections import OrderedDict
2+
3+
import pytest
4+
5+
from w3lib.http import headers_dict_to_raw, headers_raw_to_dict
6+
7+
pytestmark = pytest.mark.benchmark
8+
9+
10+
def _header_case_long_headers():
11+
dct = OrderedDict(
12+
[
13+
(b"X-Custom-Header", [b"a" * 1_000]),
14+
(b"X-Custom-Header-2", [b"b" * 1_000]),
15+
]
16+
)
17+
raw = (
18+
b"X-Custom-Header: " + b"a" * 1_000 + b"\r\n"
19+
b"X-Custom-Header-2: " + b"b" * 1_000
20+
)
21+
return "long_headers", dct, raw
22+
23+
24+
def _header_case_many_unique_headers():
25+
dct = OrderedDict(
26+
[(f"Header-{i}".encode(), [f"value-{i}".encode()]) for i in range(100)]
27+
)
28+
raw = b"\r\n".join([f"Header-{i}: value-{i}".encode() for i in range(100)])
29+
return "many_unique_headers", dct, raw
30+
31+
32+
def _header_case_many_repeated_headers():
33+
values = [f"id={i}".encode() for i in range(100)]
34+
dct = OrderedDict([(b"Set-Cookie", values)])
35+
raw = b"\r\n".join([b"Set-Cookie: " + val for val in values])
36+
return "many_repeated_headers", dct, raw
37+
38+
39+
header_cases = [
40+
_header_case_long_headers(),
41+
_header_case_many_unique_headers(),
42+
_header_case_many_repeated_headers(),
43+
]
44+
45+
46+
@pytest.mark.parametrize(
47+
("_id", "dct", "raw"),
48+
header_cases,
49+
ids=[case[0] for case in header_cases],
50+
)
51+
class TestBenchmarkHttp:
52+
def test_bench_dict_to_raw(self, benchmark, _id, dct, raw): # noqa: PT019
53+
result = benchmark(lambda: headers_dict_to_raw(dct))
54+
assert result == raw
55+
56+
def test_bench_raw_to_dict(self, benchmark, _id, dct, raw): # noqa: PT019
57+
result = benchmark(lambda: headers_raw_to_dict(raw))
58+
assert result == dct

0 commit comments

Comments
 (0)