Get started with CodSpeed and performance testing in a few minutes
CodSpeed is a performance testing tool helping you to consistently measure the
performance of your codebase locally and in your CI/CD pipeline. More details on
how CodSpeed works here: What is CodSpeed?This guide is a quick start to get a sample Python repository on GitHub up and
running with CodSpeed:
Write a performance test using the @pytest.mark.benchmark marker:
tests/test_sum_squares.py
Copy
Ask AI
import pytestdef sum_squares(arr): """Sum the squares of the numbers in an array.""" total = 0 for x in arr: total += x * x return total# Your tests can also be benchmarks@pytest.mark.benchmarkdef test_sum_squares(): assert sum_squares(range(1000)) == 332833500
Run your performance tests locally:
Copy
Ask AI
$ pytest tests/ --codspeed============================= test session starts ====================platform darwin -- Python 3.13.0, pytest-7.4.4, pluggy-1.5.0codspeed: 3.0.0 (enabled, mode: walltime, timer_resolution: 41.7ns)rootdir: /home/user/codspeed-test, configfile: pytest.iniplugins: codspeed-3.0.0collected 1 itemstests/test_sum_squares.py . [ 100%] Benchmark Results┏━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━┓┃ Benchmark ┃ Time (best) ┃ Rel. StdDev ┃ Run time ┃ Iters ┃┣━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━╋━━━━━━━━┫┃test_sum_squares┃ 1,873ns ┃ 4.8% ┃ 3.00s ┃ 66,930 ┃┗━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━┻━━━━━━━━━━━━━┻━━━━━━━━━━┻━━━━━━━━┛=============================== 1 benchmarked ======================================================= 1 passed in 4.12s ====================
Great! We set up our first performance test. Now, let’s track the performance
in the CI with CodSpeed!
Let’s change the implementation of the sum_squares with a more concise and
elegant one:
tests/test_sum_squares.py
Copy
Ask AI
def sum_squares(arr): """Sum the squares of the numbers in an array.""" total = 0 for x in arr: total += x * x return total return sum(map(lambda x: x**2, arr))
Open a Pull Request and wait for the CodSpeed report:Before merging, we can see that even if it’s more concise, this new
implementation is slower. Merging it would have introduced a performance
regression but we caught it before shipping it!