webentwicklung-frage-antwort-db.com.de

Karma mit ChromeHeadless auf Jenkins CI mit Debian

In unserer Testumgebung mit Karma & Jasmine von PhantomJS zu ChromeHeadless für unsere Frontend-App Node.js. Vor Ort muss lediglich das Feld ersetzt werden 

browser: ['PhantomJS'],

mit

browser: ['ChromeHeadless'],

und füge den Eintrag in der package.json hinzu: 

"karma-chrome-launcher": "x.y.z",

Dann benötigt der npm-Build die lokal installierte Chrome-Browser-Instanz, um die Jasmin-Tests auszuführen. Das funktioniert richtig.

Auf unserem Jenkins-Build-Server (der auf Debian Jessie läuft) ist kein Chrome installiert, sodass die Tests nicht ausgeführt werden können.

Nun die Frage: 

  • Gibt es ein NPM-Paket für chrome , das ich installieren kann, damit ich es nicht direkt auf dem Debian-Rechner installieren muss? (Ähnlich wie phantomjs-prebuilt , das die aktuelle PhantomJS-Instanz installiert, bevor der eigentliche Testfall ausgeführt wird.) 

UPDATE: Ja, es gibt den NPM-Paket-Puppenspieler, siehe: https://github.com/GoogleChrome/puppeteer . Dadurch wird abhängig von der aktuellen Build-Maschine eine Chrome-Version abgerufen. Dazu muss ein neuer Eintrag der Datei package.json hinzugefügt werden (oder über npm install puppeteer -D installiert werden): 

"Puppenspieler": "x.y.z",

und die karma.conf: 

process.env.CHROME_BIN = require('puppeteer').executablePath();

browsers: ['HeadlessChrome'],
        customLaunchers: {
            HeadlessChrome: {
                base: 'ChromeHeadless',
                flags: ['--no-sandbox']
            }
        },

Beachten Sie, dass bei Debian manchmal fehlende Abhängigkeiten installiert werden müssen. Weitere Informationen finden Sie unter: https://github.com/GoogleChrome/puppeteer/blob/master/docs/trtenance.md

8
schowave

Es gibt einen besseren Weg, als Chrom überall zu bündeln. Sie können Umgebungsvariablen so einstellen, dass Puppeteer Chromium installiert oder nicht installiert wird. Gehen Sie also lokal vor, und installieren Sie das Chrom aber weiter Der CI-Server hat die Umgebungsvariable so festgelegt, dass Chrom nicht installiert wird.

Dann können Sie das browserlose Image abrufen und das für die CI-Server chrome ausführen. Der Grund, warum dies viel besser ist, liegt in den zahlreichen Abhängigkeiten, die Sie auf dem Server installieren müssen, damit Chromium funktioniert. Die Verwendung des Docker-Images ist viel besser.

Lesen Sie die Dokumentation hier: https://docs.browserless.io/docs/docker-quickstart.html

Siehe die Antwort in dieser Frage ! für die Karma-Konfiguration, wie man dies mit dem Selenium-Chrom-Image macht

1
Nanotron