Kann jemand ein gutes automatisiertes Testsuite-Framework für Perl vorschlagen?Gibt es eine gute automatisierte Test-Suite für Perl?
Antwort
Es hängt wirklich davon ab, was Sie versuchen zu tun, aber hier ist ein Hintergrund für viel davon.
Erstens würden Sie in der Regel Ihre Prüfprogramme mit dem Test schreiben :: Mehr oder Test :: Einfach als Kerntestprogramm:
use Test::More tests => 2;
is 3, 3, 'basic equality should work';
ok !0, '... and zero should be false';
Intern Test :: Builder zur Ausgabe dieser Testergebnisse genannt als TAP (Test Anything Protocol). Test :: Harness (ein dünner Wrapper um TAP :: Harness) liest und interpretiert den TAP und teilt Ihnen mit, ob Ihre Tests erfolgreich waren oder nicht. Das oben erwähnte "Beweis" -Werkzeug ist mit Test :: Harness gebündelt, also nehmen wir an, dass das obige Verzeichnis im t/-Verzeichnis (dem Standard-Perl-Testverzeichnis) als "Zahlen" gespeichert wird.t“, dann können Sie es mit diesem Befehl ausführen:
prove --verbose t/numbers.t
Oder alle Tests in diesem Verzeichnis ausführen (rekursiv, Sie in Verzeichnisse absteigen vorausgesetzt wollen):
prove --verbose -r t/
(--verbose , ist natürlich optional).
Als Randnotiz, nicht verwenden Testunit. Viele Leute empfehlen, aber es wurde schon vor langer Zeit aufgegeben und integrieren, nicht mit modernen Test-Tool.
ich für Test gehen würde :: Mehr oder allgemein etwas, die TAP
Ab sofort gibt, verwenden wir Test :: More aber aktuelles Problem ist, dass wir alle Testdateien manuell ausführen müssen zum Prüfen. Was ich suche, ist ein mehr automatisiertes Framework, das inkrementelle Tests/Build-Checks usw. durchführen kann.
Ein Wrapper um Test :: Mehr dafür wäre ideal, aber alles bessere und funktionellere wäre auch in Ordnung.
Ich gehe durch PerlUnit, um zu sehen, ob das hilft.
Wenn ich Sie richtig verstehe Sie suchen TAP::Harness
Wenn Sie ExtUtils::MakeMaker oder Module::Build verwenden, dann können Sie alle Ihre Tests automatisch ausgeführt durch Eingabe des Befehls „make test“ oder „Build-Test“, die führt alle * .t-Dateien im Unterordner Ihres Projekts aus.
Wenn Sie keine dieser Komponenten verwenden, können Sie TAP::Harness verwenden, um die Ausführung mehrerer Testskripts zu automatisieren.
Um die Tests tatsächlich zu schreiben, verwenden Sie Test::More oder eines der Module, die andere hier vorgeschlagen haben.
Kennen Sie das 'beweisen' Dienstprogramm (von App :: Prove)? Sie können sagen, dass alle Tests rekursiv in einem bestimmten Verzeichnis laufen sollen, mit oder ohne Ausführlichkeit usw.
Persönlich mag ich Test :: Most, im Grunde Test :: More mit einigen zusätzlichen coolen Funktionen.
Solange Sie Tests verwenden, die Sie vielleicht TAP (Test Anything Protocol) Ausgabe erzeugen finden dies nützlich sein: http://sourceforge.net/projects/smolder
Check out CPAN Testers, die eine Menge von Werkzeugen für automatisierte Tests haben. Die meisten davon sollten in CPAN sein, damit Sie sie an Ihre Bedürfnisse anpassen können. Es ist auch sehr einfach, einen eigenen Tester mit TAP :: Harness zu schreiben.
Was genau müssen Sie tun und wie versuchen Sie, es in Ihren Prozess zu integrieren?
wir alle Testdateien manuell zum Testen
Sie wollen sicher beweisen, mit laufen müssen (läuft Ihr Test) und/oder Module :: Build (baut Ihr Code und führt dann die Tests die Verwendung von identischer Testkabelbaumcode, der intern verwendet wird.)
Für automatisierte Tests in Perl werfen Sie einen Blick auf Test::Harness, die das prove
-Tool enthält.
Das prove
Tool kann mit dem folgenden Befehl ausgeführt werden:
prove -r -Ilib t
Dieser Test alle mit * .t Dateien im ‚t /‘ Verzeichnis rekursiv wird, während lib
auf den Pfad enthalten hinzufügen.
-l ist eine Abkürzung für -Ilib – Schwern
Die Testsuite Rahmen der Wahl ist Test::Harness, die einen Testlauf der Steuerung übernimmt, um die Ergebnisse zu sammeln usw.
Verschiedene Module existieren bestimmte Arten von Tests zur Verfügung zu stellen, die am häufigsten von denen gefunden werden kann in Test::Simple und Test::More (beide sind in der Test-Simple-Distribution enthalten). Der gesamte Test-Namespace auf dem CPAN ist spezialisierten Unit-Test-Modulen gewidmet, von denen die meisten unter Test :: Harness ausgeführt werden.
Laut Konvention werden Tests im Verzeichnis t/eines Projekts gespeichert, und jede Testdatei verwendet die Dateierweiterung .t; Tests werden normalerweise über
Modulverteilungen enthalten normalerweise ein Make-Ziel mit dem Namen "Test", das die Testsuite vor der Installation ausführt. Standardmäßig erfordert der CPAN-Installationsprozess, dass Tests nach dem Build ausgeführt werden, bevor ein Modul installiert wird.
Haben Sie gesehen smolder?
"Smoke Test Aggregator wird von Entwicklern und Testern zum Hochladen (automatisch oder manuell) und Anzeigen von Rauch-/Regressionstests mit dem Test Anything Protokoll verwendet. Details und Trends werden grafisch dargestellt und Benachrichtigungen per E-Mail oder Atom-Feeds bereitgestellt."
Das ist nett, aber Smolder scheint TAP-Archive nicht mehr korrekt zu analysieren. –
Sie sagte:
„Was ich suche eine automatisierte Rahmen ist, die inkrementelle Testen tun können/bauen Kontrollen etc“
Immer noch nicht ganz sicher, was Sie nach .Wie andere bereits erwähnt haben, möchten Sie Dinge betrachten, die auf Test :: Harness/TAP basieren. Die überwiegende Mehrheit der Perl-Testcommunity verwendet dieses Framework - damit erhalten Sie viel mehr Unterstützung (und nützlichen vorhandenen Code).
Können Sie ein wenig mehr darüber sprechen, was Sie unter "inkrementelle Tests/Build-Prüfungen" verstehen?
Ich vermute, dass Sie Ihre Tests in Gruppen aufteilen möchten, so dass Sie unter bestimmten Umständen nur bestimmte Tests durchführen.
Es gibt mehrere Möglichkeiten, dies zu tun. Am einfachsten wäre es, nur das Dateisystem zu verwenden - teilen Sie Ihre Test-Verzeichnisse, so dass Sie Dinge wie:
core/ database.t infrastructure.t style/ percritic.t ui/ something.t something-else.t
Und so weiter ... Sie dann die Befehlszeile verwenden können „beweisen“ Tool ausführen sie alle oder nur bestimmte Verzeichnisse usw.
beweisen hat viele nützliche Optionen, die Sie wählen können, welche Tests ausgeführt werden und in welcher Reihenfolge (z. B. Dinge wie zuletzt-fehlgeschlagen Reihenfolge). All dies wird Sie wahrscheinlich auf das bringen, was Sie brauchen.
(BTW ist es wichtig, eine aktuelle Version von Test :: Simple/beweisen/etc. Von CPAN. Aktuelle Versionen haben viel, viel mehr Funktionalität).
Wenn Sie eine OO-Denkweise haben oder Erfahrung mit xUnit-Frameworks haben, dann sollten Sie vielleicht Test :: Class betrachten, ein Perl-xUnit-Framework, das auf dem TAP/Test aufbaut: : Harness-Schicht. Ich denke, es ist ziemlich viel besser als PerlUnit - aber ich würde sagen, da ich es :-)
schriebCheck out köstlich für einige weitere Informationen über Test :: Class http://delicious.com/tag/Test::Class
Wenn dies nicht das, was Sie danach - Könnten Sie etwas detaillierter auf die Funktionalität eingehen?
Cheers,
Adrian
Bitte nicht PerlUnit verwenden. Es wurde aufgegeben. Wenn Sie ein xUnit-Style-Framework benötigen, lesen Sie Test::Class. Es wird aktiv gepflegt und integriert sich in Perls Standard-Testframework. – Ovid