phpunit startet Tests nach dem Zufallsprinzip neu

73

Ich versuche, meine symfony2-Anwendung mit PHPUnit zu testen. Ich habe ein Projekt, in dem alles wie erwartet funktioniert, aber bei meinem anderen Projekt habe ich das seltsame Verhalten, dass PHPUnit die Ausführung der Testsuite gegen Ende aller Tests entweder zufällig beendet und die Tests nach Abschluss der Testsuite und Schreiben des Codes neu startet oder neu startet Abdeckung. In anderen Fällen läuft es normal.

Hier sind einige Ausgaben, um sichtbar zu machen, was gerade passiert (Test wird immer wieder neu gestartet):

PHPUnit 3.6.10 by Sebastian Bergmann.

Configuration read from C:\workspace\cllctr\app\phpunit.xml

................................................................. 65 / 83 ( 78%)
...........PHPUnit 3.6.10 by Sebastian Bergmann.

Configuration read from C:\workspace\cllctr\app\phpunit.xml

................................................................. 65 / 83 ( 78%)
...PHPUnit 3.6.10 by Sebastian Bergmann.

Configuration read from C:\workspace\cllctr\app\phpunit.xml

................................................................. 65 / 83 ( 78%)
............PHPUnit 3.6.10 by Sebastian Bergmann.

Configuration read from C:\workspace\cllctr\app\phpunit.xml

................................................................. 65 / 83 ( 78%)
............PHPUnit 3.6.10 by Sebastian Bergmann.

Configuration read from C:\workspace\cllctr\app\phpunit.xml

................................................................. 65 / 83 ( 78%)
..................

Time: 01:03, Memory: 43.00Mb

OK (83 tests, 145 assertions)

Writing code coverage data to XML file, this may take a moment.

Generating code coverage report, this may take a moment.

Hier ist ein Beispiel für den Neustart der Test Suite nach Ausführung aller Tests:

PHPUnit 3.6.10 by Sebastian Bergmann.

Configuration read from C:\workspace\cllctr\app\phpunit.xml

................................................................. 65 / 83 ( 78%)
..................

Time: 01:29, Memory: 53.25Mb

OK (83 tests, 145 assertions)

Writing code coverage data to XML file, this may take a moment.

Generating code coverage report, this may take a moment.
PHPUnit 3.6.10 by Sebastian Bergmann.

Configuration read from C:\workspace\cllctr\app\phpunit.xml

................................................................. 65 / 83 ( 78%)
............PHPUnit 3.6.10 by Sebastian Bergmann.

Da mein anderes Projekt ohne Probleme ausgeführt wird, muss ein Problem in meinem Code vorliegen. Aber ich kann nicht herausfinden, was dieses Verhalten möglicherweise auslöst! Die Protokolle zeigen nichts Unerwartetes / Seltsames.

BEARBEITEN

Gestern ist mir etwas Seltsames aufgefallen: Ich habe mich aus nicht verwandten Gründen entschlossen, von MongoDB zu MySQL zu wechseln. Nach Abschluss des Übergangs werden alle Tests problemlos ausgeführt. Ich habe es oft versucht und kann es nicht mehr reproduzieren. Da dies nur bei meinen Funktionstests passiert ist, denke ich, dass das Problem meine WebTestCase-Klasse war, die einige Befehle zum Löschen und Wiederherstellen der Datenbank ausführt. Vielleicht kann jemand, der auch MongoDB verwendet, dieses Verhalten reproduzieren?

Sgoettschkes
quelle
Es sieht so aus, als ob es immer am selben Ort passiert, 65/83. Können Sie herausfinden, zu welchem ​​Test es kommt? Versuchen Sie, die --verboseOption beim Ausführen zu verwenden.
Jon Cairns
65/83 bedeutet, dass in Zeile 1 65 Tests ausgeführt wurden (jeder Punkt ist ein Test). In der zweiten Zeile sehen Sie, dass die Anzahl der ausgeführten Tests nicht gleich ist. Ich bezweifle, dass ein Test fehlschlägt. Da die Tests manchmal funktionieren und manchmal eine Schleife bilden, bezweifle ich, dass dies auf einen Test zurückzuführen ist. Aber ich werde weiter nachforschen!
Sgoettschkes
1
Mein Fehler! Ich hatte dieses Wissen irgendwo in meinem Gehirn. Hier ist eine Frage: Führen Sie jeden Test in einem isolierten PHP-Prozess aus? Das könnte diese ungewöhnliche Aktivität verursachen. Wir verwenden die ganze Zeit dieselbe Version von PHPUnit wie Sie und haben nichts so Verrücktes gesehen wie das, was Sie sehen!
Jon Cairns
19
phpunit --debugzeigt Ihnen, welcher Test ausgeführt wird.
Rygu
8
phpunit --testdoxzeigt Ihnen die Testnamen - anstelle von Punkten.
Jens A. Koch

Antworten:

1

Ich würde vorschlagen, die Verbindungslimits und Pools der Datenbankserver zu überprüfen.

Wenn Sie beispielsweise ein maximales Limit von 100 Verbindungen haben und einige der Tests Verbindungen offen lassen ("Lecks"), würden Sie dort die Limits erreichen.

Das würde auch erklären, warum es manchmal funktioniert und manchmal an die Grenze stößt, da Ihre Datenbank andere Aufgaben gleichzeitig erledigen kann. Manchmal stoßen Sie an die Decke, manchmal, wenn nichts anderes ausgeführt wird, können Sie Ihre Tests erfolgreich ausführen.

Suchen Sie nach dauerhaften Netzwerkverbindungen und anderen externen Ressourcen.

PetrosHu
quelle