From 89339473810d08d71ef78b1ab705a734ec8b6d71 Mon Sep 17 00:00:00 2001 From: Arthur Pastel Date: Wed, 19 Feb 2025 17:46:09 +0000 Subject: [PATCH 1/2] docs: add an example on measuring import times --- pyproject.toml | 2 +- tests/benchmarks/test_bench_imports/__init__.py | 0 tests/benchmarks/test_bench_imports/module_a.py | 3 +++ tests/benchmarks/test_bench_imports/module_b.py | 5 +++++ .../test_bench_imports/test_bench_imports.py | 14 ++++++++++++++ 5 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 tests/benchmarks/test_bench_imports/__init__.py create mode 100644 tests/benchmarks/test_bench_imports/module_a.py create mode 100644 tests/benchmarks/test_bench_imports/module_b.py create mode 100644 tests/benchmarks/test_bench_imports/test_bench_imports.py diff --git a/pyproject.toml b/pyproject.toml index 601bff5..49fe44b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -118,7 +118,7 @@ float_to_top = true [tool.pytest.ini_options] addopts = "--ignore=tests/benchmarks --ignore=tests/examples --ignore=tests/benchmarks/TheAlgorithms" filterwarnings = ["ignore::DeprecationWarning:pytest_benchmark.utils.*:"] -pythonpath = ["tests/benchmarks/TheAlgorithms", "./scripts"] +pythonpath = ["tests/benchmarks/TheAlgorithms", "./scripts", "tests/benchmarks"] [tool.coverage.run] branch = true diff --git a/tests/benchmarks/test_bench_imports/__init__.py b/tests/benchmarks/test_bench_imports/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/benchmarks/test_bench_imports/module_a.py b/tests/benchmarks/test_bench_imports/module_a.py new file mode 100644 index 0000000..08b7470 --- /dev/null +++ b/tests/benchmarks/test_bench_imports/module_a.py @@ -0,0 +1,3 @@ +# Fake import initialization payload +for i in range(10000): + pass diff --git a/tests/benchmarks/test_bench_imports/module_b.py b/tests/benchmarks/test_bench_imports/module_b.py new file mode 100644 index 0000000..29ab6b3 --- /dev/null +++ b/tests/benchmarks/test_bench_imports/module_b.py @@ -0,0 +1,5 @@ +# Depends on module_a.py +from . import module_a +# Fake import initialization payload +for i in range(10000): + pass \ No newline at end of file diff --git a/tests/benchmarks/test_bench_imports/test_bench_imports.py b/tests/benchmarks/test_bench_imports/test_bench_imports.py new file mode 100644 index 0000000..f9a4676 --- /dev/null +++ b/tests/benchmarks/test_bench_imports/test_bench_imports.py @@ -0,0 +1,14 @@ +import importlib +import sys +import time +import pytest +from unittest import mock + +@pytest.mark.parametrize("mod_name", [".module_a", ".module_b"]) +def test_bench_module_import(benchmark, mod_name): + @benchmark + def _(): + with mock.patch("sys.modules", {}): + importlib.import_module(mod_name, "test_bench_imports") + + From 651d3943669f669c75edf93b698afbfb2a4c5dc6 Mon Sep 17 00:00:00 2001 From: Arthur Pastel Date: Thu, 20 Feb 2025 13:40:54 +0000 Subject: [PATCH 2/2] docs: add a unittest benchmark example --- tests/benchmarks/test_bench_unittest.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 tests/benchmarks/test_bench_unittest.py diff --git a/tests/benchmarks/test_bench_unittest.py b/tests/benchmarks/test_bench_unittest.py new file mode 100644 index 0000000..6c26191 --- /dev/null +++ b/tests/benchmarks/test_bench_unittest.py @@ -0,0 +1,20 @@ +import unittest + +import pytest + + +class MyBenchmark(unittest.TestCase): + def setUp(self): + # Initialize the benchmark environment + self.input = ( + "Lorem Ipsum is simply dummy text of the printing and typesetting industry." + * 100 + ) + + @pytest.mark.benchmark + def test_bench_hash(self): + hash(self.input) + + def tearDown(self): + # Clean up the benchmark environment + pass