web-dev-qa-db-fra.com

Rapporteur - exécuter plusieurs tests en parallèle sur différents navigateurs

Je ne peux trouver aucune information sur la manière de mettre cela en place, mais cela semble être un concept assez basique, alors je suis sûr qu'il existe une réponse. 

Je sais comment exécuter rapporteur sur différents navigateurs en définissant la propriété browserName de l'objet capabilities dans la configuration. Et ça marche très bien. Je peux le régler sur 'chrome' ou 'firefox' ou tout ce dont j'ai besoin et il fonctionne comme prévu. Mais la seule façon de lancer une seule suite de tests sur plusieurs navigateurs (pour autant que je sache) est de créer des fichiers de configuration séparés, chacun avec une browserName différente, puis d'exécuter chaque navigateur avec sa propre configuration. Cela fonctionne, mais c'est très lent car les tests s'exécutent ensuite en séquence, plutôt que simultanément. 

Est-il possible de l'exécuter sur plusieurs navigateurs en parallèle?

Peut-on le faire sur SauceLabs? ou même en utilisant une grille de sélénium locale?

Nous essayons simplement de rationaliser notre processus de test et ce serait une aide énorme. Toute suggestion ou information serait grandement appréciée. Merci d'avance.

35
tennisgent

Mise à jour février 2014 - Cette réponse n'est plus valide. Utilisez la réponse de Paolo Moretti ci-dessous.


Il y a peut-être une meilleure façon de faire cela, mais actuellement, je ne fais que les exécuter en tant que tâches Grunt simultanées.

1) Ajouter le plugin grunt concurrent

npm install grunt-concurrent --save-dev

2) Ajoutez une tâche pour chaque navigateur sous grunt.initConfig. Nous pouvons ajouter le navigateur comme argument pour réutiliser notre fichier de configuration.

protractor: {
        options: {
            keepAlive: true,
            singleRun: false,
            configFile: "test/protractor.conf.js"
        },
        run_chrome: {
            options: {
                args: {
                    browser: "chrome"
                }
            }
        },
        run_firefox: {
            options: {
                args: {
                    browser: "firefox"
                }
            }
        }
    },

3) Enregistrez-les en tant que tâches.

grunt.registerTask('protractor-chrome', ['protractor:run_chrome']);
grunt.registerTask('protractor-firefox', ['protractor:run_firefox']);

4) Créez votre tâche simultanée sous grunt.initConfig

concurrent: {
        protractor_test: ['protractor-chrome', 'protractor-firefox']
    },

5) Ajouter la tâche Grunt pour concurrent

grunt.registerTask('protractor-e2e', ['concurrent:protractor_test']);

Et exécuter cela devrait vous donner des tests concordants.

22
Brian F

Il y a une nouvelle option appelée multiCapabilities pour cela:

multiCapabilities: [{
  'browserName': 'chrome'
}, {
  'browserName': 'firefox'
}],

Voici un exemple complet .

62
Paolo Moretti

utiliser multiCapabilities lancera tous les tests dans chacun des navigateurs. Ainsi, la configuration ci-dessous exécutera chaque test deux fois, une fois dans Firefox et une fois dans Chrome:

multiCapabilities: [{
  'browserName': 'chrome'
}, {
  'browserName': 'firefox'
}],

Si vous préférez que chaque fichier de test ne soit exécuté qu'une seule fois, mais divisé en plusieurs navigateurs, utilisez l'option splitTestsBetweenCapabilities:

splitTestsBetweenCapabilities: true

Cet article de blog entre dans les détails de la variable splitTestsBetweenCapabilities

14
Paul

BrowserStack peut également être utilisé à cette fin. Il a un guide de démarrage assez détaillé: https://www.browserstack.com/automate/node , mais ce n'est pas gratuit

1
Sergey Teplyakov

C'est comme ça que je réalise ça. Ajoutez simplement la section ci-dessous au fichier conf.js:

capabilities: {
  browserName: 'chrome',
  shardTestFiles: true,
  maxInstances: 1
}

shardTestFiles = true entraîne l’exécution de chaque fichier de spécifications dans une nouvelle instance de navigateur. maxInstances est le nombre maximum de navigateurs pouvant être ouverts en même temps.

1
exbuddha

J'ai eu le même problème et j'ai constaté qu'ils ajoutaient la fonctionnalité pour une exécution parallèle en ce moment même! :RÉ

Jetez un oeil à ceci: https://github.com/angular/protractor/pull/492

Ce changement a été fusionné pour maîtriser, mais un plus récent (512) est toujours ouvert. Dès qu’ils le fusionnent pour le maîtriser (devrait être aujourd’hui ou demain, selon la discussion de la demande de tirage), il devrait être entre vos mains:.

1
Diego Pamio