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.
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.
Il y a une nouvelle option appelée multiCapabilities
pour cela:
multiCapabilities: [{
'browserName': 'chrome'
}, {
'browserName': 'firefox'
}],
Voici un exemple complet .
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
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
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.
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:.