Frage

Lassen Sie uns sagen, dass ich meine Code-Basis zu einem so hohen Grad der Einheit Testabdeckung haben als Sinn macht. (Über einen bestimmten Punkt, Reichweite zu erhöhen keinen guten ROI hat.)

Als nächstes möchte ich die Leistung testen. Um die Benchmark-Code, um sicherzustellen, dass neue Commits werden nicht unnötig Dinge zu verlangsamen. Ich war sehr fasziniert von Safari für Verlangsamungen von Commits rel="noreferrer">. Ich bin nicht sicher, dass Maß an Engagement für Geschwindigkeit einen guten ROI für die meisten Projekte hat, aber ich möchte zumindest gerne aufmerksam gemacht werden, dass eine Geschwindigkeit Regression geschehen ist, und in der Lage ein Urteil Anruf darüber zu machen.

Umwelt ist Python auf Linux, und ein Vorschlag, der für BASH-Skripte auch praktikabel wäre, würde mich sehr glücklich machen. (Aber Python ist der Schwerpunkt.)

War es hilfreich?

Lösung

Sie wollen, wenn möglich, auf Systemebene Performance-Tests zu tun - testen Sie Ihre Anwendung als Ganze, in Zusammenhang mit Daten und Verhalten möglichst nahe an dem Produktionseinsatz wie möglich

.

Das ist nicht einfach, und es wird noch schwieriger ist es, zu automatisieren und konsistente Ergebnisse zu erzielen.

Darüber hinaus können Sie keine VM für Performance-Tests verwenden (es sei denn, die Produktionsumgebung in VMs läuft, und selbst dann müssen Sie die VM auf einem Host mit nichts anderes auf laufen).

Wenn Sie tun Performance Unit-Tests sagen, die wertvoll sein können, aber nur, wenn es verwendet wird, um ein Problem zu diagnostizieren, die wirklich auf Systemebene existiert (nicht nur in der Entwickler-Kopf).

Auch die Leistung von Einheiten in Unit-Tests versagt manchmal ihre Leistung im Kontext zu reflektieren, so kann es überhaupt nicht sinnvoll sein.

Andere Tipps

Während ich damit einverstanden, dass auf Systemebene zu testen Leistung ist letztlich mehr relevant, wenn Sie möchten Unittest Stil Belastungstests für Python, FunkLoad http://funkload.nuxeo.org/ tut genau das.

Micro-Benchmarks hat ihren Platz, wenn Sie versuchen, eine bestimmte Aktion in Ihrer Code-Basis zu beschleunigen. Und immer getan Nacherfüllung Unit-Tests sind eine nützliche Methode, um sicherzustellen, dass diese Aktion, die Sie gerade optimieren nicht unbeabsichtigt in Leistung Regress auf Zukunft verpflichtet.

MarkR ist richtig ... tut reale Welt Performance-Tests ist der Schlüssel und kann etwas dodgey in Unit-Tests sein. Having said that, einen Blick auf das cProfile Modul in der Standardbibliothek haben. Es wird an wenigsten geeignet, von Ihnen einen relativen Sinn zu geben begehen zu begehen, wie schnell sich die Dinge laufen, und Sie können es innerhalb einer Einheit Test ausführen, obwohl natürlich erhalten Sie Ergebnisse in den Details erhalten, die den Overhead umfassen der Unit-Test-Framework selbst.

In allem aber, wenn Ihr Ziel Null-Toleranz ist, müssen Sie etwas viel robuster als diese ... cProfile in einem Unit-Test wird es überhaupt nicht geschnitten und irreführend sein kann.

Wenn ich Performance-Tests zu tun, ich habe in der Regel eine Testsuite von Dateneingängen, und messe, wie lange das Programm dauert jeweils eine verarbeiten.

Sie können die Leistung auf täglicher oder wöchentlicher Basis einzuloggen, aber ich finde es nicht besonders nützlich, um die Leistung zu sorgen, bis die gesamte Funktionalität implementiert wird.

Wenn die Leistung zu schlecht ist, dann breche ich aus cProfile es mit den gleichen Dateneingänge laufen und versuchen, um zu sehen, wo die Engpässe sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top