PHP Statische Tests für Front-End-Entwickler

7

Ich versuche, einen statischen PHP-Test bei Frontools hinzuzufügen, um den Testprozess zu vereinfachen und zu verbessern. Wenn es möglich ist, die Leistung zu steigern, dauert es b / c so lange, bis Ergebnisse erzielt werden.

GH-Problem - https://github.com/SnowdogApps/magento2-frontools/issues/45

Ich bin nicht mit PHP-Testbibliotheken / -Tools vertraut, daher haben Sie einige Fragen an Sie:

  1. Gibt es einen Grund, warum M2 Testbibliotheken (PHPUnit und PHP_CS) aus dem Jahr 2014 anstelle einer neuen verwendet?
  2. Ist es normal, dass die Ausgabe dieses Tests wie ein Durcheinander aussieht und es schwer zu verstehen ist, was und wo etwas falsch passiert ist? Ich vergleiche es mit der Ausgabe von Codequalitätstests für CSS / JS und es ist ein Albtraum. Gibt es einen besseren Reporter oder eine andere Möglichkeit, einen aussagekräftigen Bericht zu erhalten, anstatt etwas, das wie ein PHP-Backtrace aussieht?
  3. Gibt es einen Grund, warum es so langsam ist? Die Analyse von Vorlagendateien dauert ca. 7-8 Minuten. Die meisten Front-End-Tests dauern im schlimmsten Fall einige Sekunden, sodass kein Live-Feedback zu Problemen möglich ist.
  4. Wie führe ich diese Art von Tests durch, wenn wir ein einzelnes Modul (dh ein Thema) und keine ganze Magento 2-Instanz (CI-Tests) haben?
  5. Es sieht so aus, als hätte PHP_CS bereits einen einfachen Wrapper für Gulp, aber ich bin mir nicht sicher, wo die Konfiguration gespeichert ist. Ist es in der Datei /.php_cs?
igloczek
quelle

Antworten:

2

Ich werde Ihnen nur meine Gedanken dazu geben, ich kann in einigen Punkten falsch liegen, aber vielleicht wird es einige Dinge klarstellen:

Gibt es einen Grund, warum M2 Testbibliotheken (PHPUnit und PHP_CS) aus dem Jahr 2014 anstelle einer neuen verwendet?

Ich vermute, als das Magento 2 vor einigen Jahren mit der Entwicklung begann, nutzte das Team die damals verfügbare Bibliothek. Da sie viele Tests in Magento 2 geschrieben haben, bleiben sie wahrscheinlich bei der Version, die sie zum Zeitpunkt der Erstellung der ersten Tests verwendet haben, um die Tests nicht zu unterbrechen . Ich bin mir ziemlich sicher, dass sie das irgendwann in einer Hauptversion aktualisieren können. Sie können jetzt im Forum Feature-Anfragen dazu stellen: https://community.magento.com/t5/Magento-2-Feature-Requests-and/idb-p/feature-requests

Ist es normal, dass die Ausgabe dieses Tests wie ein Durcheinander aussieht und es schwer zu verstehen ist, was und wo etwas falsch passiert? Ich vergleiche es mit der Ausgabe von Codequalitätstests für CSS / JS und es ist ein Albtraum. Gibt es einen besseren Reporter oder eine andere Möglichkeit, einen aussagekräftigen Bericht zu erhalten, anstatt etwas, das wie ein PHP-Backtrace aussieht?

Ja, die Standardausgabe von PHPUnit ist nicht besonders schön. Die meisten IDE unterstützen PHPUnit und geben einebesserschönere Ausgabe . Hier ist zum Beispiel die offizielle Dokumentation zum Ausführen der Tests in PHPStorm: http://devdocs.magento.com/guides/v2.0/test/unit/unit_test_execution_phpstorm.html Es gibt auch Tools wie VisualPHPUnit, die eine GUI für die Komponententests bereitstellen : https://github.com/VisualPHPUnit/VisualPHPUnit

Gibt es einen Grund, warum es so langsam ist? Die Analyse von Vorlagendateien dauert ca. 7-8 Minuten. Die meisten Front-End-Tests dauern im schlimmsten Fall einige Sekunden, sodass kein Live-Feedback zu Problemen möglich ist.

Erstens enthält Magento 2 viele Tests, die sich definitiv auf die Leistung auswirken (aber hey, genau das ist erforderlich, damit Ihr Code richtig abdeckt;)). Ich bin mir ziemlich sicher, dass Vinai Kopp einige Leistungsverbesserungen erwähnt hat, die Sie tun können, um die Tests schneller laufen zu lassen . Ich hoffe, er gibt uns einige Einblicke, wenn er aus den Ferien zurück ist.

Wie führe ich diese Art von Tests durch, wenn wir ein einzelnes Modul (dh ein Thema) und keine ganze Magento 2-Instanz (CI-Tests) haben?

Meinen Sie damit, die Tests für ein Modul durchzuführen? Ja, das können Sie definitiv. Ich schlage vor, Sie überprüfen die Antwort von KAndy (er ist Teil des Magento 2-Teams) : Führen Sie Tests für ein bestimmtes Modul in Magento2 durch

Es sieht so aus, als hätte PHP_CS bereits einen einfachen Wrapper für Gulp, aber ich bin mir nicht sicher, wo die Konfiguration gespeichert ist. Es ist in der Datei /.php_cs?

Ich bin mir nicht sicher, wo dieser einfache Wrapper ist. Ich denke nicht, dass es die .php_csDatei ist. Soweit ich weiß, wird diese Datei nur für die statischen Überprüfungen vor dem Festschreiben von GitHub verwendet

Raphael beim digitalen Pianismus
quelle
Danke für die Antwort! Ich kommentiere die meisten Dinge unter der Antwort von @fschmengler, aber es sieht so aus, als ob Punkt 5 unklar ist. Ich frage nicht nach Dingen, die mit der Gulp-Implementierung zusammenhängen, b / c Ich bin mit JS-Tools vertraut :) Ich muss nur wissen, wie die PHP_CS-Konfiguration auf Magento-Ebene gespeichert ist.
Igloczek
2

Das sind ziemlich viele Fragen gleichzeitig, aber ich kann zumindest einige beantworten:

  1. Gibt es einen Grund, warum M2 Testbibliotheken (PHPUnit und PHP_CS) aus dem Jahr 2014 anstelle einer neuen verwendet?

Die Hauptentwicklung in Magento 2 begann um 2014, daher verwendeten sie die damals verfügbaren Tools. Als PHPUnit 5 herauskam, gab es bereits eine große Anzahl von Tests, die nicht mit der neuen Version kompatibel waren ( ein Beispiel finden Sie in diesem Forenthread ). Es ist daher verständlich, dass sie ein Update verschoben haben.

Ich nehme an, die Gründe, bei einer alten PHP_CS-Version zu bleiben, sind ähnlich, obwohl ich hier kein konkretes Beispiel habe.

  1. Ist es normal, dass die Ausgabe dieses Tests wie ein Durcheinander aussieht und es schwer zu verstehen ist, was und wo etwas falsch passiert? Ich vergleiche es mit der Ausgabe von Codequalitätstests für CSS / JS und es ist ein Albtraum. Gibt es einen besseren Reporter oder eine andere Möglichkeit, einen aussagekräftigen Bericht zu erhalten, anstatt etwas, das wie ein PHP-Backtrace aussieht?

IDEs wie PHPStorm sind gut in diese Tools integriert, sodass Sie Code-Sniffer-Ergebnisse direkt in den Quelldateien sehen und eine schöne Benutzeroberfläche für PHPUnit-Tests erhalten.

Außerdem verfügt PHPUnit über verschiedene Ausgabeoptionen. Mit dem --testdoxArgument erhalten Sie beispielsweise eine lesbare Checkliste mit bestandenen und fehlgeschlagenen Tests. Es bietet weniger Infos, aber eine lesbare Übersicht. Sie können es auch im HTML-Format mit erhalten --testdox-html=OUTPUTFILE. Ebenso können Sie den Code Coverage Report in HTML mit abrufen --coverage-html OUTPUTDIR.

Die nützlicheren Ausgabeformate sind jedoch XML- und JSON-Formate, die von anderen Anwendungen wie VisualPHPUnit oder CI-Servern gelesen werden können.

PHPUnit-Parameter für die Berichterstellung:

Code Coverage Options:

  --coverage-clover <file>  Generate code coverage report in Clover XML format.
  --coverage-crap4j <file>  Generate code coverage report in Crap4J XML format.
  --coverage-html <dir>     Generate code coverage report in HTML format.
  --coverage-php <file>     Export PHP_CodeCoverage object to file.
  --coverage-text=<file>    Generate code coverage report in text format.
                            Default: Standard output.
  --coverage-xml <dir>      Generate code coverage report in PHPUnit XML format.

Logging Options:

  --log-junit <file>        Log test execution in JUnit XML format to file.
  --log-tap <file>          Log test execution in TAP format to file.
  --log-json <file>         Log test execution in JSON format.
  --testdox-html <file>     Write agile documentation in HTML format to file.
  --testdox-text <file>     Write agile documentation in Text format to file.

Weitere Informationen: https://phpunit.de/manual/current/en/textui.html

PHP_CS-Parameter für die Berichterstellung

PHP_CS hat auch verschiedene Berichtsformate:

--report=xml         PHP_CS XML format
--report=checkstyle  Checkstyle XML format
--report=csv         CSV

(andere Formate: emacs, svnblame, gitblame)

Weitere Informationen: https://github.com/squizlabs/PHP_CodeSniffer/wiki/Reporting

  1. Gibt es einen Grund, warum es so langsam ist? Die Analyse von Vorlagendateien dauert ca. 7-8 Minuten. Die meisten Front-End-Tests dauern im schlimmsten Fall einige Sekunden, sodass kein Live-Feedback zu Problemen möglich ist.

Ich kann nicht sagen, warum PHP_CS nur für Vorlagendateien 8 Minuten benötigt, aber es sollte Ihrem Beobachter möglich sein, nur geänderte Dateien zu überprüfen. Die PHPStorm-Integration macht das ganz gut.

  1. Wie führe ich diese Art von Tests durch, wenn wir ein einzelnes Modul (dh ein Thema) und keine ganze Magento 2-Instanz (CI-Tests) haben?

Einfach ausführen, phpcs /path/to/themeum nur Dateien in diesem Verzeichnis zu überprüfen.

  1. Es sieht so aus, als hätte PHP_CS bereits einen einfachen Wrapper für Gulp, aber ich bin mir nicht sicher, wo die Konfiguration gespeichert ist. Es ist in der Datei /.php_cs?

Es sieht nicht so aus, als ob dieser Wrapper einen Datei-Watcher enthält, daher sehe ich keinen Vorteil.

Die .php_csDatei definiert, welche Dateien überprüft und welche Codierungsstandards verwendet werden sollen. Dies ist eine PHP_CS-Konfigurationsdatei und unabhängig vom gulp-Wrapper.

Fabian Schmengler
quelle
Danke für die Antwort! 1. Ich würde dieses Thema in den Thread für Verbesserungsvorschläge verschieben. B / C sieht so aus, als ob niemand wirklich weiß, was aufhört, dh PHPUnit auf die neueste Version 4.x zu aktualisieren. 2. Ich bin ein Atom-Benutzer, b / c Ich benötige diese IDE-Funktion überhaupt nicht (sie ist im Front-End meistens nutzlos), daher suche ich nur nach Verbesserungen in der Konsole (CI-Testausgabe ist ebenfalls wichtig). . Ich würde diese Parameter testen, aber es sieht so aus, als würde man ein einfaches benutzerdefiniertes Druckermodul erstellen. Dies ist die bessere Option. 3. Sieht aus wie eine gefundene Ursache - statische Tests führen auch einen Teil der Integritätstests durch und es dauert ungefähr 4-5 Minuten, bis sie abgeschlossen sind. 1/2
igloczek
4. Es geht nicht nur darum, PHP_CS auszuführen. Der statische Test enthält auch XXS-Schwachstellenprüfungen und benutzerdefinierte Funktionen, die auf PHPUnit aufbauen. Daher ist es wahrscheinlich erforderlich, ein Magento-Kernpaket zu haben, um Folgendes auszuführen: <5. Es handelt sich um ein Gulp-Plugin, sodass das Überwachen von Dateien auf Gulp-Ebene erfolgt, jedoch nicht Fall. Ich müsste wissen, wo Magento gespeichert ist Konfiguration dieses Plugins (falls vorhanden, aber ich kann mir keinen Linter ohne Konfigurationsdatei vorstellen: O) 2/2
igloczek
3.-4.) In der Tat gibt es die statische Testsuite PHPUnit, die einige Zeit in Anspruch nimmt, Abhängigkeiten überprüft und so weiter. Ich habe herausgefunden, dass Sie eine Liste von Dateien einfügen können dev/tests/static/testsuite/Magento/Test/_files/changed_files*(mit denen generiert werden kann get_github_changes.php) und einige der Tests nur diese Dateien verarbeiten. Im Übrigen sehe ich keine Möglichkeit, sie pro Modul / Thema einzuschränken. Was Sie tun können, ist eine einzelne Testsuite auszuführen, z. B. mit phpunit --testsuite "Less Static Code Analysis"(siehe phpunit.xml.distListe der Testsuiten ) 5.) Ja, das wäre.php_cs
Fabian Schmengler
Ich denke darüber nach, Tests zu extrahieren, um ein Composer-Paket zu trennen, und es dann als Entwicklungsabhängigkeit zu unseren Paketen hinzuzufügen, um Tests auf CI env separat auszuführen. Hoffe, es wird irgendwie funktionieren: D
igloczek