Общее время выполнения теста с использованием karma runner

В настоящее время мы перешли на удаленное выполнение модульных тестов в browserstack в нескольких браузерах в разных операционных системах с помощью karma-browserstack-launcher плагин.

В настоящее время вывод тестового прогона выглядит так:

$ grunt unit:remote
Running "unit:remote" task

Running "karma:remote" (karma) task
INFO [karma]: Karma v0.12.23 server started at http://localhost:9876/
INFO [launcher]: Starting browser firefox 21.0 (OS X Mountain Lion) on BrowserStack
INFO [launcher]: Starting browser iPhone 5 (ios 6.0) on BrowserStack
INFO [launcher]: Starting browser android (android 4.1) on BrowserStack
INFO [launcher]: Starting browser ie 8.0 (Windows 7) on BrowserStack
INFO [launcher]: Starting browser ie 9.0 (Windows 7) on BrowserStack
INFO [launcher]: Starting browser chrome latest (OS X Mavericks) on BrowserStack
INFO [launcher]: Starting browser PhantomJS

PhantomJS 1.9.7 (Mac OS X): Executed 70 of 70 SUCCESS (0.063 secs / 0.275 secs)
Chrome 37.0.2062 (Mac OS X 10.9.0): Executed 70 of 70 SUCCESS (0 secs / 0.452 secs)
Mobile Safari 6.0.0 (iOS 6.1.4): Executed 70 of 70 SUCCESS (1.161 secs / 0.839 secs)
Firefox 21.0.0 (Mac OS X 10.8): Executed 70 of 70 SUCCESS (1.175 secs / 0.496 secs)
...

Сообщается время выполнения для каждого браузера.

Есть ли способ увидеть общее время выполнения на консоли?


К вашему сведению, вот конфигурация кармы, которую мы используем.


person alecxe    schedule 15.09.2014    source источник


Ответы (2)


Я разветвил плагин karma и добавил параметр extraLog в karma browserStack config для получения дополнительной информации после завершения всех ваших браузеров, включая общее время выполнения и чистое время всех ваших браузеры.

В основном я использую browser_complete event из emitter, которые дают мне total и net время браузера.

emitter.on('browser_complete', function (data) {
  result.browsers.push({ name: data.name, time: data.lastResult.totalTime });
  result.time.net += data.lastResult.netTime;
  result.time.total += data.lastResult.totalTime; //this is what we want
});

Используя здесь три браузера, пример вывода (извините, я еще не дизайнер):

экран

Это позволяет получить более точный результат по сравнению с временным ворчанием.

Вы можете просмотреть код здесь на странице feature-extra-logs.

Я действительно не знаю, как вы хотите (и как лучше всего) развернуть это у вас, потому что я не думаю, что это достаточно интересно, чтобы быть объединенным с восходящим потоком, но я могу ошибаться.

person Balthazar    schedule 23.09.2014
comment
Очень мило, что вы реализовали эту функцию! Я пробовал - это именно то, о чем я спрашивал. Я думаю, что это может быть полезной функцией в karma-browserstack-launcher. Большое спасибо! - person alecxe; 24.09.2014
comment
Не за что :) Хм, тогда я должен посмотреть, смогу ли я открыть PR в репозитории, но я боюсь получить отказ, в основном из-за моего форматирования, которое может не всем понравиться. Но я буду держать вас на связи! - person Balthazar; 24.09.2014
comment
Еще раз большое спасибо за приложенные усилия. Я думаю, было бы неплохо создать проблему на странице karma-browserstack-launcher на github и посмотреть, что думают об этой функции сопровождающие. Я думаю, что я не единственный, кому не хватает такого функционала. Вы хотите, чтобы я создал вопрос, или вы собирались отправить им PR с изменениями? Спасибо. - person alecxe; 27.09.2014
comment
Я думаю, что я рассмотрю, что я могу улучшить, и отправлю PR, в котором спрашивают о форматировании, имени параметра и использовании мела или нет. Наверное, сегодня или завтра. Рад, что помог! :) - person Balthazar; 27.09.2014
comment
@alecxe здесь — PR для справки - person Balthazar; 15.10.2014
comment
Спасибо, что сообщили мне об этом. Был бы рад, если бы это объединилось. - person alecxe; 16.10.2014

На самом деле это не зависит от кармы, но вы можете использовать https://github.com/sindresorhus/time-grunt чтобы увидеть, сколько времени занимает вся задача unit:remote.

Просто скопировав его из readme.md, вы можете установить его с помощью

npm install --save-dev time-grunt

А затем отредактируйте файл grunt как

// Gruntfile.js
module.exports = function (grunt) {
  // require it at the top and pass in the grunt instance
  require('time-grunt')(grunt);

  grunt.initConfig();
}

Затем, когда вы запускаете задачи ворчания, вы должны получить вывод, например:

пример временного ворчания

person Michal Charemza    schedule 21.09.2014
comment
Строго говоря, это обходной путь, но о нем действительно полезно знать. Большое спасибо, что подняли этот вопрос. - person alecxe; 22.09.2014