2015-07-25 2 views
4

Я хотел бы использовать модуль Benchmark.js для тестирования асинхронного кода, написанного на узле.js. В частности, я хочу запустить ~ 10 000 запросов на два сервера (один написан на узле, один написан на PHP) и отслеживать, сколько времени потребуется для каждого сервера для выполнения всех запросов.Benchmark Asynchronous Code (Benchmark.js, Node.js)

Я планировал написать простой скрипт узла для запуска этих запросов с помощью Benchmark, но я немного запутался в том, как использовать его с асинхронным кодом. Обычно в узловых модулях есть какой-то обратный вызов, который вы вызываете, когда ваш асинхронный код завершен, или обещание возвращается из функции и т. Д. Но с Benchmark, из всего, что я читаю в документах, это не похоже для обработки асинхронизации вообще.

Кто-нибудь знает, что я должен делать или смотреть? Я могу написать тест вручную, если потребуется; это просто похоже на достаточно распространенный случай, когда Benchmark или другие, возможно, уже внедрили его в своих тестовых библиотеках профессионального уровня.

Спасибо за любую сторону, ~ Nate

ответ

4

Это не очень хорошо задокументированы, но вот PoC:

var Benchmark = require('benchmark'); 
var suite  = new Benchmark.Suite(); 

suite.add(new Benchmark('foo', { 
    // a flag to indicate the benchmark is deferred 
    defer : true, 

    // benchmark test function 
    fn : function(deferred) { 
    setTimeout(function() { 
     deferred.resolve(); 
    }, 200); 
    } 
})).on('complete', function() { 
    console.log(this[0].stats); 
}).run(); 

Benchmark.js v2 слегка изменяет синтаксис:

var Benchmark = require('benchmark'); 
var suite = new Benchmark.Suite; 

suite.add('foo', { 
    defer: true, 
    fn: function (deferred) { 
    setTimeout(function() { 
     deferred.resolve(); 
    }, 200); 
    } 
}).on('complete', function() { 
    console.log(this[0].stats) 
}).run() 
+0

О, ладно - я видел отложенный объект; не понимал, для чего это было. Благодаря! – opensourcejunkie

+1

Да, как я уже сказал, это не очень хорошо документировано :-(FWIW, я просто нажал первую версию ['benchr'] (https://github.com/robertklep/node-benchr), которая является мокко- как обертка вокруг Benchmark.js, чтобы сделать вещи немного более легкими, но все равно WIP. – robertklep

+0

О, потрясающе - я люблю мокко, и ваш синтаксис определенно очень знаком. Я отдам ему все. и bencha? – opensourcejunkie