web-dev-qa-db-fra.com

Comment améliorer les performances de démarrage des marionnettistes pendant les tests

J'ai écrit un petit robot avec l'aide de Puppeteer. Maintenant, je suis confronté au défi que mes tests sont assez lents (> 3 secondes pour chaque test). J'ai pu le retrouver jusqu'à la fonction launch de Puppeteer et l'utilisation de Istanbul/nyc.

  • Si je lance le test uniquement avec mocha, les tests sont terminés sous 400 ms.
  • Mais si j'utilise en plus nyc, la durée des tests dépasse 3000 ms

Tout ce que j'utilise c'est

'use strict';
const puppeteer = require('puppeteer');


module.exports = async function startBrowser() {
  const options = {
    args: [
      // '--no-sandbox',
      // '--disable-setuid-sandbox',
      // '--disable-dev-shm-usage',
      // '--disable-accelerated-2d-canvas',
      // '--disable-gpu'
    ],
    headless: false // true
  };

  return await puppeteer.launch(options);
};

Voici le test que j'utilise:

'use strict';
/* global describe: false, before: false, it: false,
    beforeEach: false, afterEach: false, after: false, window: false, document: false */

const assert = require('assert').strict;
const startBrowser = require('../');
const util = require('util');



describe('Puppeteer', function() {
  let pageManager;

  it('start the browser', async function() {
    this.timeout(10000);

    console.time('startBrowser');
    const browser = await startBrowser();
    console.timeEnd('startBrowser');
    assert(browser);

    console.time('closeBrowser');
    await browser.close();
    console.timeEnd('closeBrowser');
  });

});

J'ai créé un référentiel avec ce code et test ici . nyc _mocha ./test/*.test.js s'exécute en ~ 3500 ms, mocha ./test/*.test.js ne prend que 130 ms.

Ce que j'ai essayé jusqu'à présent:

  • combinaison différente d'inclure/exclure des drapeaux nyc
  • mise à jour vers les dernières versions de Puppeteer, nyc et mocha
  • supprimer mes arguments Puppeteer
  • recherche de problèmes liés aux marionnettistes et à Istanbul (avec peu de succès)
  • en essayant headless: true
  • contourner tous les proxys, voir ce numéro de marionnettiste

Que puis-je faire pour que les tests avec couverture soient aussi rapides que les tests seuls?

En utilisant:

  • Ubuntu 19.04
  • node.js 10.15.3
6
seasick

enter image description here Veuillez essayer ceci également.

'use strict'
const puppeteer = require('puppeteer')

module.exports = async function startBrowser() {
  const options = {
    args: [
      '--no-sandbox',
      '--disable-setuid-sandbox',
      '--disable-dev-shm-usage',
      '--disable-accelerated-2d-canvas',
      '--no-first-run',
      '--no-zygote',
      '--single-process', // <- this one doesn't works in Windows
      '--disable-gpu'
    ],
    headless: true
  }

  return await puppeteer.launch(options)
}
0
Edi Imanto