Protractor-ejecutar múltiples pruebas en paralelo en diferentes navegadores


No puedo encontrar ninguna información sobre cómo configurar esto, pero parece un concepto bastante básico, así que estoy seguro de que hay una respuesta por ahí.

Sé cómo ejecutar protractor en diferentes navegadores estableciendo la propiedad browserName del objeto capabilities en la configuración. Y eso está funcionando muy bien. Puedo configurarlo en 'chrome' o 'firefox' o lo que sea que necesite y funciona como se esperaba. Pero la única manera de ejecutar un único conjunto de pruebas contra varios navegadores (por lo que sé) es crear por separado archivos de configuración, cada uno con un browserName diferente y luego ejecute cada navegador con su propia configuración. Esto funciona, pero es realmente lento porque las pruebas se ejecutan en secuencia, en lugar de simultáneamente.

¿Hay alguna forma de ejecutarlo en varios navegadores en paralelo?

¿Se puede hacer en SauceLabs? ¿o incluso usando una rejilla de Selenio local?

Solo estamos tratando de simplificar nuestro proceso de prueba y esto sería de gran ayuda. Cualquier sugerencia o información sería muy apreciada. Gracias de antemano.

Author: tennisgent, 2013-12-20

6 answers

Actualización Feb 2014 - Esta respuesta ya no es válida. Utilice la respuesta de Paolo Moretti a continuación.


Puede haber una mejor manera de hacer esto, pero actualmente solo estoy ejecutando estas tareas como tareas concurrentes.

1) Añadir el plugin concurrente de grunt

npm install grunt-concurrent --save-dev

2) Agregue una tarea para cada navegador bajo grunt.initConfig. Podemos añadir el navegador como un arg para reutilizar nuestro archivo de configuración.

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

3) Regístrelas como tareas;

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

4) Cree su concurrente tarea bajo grunt.initConfig

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

5) Añadir la tarea grunt para concurrent

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

Y ejecutar eso debería darte pruebas simultáneas de transportador.

 20
Author: Brian F,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-09 23:58:45

Hay una nueva opción llamada multiCapabilities para eso:

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

Aquí hay un ejemplo completo.

 58
Author: Paolo Moretti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-20 14:40:21

Usando multiCapabilities ejecutaremos todas las pruebas en cada uno de los navegadores. Así que la configuración a continuación se ejecutará cada prueba dos veces, una vez en Firefox y una vez en Chrome:

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

Si prefiere que cada archivo de prueba se ejecute una sola vez, pero se divida entre varios navegadores, use la opción splitTestsBetweenCapabilities:

splitTestsBetweenCapabilities: true

Esta entrada del blog entra en más detalles sobre el splitTestsBetweenCapabilities

 13
Author: Paul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-16 18:41:05

Tuve el mismo problema y he encontrado que están agregando la característica para la ejecución paralela mientras hablamos! : D

Echa un vistazo a esto: https://github.com/angular/protractor/pull/492

Ese cambio se fusionó con master, pero uno más nuevo (512) sigue abierto. Tan pronto como lo fusionan con master (debe ser hoy o mañana de acuerdo con la discusión en la pull request) debe estar en sus manos: D.

 1
Author: Diego Pamio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-13 03:44:50

BrowserStack también se puede utilizar para este propósito. Tiene una guía de inicio bastante detallada: https://www.browserstack.com/automate/node , pero no es libre

 1
Author: Sergey Teplyakov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-25 05:26:09

Así es como logro esto. Simplemente agregue la sección a continuación a la conf.archivo js:

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

shardTestFiles = true hace que cada archivo spec se ejecute en una nueva instancia del navegador. maxInstances es el número máximo de navegadores que se pueden abrir al mismo tiempo.

 1
Author: exbuddha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-07 22:17:17