Pytest plugin to create CodSpeed benchmarks
Project description
Documentation: https://codspeed.io/docs/reference/pytest-codspeed
Installation
pip install pytest-codspeed
Usage
Creating benchmarks
In a nutshell, pytest-codspeed
offers two approaches to create performance benchmarks that integrate seamlessly with your existing test suite.
Use @pytest.mark.benchmark
to measure entire test functions automatically:
import pytest
from statistics import median
@pytest.mark.benchmark
def test_median_performance():
input = [1, 2, 3, 4, 5]
output = sum(i**2 for i in input)
assert output == 55
Since this measure the entire function, you might want to use the benchmark
fixture for precise control over what code gets measured:
def test_mean_performance(benchmark):
data = [1, 2, 3, 4, 5]
# Only the function call is measured
result = benchmark(lambda: sum(i**2 for i in data))
assert result == 55
Check out the full documentation for more details.
Testing the benchmarks locally
If you want to run the benchmarks tests locally, you can use the --codspeed
pytest flag:
$ pytest tests/ --codspeed
============================= test session starts ====================
platform darwin -- Python 3.13.0, pytest-7.4.4, pluggy-1.5.0
codspeed: 3.0.0 (enabled, mode: walltime, timer_resolution: 41.7ns)
rootdir: /home/user/codspeed-test, configfile: pytest.ini
plugins: codspeed-3.0.0
collected 1 items
tests/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 ====================
Running the benchmarks in your CI
You can use the CodSpeedHQ/action to run the benchmarks in Github Actions and upload the results to CodSpeed.
Here is an example of a GitHub Actions workflow that runs the benchmarks and reports the results to CodSpeed on every push to the main
branch and every pull request:
name: CodSpeed
on:
push:
branches:
- "main" # or "master"
pull_request:
# `workflow_dispatch` allows CodSpeed to trigger backtest
# performance analysis in order to generate initial data.
workflow_dispatch:
jobs:
benchmarks:
name: Run benchmarks
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.13"
- name: Install dependencies
run: pip install -r requirements.txt
- name: Run benchmarks
uses: CodSpeedHQ/action@v3
with:
token: ${{ secrets.CODSPEED_TOKEN }}
run: pytest tests/ --codspeed
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
File details
Details for the file pytest_codspeed-4.0.0.tar.gz
.
File metadata
- Download URL: pytest_codspeed-4.0.0.tar.gz
- Upload date:
- Size: 107.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.5.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
0e9af08ca93ad897b376771db92693a81aa8990eecc2a778740412e00a6f6eaf
|
|
MD5 |
0efbc7d3920ab6e47a531a02c5b8fcd4
|
|
BLAKE2b-256 |
64134989d50a3d6de9fb91de23f3b6ffce7c704f23516d308138242325a7c857
|
File details
Details for the file pytest_codspeed-4.0.0-py3-none-any.whl
.
File metadata
- Download URL: pytest_codspeed-4.0.0-py3-none-any.whl
- Upload date:
- Size: 107.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.5.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
c5debd4b127dc1c507397a8304776f52cabbfa53aad6f51eae329a5489df1e06
|
|
MD5 |
c05cb7a3d5e8c57c09df0a6919cff7b1
|
|
BLAKE2b-256 |
5fe4e3ddab5fd04febf6189d71bfa4ba2d7c05adaa7d692a6d6b1e8ed68de12d
|
File details
Details for the file pytest_codspeed-4.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
.
File metadata
- Download URL: pytest_codspeed-4.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 221.2 kB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.5.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
79e9c40852fa7fc76776db4f1d290eceaeee2d6c5d2dc95a66c7cc690d83889e
|
|
MD5 |
15644ea63d3d499a0e977113e9d7564c
|
|
BLAKE2b-256 |
17fc5fee0bcdada8ecb5a89088cd84af7e094652fc94bf414a96b49a874fd8be
|
File details
Details for the file pytest_codspeed-4.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
.
File metadata
- Download URL: pytest_codspeed-4.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 230.6 kB
- Tags: CPython 3.13, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.5.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
90894c93c9e23f12487b7fdf16c28da8f6275d565056772072beb41a72a54cf9
|
|
MD5 |
6858a49b3468d147a03a4d9d30367bb4
|
|
BLAKE2b-256 |
55e20a2e703301f7560a456e343e1b31d01a2ddee96807db5ded65951bfa5b7a
|
File details
Details for the file pytest_codspeed-4.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
.
File metadata
- Download URL: pytest_codspeed-4.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 221.2 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.5.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
01d29d4538c2d111c0034f71811bcce577304506d22af4dd65df87fadf3ab495
|
|
MD5 |
2d0b7093842d322bbbe3a2b3e0a98850
|
|
BLAKE2b-256 |
16fe22caa7cfb6717d21ba14ffd3c0b013b2143a4c32225715f401489f6c32bc
|
File details
Details for the file pytest_codspeed-4.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
.
File metadata
- Download URL: pytest_codspeed-4.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 230.6 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.5.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
7f3def79d4072867d038a33e7f35bc7fb1a2a75236a624b3a690c5540017cb38
|
|
MD5 |
e7620c63328c8411f7596b4c184cae81
|
|
BLAKE2b-256 |
11e4a9591949783cdea60d5f2a215d89c3e17af7b068f2613e38b1d46cb5b8e9
|
File details
Details for the file pytest_codspeed-4.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
.
File metadata
- Download URL: pytest_codspeed-4.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 221.1 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.5.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
9ebdac1a4d6138e1ca4f5391e7e3cafad6e3aa6d5660d1b243871b691bc1396c
|
|
MD5 |
f22cf740edcce1d4b04fa530f86716b0
|
|
BLAKE2b-256 |
47a72b3ac30e1e2b326abf370c8a6b4ed48a43d3a5491def7aaf67f7fbab5d6f
|
File details
Details for the file pytest_codspeed-4.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
.
File metadata
- Download URL: pytest_codspeed-4.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 230.4 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.5.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
06b324acdfe2076a0c97a9d31e8645f820822d6f0e766c73426767ff887a9381
|
|
MD5 |
6b1d77bf2a8df95e5ff538c8833ac796
|
|
BLAKE2b-256 |
7fe716b0f347fd910f2cc50e858094c17744d640e5ae71926c2c0ad762ecb7ec
|
File details
Details for the file pytest_codspeed-4.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
.
File metadata
- Download URL: pytest_codspeed-4.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 221.1 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.5.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
1e5076bb5119d4f8248822b5cd6b768f70a18c7e1a7fbcd96a99cd4a6430096e
|
|
MD5 |
006c65752c1f28a52c18e247c8fe20c4
|
|
BLAKE2b-256 |
e600c21b0e2863c967c8d4dfa5bebdc5f0f2a9d6ab1cc7a39e111faf70a5880d
|
File details
Details for the file pytest_codspeed-4.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
.
File metadata
- Download URL: pytest_codspeed-4.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 230.4 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.5.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
2517731b20a6aa9fe61d04822b802e1637ee67fd865189485b384a9d5897117f
|
|
MD5 |
4f0cfb2463d7b89093ca815392effd18
|
|
BLAKE2b-256 |
bac9c7116338e04d1c6bb43277c5f938fa7e5eb1df54b4cc0c298a428995296b
|
File details
Details for the file pytest_codspeed-4.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
.
File metadata
- Download URL: pytest_codspeed-4.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 221.1 kB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.5.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
e1271cd28e895132b20d12875554a544ee041f7acfb8112af8a5c3cb201f2fc8
|
|
MD5 |
2fd6ed7dc44aaad18b2b78a9c2e87946
|
|
BLAKE2b-256 |
505f14223d692f34b5523a7b8ab977ab04dd4b7c1313d2a91c5f4001db5161a6
|
File details
Details for the file pytest_codspeed-4.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
.
File metadata
- Download URL: pytest_codspeed-4.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 230.4 kB
- Tags: CPython 3.9, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.5.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
7330b6eadd6a729d4dba95d26496ee1c6f1649d552f515ef537b14a43908eb67
|
|
MD5 |
5798cf6009f9a97243477eabfe07816a
|
|
BLAKE2b-256 |
96af4b04220fb0124824c950f974456d5f64446626a5795217e85de4b10a0c14
|