Транспортир - одновременное выполнение нескольких тестов в разных браузерах
Я не могу найти какую-либо информацию о том, как это установить, но это выглядит довольно простой концепцией, поэтому я уверен, что там есть ответ.
Я знаю, как запустить транспортир в разных браузерах, установив свойство browserName
объекта capabilities
в config. И это отлично работает. Я могу установить его на 'chrome'
или 'firefox'
или что мне нужно, и он работает так, как ожидалось. Но единственный способ запустить один тестовый пакет для нескольких браузеров (насколько мне известно) - создать отдельные файлы конфигурации, каждый с другим browserName
, а затем запустить каждый браузер со своей собственной конфигурацией. Это работает, но его очень медленно, потому что тесты затем выполняются последовательно, а не одновременно.
Есть ли способ запустить его на нескольких браузерах параллельно?
Можно ли это сделать на SauceLabs? или даже с использованием локальной селеновой сетки?
Мы просто пытаемся оптимизировать наш процесс тестирования, и это будет огромной помощью. Любые предложения или информация были бы весьма признательны. Спасибо заранее.
Ответы
Ответ 1
Update Feb 2014 - Этот ответ больше не действителен. Используйте Паоло Моретти ниже.
Там может быть лучший способ сделать это, но в настоящее время я просто выполняю их как параллельные задачи Grunt.
1) Добавьте параллельный плагин grunt
npm install grunt-concurrent --save-dev
2) Добавьте задачу для каждого браузера под grunt.initConfig. Мы можем добавить браузер в качестве аргумента для повторного использования нашего файла конфигурации.
protractor: {
options: {
keepAlive: true,
singleRun: false,
configFile: "test/protractor.conf.js"
},
run_chrome: {
options: {
args: {
browser: "chrome"
}
}
},
run_firefox: {
options: {
args: {
browser: "firefox"
}
}
}
},
3) Зарегистрируйте их как задачи;
grunt.registerTask('protractor-chrome', ['protractor:run_chrome']);
grunt.registerTask('protractor-firefox', ['protractor:run_firefox']);
4) Создайте свою параллельную задачу в grunt.initConfig
concurrent: {
protractor_test: ['protractor-chrome', 'protractor-firefox']
},
5) Добавьте задачу grunt для параллельного
grunt.registerTask('protractor-e2e', ['concurrent:protractor_test']);
И выполнение, которое должно дать вам параллельные тесты транспортира.
Ответ 2
Появилась новая опция multiCapabilities
для этого:
multiCapabilities: [{
'browserName': 'chrome'
}, {
'browserName': 'firefox'
}],
Здесь полный пример.
Ответ 3
с помощью multiCapabilities
будут запускать все тесты в каждом из браузеров. Таким образом, приведенная ниже конфигурация будет запускать каждый тест дважды, один раз в Firefox и один раз в Chrome:
multiCapabilities: [{
'browserName': 'chrome'
}, {
'browserName': 'firefox'
}],
Если вы предпочитаете, чтобы каждый тестовый файл запускался один раз, но разделялся между несколькими браузерами, используйте параметр splitTestsBetweenCapabilities
:
splitTestsBetweenCapabilities: true
В этом сообщении в блоге подробно рассматривается splitTestsBetweenCapabilities
Ответ 4
У меня была такая же проблема, и я обнаружил, что они добавляют функцию для параллельного выполнения, когда мы говорим!: D
Взгляните на это: https://github.com/angular/protractor/pull/492
Это изменение было объединено с мастером, но новый (512) все еще открыт. Как только они сливаются, чтобы овладеть (должно быть сегодня или завтра в соответствии с обсуждением в запросе на растяжение), это должно быть в ваших руках: D.
Ответ 5
BrowserStack также может использоваться для этих целей. Он имеет довольно подробное руководство по началу работы: https://www.browserstack.com/automate/node, но он не является бесплатным
Ответ 6
Вот как я это достигаю. Просто добавьте раздел ниже в файл conf.js:
capabilities: {
browserName: 'chrome',
shardTestFiles: true,
maxInstances: 1
}
shardTestFiles = true
заставляет каждый файл спецификации запускаться в новом экземпляре браузера. maxInstances
- максимальное количество браузеров, которые могут быть открыты одновременно.