2016-12-15 2 views
0

(beachten Sie, ich bezweifle, dass dies ist spezifisch für PyQt so habe ich mit Qt zu getaggt)pyqt Testsuite auf mysteriöse Weise mit Jenkins ausfällt, funktioniert einwandfrei unter Windows Command Shell

Wir haben eine 2-Test-Suiten (nennen wir sie A und B), die wir mit pytest auf unserer Entwickler-Workstations ausgeführt:

python -m pytest -c configfile -s -v A 
python -m pytest -c configfile -s -v B 

Suite B (und nur, dass man) prüft unsere PyQt Komponenten; In A ist PyQt nicht enthalten. Wir haben das Projekt A in Jenkins (Version 1.658 btw) definiert, um Suite A laufen zu lassen: Es läuft ohne Probleme in Jenkins. Wir haben das gleiche gemacht, ein Projekt B in Jenkins definiert, um Suite B zu betreiben: Dieses schlägt nach vielen Tests mit einer SYSTEM-Log-Nachricht und einer WARNING-Log-Nachricht von Qt (gefangen durch Setzen eines Handlers über QtCore.qInstallMessageHandler()) zeitweise fehl. Das Jenkins Protokoll, das die Test-Suite B stdout erfasst ist:

SYSTEM log message from Qt: WindowCreationData::create: CreateWindowEx failed (Not enough storage is available to process this command.) 
WARNING log message from Qt: Failed to create platform window for QWidgetWindow(0x705d260, name="FramedPartWidgetWindow") with flags QFlags<Qt::WindowType>(Window|WindowTitleHint|WindowSystemMenuHint|WindowMinMaxButtonsHint|WindowCloseButtonHint|WindowFullscreenButtonHint) (context: category=default) 
Build step 'Execute Windows batch command' marked build as failure 

Die letzte Zeile Ausgabe wird durch Jenkins Skript B. Testsuite

Auf der Jenkins Maschine (Windows 7 Pro 64-Bit-Plattform, btw), das die Testsuites ausführt, kann ich eine Windows-Befehlsshell öffnen, und wenn ich die Testsuiten von dort aus starte, laufen beide Testsuiten ohne Probleme. Dann öffne ich einen Webbrowser, gehe zur Jenkins-Projektseite für Suite B und klicke auf "Jetzt erstellen": Das läuft genauso, wie ich es von der Kommandozeile aus getan habe, aber ich bekomme den obigen Fehler. Wenn ich 10 Builds mache, geschieht das oben für einen anderen Test jedes Mal, obwohl immer in der gleichen "Area". Wenn ich die Tests in der Nähe des Fehlers ausfiltere, läuft der Test weiter, aber nach dem Entfernen von 4 Testklassen hilft das nicht mehr.

Das Problem ist nicht Desktop, weil ich eingeloggt bin. Ein Unterschied zwischen der Befehls-Shell und dem Jenkins-Lauf ist, dass aus der Shell, Test-Suite B öffnet viele (PyQt) Windows und schließt sie. Von Jenkins kann ich keine offenen Fenster sehen, also scheinen sie sich auf irgendeinem "virtuellen" Desktop zu öffnen. Also vielleicht das Thema Desktop. Muss ich diesen virtuellen Desktop irgendwie konfigurieren, um größere Grafikkapazität zu haben?

Der Fehler scheint darauf hinzuweisen, dass der von Jenkins gestartete Prozess eine Ressource knapp wird, aber es ist nicht klar, was: Es gibt viel Speicherplatz und Speicherplatz.

Wer hat eine Idee, wohin Sie von hier gehen? Ich habe eine Google-Suche und alles, was ich finden konnte, ist diese, sie sehen nicht sehr vielversprechend, obwohl ich die Vorschläge versuchen:

I‘ Ich bin nicht vertraut mit den Feinheiten, wie der Jenkins-Dienst unter Windows Prozesse ausführt, also bin ich ratlos.

Update 20161219: Anscheinend ist dies ein bekannt Probleme mit GUI-Tests von Windows-Diensten, siehe my post on Bitnami Jenkins forum.

+0

Haben Sie sich die Dokumente angesehen, bevor Sie das gefragt haben? – alphanumeric

+0

@alphanumeric sehr lustig, mehr, wenn Sie vergleichen, [scrollToItem] (http://doc.qt.io/qt-5/qlistwidget.html#scrollToItem) von [QListWidget] (http://doc.qt.io /qt-5/qlistwidget.html), zum Auffinden von [GUI Testing in Windows] (https://wiki.jenkins-ci.org/display/JENKINS/Tomcat) von [Windows Installation] (https: //wiki.jenkins -ci.org/display/JENKINS/Installation+Jenkins) (geschweige denn von https://bitnami.com/stack/jenkins, was wir bekamen). – Schollii

Antwort

0

Offenbar ist dies ein bekannt Probleme mit GUI-Tests von Windows-Diensten, see my post on Bitnami Jenkins forum, wie es der Fall mit dem Bitnami Jenkins-Stack ist, den wir verwenden. Wie ich in diesem Post erwähne, wird der untere Rand der Seite https://wiki.jenkins-ci.org/display/JENKINS/Tomcat sagt GUI-Tests in Windows ist wahrscheinlich nicht funktionieren, wenn Jenkins mit Tomcat als Container als Service installiert installiert ist.Die einzige Möglichkeit scheint zu sein, Tomcat so zu konfigurieren, dass es mit dem Windows Scheduler läuft (statt eines Dienstes), aber der Bitnami Stack, den wir für jenkins verwenden, scheint das nicht zuzulassen, also ist die einzige Lösung für uns, jenkins von Grund auf neu zu installieren und Tomcat als geplante Aufgabe. Installieren

  • (via bitnami Stack in einem Linux-VM machbar sein soll)

    es, dass unter Windows erscheint (basierend auf Dokumentation für Jenkins Einrichtung GUI über Squish zu testen),

    • Jenkins Master installieren Windows-Slave. Stellen Sie sicher, dass der Slave nicht als Windows-Dienst bei Launch-Methode gestartet wird. Windows-Dienste sollen Befehlszeilenanwendungen ausführen, aber keine Anwendungen ausführen, die aus einer GUI bestehen. Starten des Jenkins-Slaves als JNLP über Starten von Slave-Agenten über Java Web Start funktioniert einwandfrei.
    • Richten Sie einen Knoten in Jenkins unter Manage Jenkins | Knoten verwalten | Neuer Knoten ein.
    • Lesen https://kb.froglogic.com/display/KB/Automation+on+Windows

    This page mehrere Beiträge zu diesem Problem zu aggregieren scheint.

  • Verwandte Themen