web-dev-qa-db-fra.com

Karma avec ChromeHeadless sur Jenkins CI avec Debian

Nous passons de PhantomJS à ChromeHeadless dans notre environnement de test avec Karma & Jasmine pour notre application frontale Node.js. Localement, il suffit de remplacer le champ 

navigateurs: ['PhantomJS'],

avec

navigateurs: ['ChromeHeadless'],

et ajoutez l'entrée dans package.json

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

Ensuite, la compilation npm utilisera l'instance de navigateur Chrome installée localement pour exécuter les tests Jasmine. Cela fonctionne correctement.

Sur notre serveur de compilation jenkins (qui tourne sous Debian Jessie), aucun chrome n’est installé et les tests ne peuvent donc pas être exécutés.

Maintenant la question: 

  • Existe-t-il un package NPM pour chrome, que je puisse installer, afin de ne pas l'installer directement sur la machine Debian? (Similaire à phantomjs-prebuilt, qui installe l'instance actuelle de PhantomJS avant d'exécuter le scénario de test réel) 

UPDATE: Oui, il existe le marionnettiste du package NPM, voir: https://github.com/GoogleChrome/puppeteer . Cela va chercher une version chrome en fonction de la machine de construction actuelle. Par conséquent, une nouvelle entrée, le fichier package.json doit être ajoutée (ou installée via npm install puppeteer -D): 

"marionnettiste": "x.y.z",

et le karma.conf: 

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

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

Sachez qu'avec Debian, il faut parfois installer des dépendances manquantes. Voir: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md

8
schowave

Il existe un meilleur moyen de le faire que de grouper le chrome partout où vous . Vous pouvez définir des variables d’environnement pour dire à Puppeteer d’installer ou non l’installation de Chromium . Donc localement, installez le chrome mais sur le jeu de serveurs CI. la variable env pour ne pas installer de chrome.

Ensuite, vous pouvez obtenir l’image sans navigateur et l’exécuter pour les serveurs CI chrome . La raison pour laquelle c’est beaucoup mieux, c’est en raison du nombre de dépendances que vous devez installer sur le serveur pour que Chromium fonctionne. Utiliser l’image Docker est un moyen bien plus efficace de le faire.

Reportez-vous à la documentation ici: https://docs.browserless.io/docs/docker-quickstart.html

Reportez-vous à la réponse dans cette question ! pour la configuration du karma sur la façon de faire cela avec l’image chrome Sélénium

1
Nanotron