Wie man Python pytest-benchmark-Benchmarks in CI verfolgt

Everett Pompeii
Now, da Sie So vergleichen Sie Python-Code mit pytest-benchmark, sehen wir uns an, wie man diese Benchmarks im CI verfolgt. Kontinuierliches Benchmarking ist die Praxis, Benchmarks bei jedem Änderungssatz durchzuführen, um sicherzustellen, dass die Änderungen keine Leistungseinbußen verursachen. Der einfachste Weg, kontinuierliches Benchmarking mit pytest-benchmark-Benchmarks umzusetzen, ist die Verwendung von Bencher.
Was ist Bencher?
Bencher ist eine Suite von kontinuierlichen Benchmarking-Tools. Hatten Sie jemals eine Performance Regression, die Ihre Nutzer beeinflusste? Bencher hätte das verhindern können. Bencher ermöglicht es Ihnen, Leistungsregressionen vorher zu erkennen und zu verhindern, bevor sie in die Produktion gelangen.
- Ausführen: Führen Sie Ihre Benchmarks lokal oder in CI mit Ihren bevorzugten Benchmarking-Tools aus. Das
bencher
CLI umfasst einfach Ihr vorhandenes Benchmark-Harness und speichert die Ergebnisse. - Verfolgen: Verfolgen Sie die Ergebnisse Ihrer Benchmarks im Laufe der Zeit. Überwachen, abfragen und grafisch darstellen der Ergebnisse mit der Bencher Web Konsole auf Basis des Quellzweigs, Testbetts und Maßnahme.
- Auffangen: Fangen Sie Leistungsregressionen in CI ab. Bencher verwendet modernste, anpassbare Analysen, um Leistungsregressionen zu erkennen, bevor sie in die Produktion gelangen.
Aus denselben Gründen, warum Unit Tests in CI laufen, um Feature Regressionen zu verhindern, sollten Benchmarks in CI mit Bencher ausgeführt werden, um Leistungsregressionen zu verhindern. Performance-Bugs sind Fehler!
Schritte für Bencher Cloud
- Erstellen Sie ein Bencher Cloud-Konto.
- Erstellen Sie ein API-Token und fügen Sie es Ihrem CI als Geheimnis hinzu.
- Erstellen Sie einen Workflow für Ihr CI, wie GitHub Actions oder GitLab CI/CD.
- Installieren Sie die Bencher CLI in Ihrem CI-Workflow.
-
Führen Sie Ihre Benchmarks mit dem
bencher run
Unterbefehl in Ihrem CI-Workflow mit dempython_pytest
Adapter aus.
Schritte für die Bencher-Self-Hosted
- Erstellen Sie eine Bencher Self-Hosted Instanz.
- Erstellen Sie ein Konto auf Ihrer Bencher Self-Hosted Instanz.
- Erstellen Sie ein API-Token und fügen Sie es als Geheimnis zu Ihrem CI hinzu.
- Erstellen Sie einen Workflow für Ihr CI, wie GitHub Actions oder GitLab CI/CD.
- Installieren Sie die Bencher-CLI in Ihrem CI-Workflow. Stellen Sie sicher, dass die CLI-Version mit der Version Ihrer Bencher Self-Hosted Instanz übereinstimmt.
-
Führen Sie Ihre Benchmarks mit dem
bencher run
Unterbefehl in Ihrem CI-Workflow aus, indem Sie denpython_pytest
Adapter verwenden und die Option--host
auf die URL Ihrer Bencher Self-Hosted Instanz setzen.
🐍 Python Pytest
Der Python Pytest Adapter (python_pytest
) erwartet pytest-benchmark Ausgaben im JSON-Format (d.h. --benchmark-json results.json
).
Diese JSON-Ausgabe wird in einer Datei gespeichert, daher müssen Sie das bencher run
CLI --file
Argument verwenden, um diesen Dateipfad anzugeben.
Die latency
Messung (d.h. Nanosekunden (ns)
) wird erfasst.
bencher run --adapter python_pytest --file results.json "pytest --benchmark-json results.json benchmarks.py"
Es gibt zwei Optionen für die Metrik:
mean
(Standard): Derlower_value
undupper_value
liegen eine Standardabweichung unter bzw. über dem Mittelwert (d.h.value
).median
: Derlower_value
undupper_value
liegen einen Interquartilsabstand unter bzw. über dem Median (d.h.value
).
Dies kann im bencher run
CLI Unterbefehl mit dem optionalen --average
Argument angegeben werden.
Verfolgen Sie Ihre Benchmarks in CI
Hatten Sie jemals eine Leistungsregression, die sich auf Ihre Benutzer auswirkte? Bencher hätte dies mit kontinuierlichem Benchmarking verhindern können.