benchpress
Version:
Benchpress - a framework for e2e performance tests
89 lines • 13.4 kB
JavaScript
import { bind, provide, ReflectiveInjector } from 'angular2/src/core/di';
import { isPresent, isBlank } from 'angular2/src/facade/lang';
import { PromiseWrapper } from 'angular2/src/facade/async';
import { Sampler } from './sampler';
import { ConsoleReporter } from './reporter/console_reporter';
import { MultiReporter } from './reporter/multi_reporter';
import { RegressionSlopeValidator } from './validator/regression_slope_validator';
import { SizeValidator } from './validator/size_validator';
import { Validator } from './validator';
import { PerflogMetric } from './metric/perflog_metric';
import { MultiMetric } from './metric/multi_metric';
import { ChromeDriverExtension } from './webdriver/chrome_driver_extension';
import { FirefoxDriverExtension } from './webdriver/firefox_driver_extension';
import { IOsDriverExtension } from './webdriver/ios_driver_extension';
import { WebDriverExtension } from './web_driver_extension';
import { SampleDescription } from './sample_description';
import { WebDriverAdapter } from './web_driver_adapter';
import { Reporter } from './reporter';
import { Metric } from './metric';
import { Options } from './common_options';
/**
* The Runner is the main entry point for executing a sample run.
* It provides defaults, creates the injector and calls the sampler.
*/
export class Runner {
constructor(defaultBindings = null) {
if (isBlank(defaultBindings)) {
defaultBindings = [];
}
this._defaultBindings = defaultBindings;
}
sample({ id, execute, prepare, microMetrics, bindings }) {
var sampleBindings = [
_DEFAULT_PROVIDERS,
this._defaultBindings,
bind(Options.SAMPLE_ID).toValue(id),
bind(Options.EXECUTE).toValue(execute)
];
if (isPresent(prepare)) {
sampleBindings.push(bind(Options.PREPARE).toValue(prepare));
}
if (isPresent(microMetrics)) {
sampleBindings.push(bind(Options.MICRO_METRICS).toValue(microMetrics));
}
if (isPresent(bindings)) {
sampleBindings.push(bindings);
}
var inj = ReflectiveInjector.resolveAndCreate(sampleBindings);
var adapter = inj.get(WebDriverAdapter);
return PromiseWrapper
.all([adapter.capabilities(), adapter.executeScript('return window.navigator.userAgent;')])
.then((args) => {
var capabilities = args[0];
var userAgent = args[1];
// This might still create instances twice. We are creating a new injector with all the
// providers.
// Only WebDriverAdapter is reused.
// TODO vsavkin consider changing it when toAsyncFactory is added back or when child
// injectors are handled better.
var injector = ReflectiveInjector.resolveAndCreate([
sampleBindings,
bind(Options.CAPABILITIES).toValue(capabilities),
bind(Options.USER_AGENT).toValue(userAgent),
provide(WebDriverAdapter, { useValue: adapter })
]);
var sampler = injector.get(Sampler);
return sampler.sample();
});
}
}
var _DEFAULT_PROVIDERS = [
Options.DEFAULT_PROVIDERS,
Sampler.BINDINGS,
ConsoleReporter.BINDINGS,
RegressionSlopeValidator.BINDINGS,
SizeValidator.BINDINGS,
ChromeDriverExtension.BINDINGS,
FirefoxDriverExtension.BINDINGS,
IOsDriverExtension.BINDINGS,
PerflogMetric.BINDINGS,
SampleDescription.BINDINGS,
MultiReporter.createBindings([ConsoleReporter]),
MultiMetric.createBindings([PerflogMetric]),
Reporter.bindTo(MultiReporter),
Validator.bindTo(RegressionSlopeValidator),
WebDriverExtension.bindTo([ChromeDriverExtension, FirefoxDriverExtension, IOsDriverExtension]),
Metric.bindTo(MultiMetric),
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGlmZmluZ19wbHVnaW5fd3JhcHBlci1vdXRwdXRfcGF0aC14QkxJQnJWUi50bXAvYmVuY2hwcmVzcy9zcmMvcnVubmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJPQUFPLEVBQVcsSUFBSSxFQUFFLE9BQU8sRUFBWSxrQkFBa0IsRUFBQyxNQUFNLHNCQUFzQjtPQUNuRixFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUMsTUFBTSwwQkFBMEI7T0FDcEQsRUFBQyxjQUFjLEVBQUMsTUFBTSwyQkFBMkI7T0FFakQsRUFBQyxPQUFPLEVBQWMsTUFBTSxXQUFXO09BQ3ZDLEVBQUMsZUFBZSxFQUFDLE1BQU0sNkJBQTZCO09BQ3BELEVBQUMsYUFBYSxFQUFDLE1BQU0sMkJBQTJCO09BQ2hELEVBQUMsd0JBQXdCLEVBQUMsTUFBTSx3Q0FBd0M7T0FDeEUsRUFBQyxhQUFhLEVBQUMsTUFBTSw0QkFBNEI7T0FDakQsRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhO09BQzlCLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCO09BQzlDLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCO09BQzFDLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxxQ0FBcUM7T0FDbEUsRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHNDQUFzQztPQUNwRSxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0NBQWtDO09BQzVELEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx3QkFBd0I7T0FDbEQsRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQjtPQUMvQyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sc0JBQXNCO09BQzlDLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWTtPQUM1QixFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVU7T0FDeEIsRUFBQyxPQUFPLEVBQUMsTUFBTSxrQkFBa0I7QUFFeEM7OztHQUdHO0FBQ0g7SUFFRSxZQUFZLGVBQWUsR0FBZSxJQUFJO1FB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LGtCQUFrQixDQUFDLFFBQVE7SUFDM0IsYUFBYSxDQUFDLFFBQVE7SUFDdEIsaUJBQWlCLENBQUMsUUFBUTtJQUMxQixhQUFhLENBQUMsY0FBYyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDL0MsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRTNDLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO0lBQzlCLFNBQVMsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUM7SUFDMUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUM5RixNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztDQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RvciwgYmluZCwgcHJvdmlkZSwgUHJvdmlkZXIsIFJlZmxlY3RpdmVJbmplY3Rvcn0gZnJvbSAnYW5ndWxhcjIvc3JjL2NvcmUvZGknO1xuaW1wb3J0IHtpc1ByZXNlbnQsIGlzQmxhbmt9IGZyb20gJ2FuZ3VsYXIyL3NyYy9mYWNhZGUvbGFuZyc7XG5pbXBvcnQge1Byb21pc2VXcmFwcGVyfSBmcm9tICdhbmd1bGFyMi9zcmMvZmFjYWRlL2FzeW5jJztcblxuaW1wb3J0IHtTYW1wbGVyLCBTYW1wbGVTdGF0ZX0gZnJvbSAnLi9zYW1wbGVyJztcbmltcG9ydCB7Q29uc29sZVJlcG9ydGVyfSBmcm9tICcuL3JlcG9ydGVyL2NvbnNvbGVfcmVwb3J0ZXInO1xuaW1wb3J0IHtNdWx0aVJlcG9ydGVyfSBmcm9tICcuL3JlcG9ydGVyL211bHRpX3JlcG9ydGVyJztcbmltcG9ydCB7UmVncmVzc2lvblNsb3BlVmFsaWRhdG9yfSBmcm9tICcuL3ZhbGlkYXRvci9yZWdyZXNzaW9uX3Nsb3BlX3ZhbGlkYXRvcic7XG5pbXBvcnQge1NpemVWYWxpZGF0b3J9IGZyb20gJy4vdmFsaWRhdG9yL3NpemVfdmFsaWRhdG9yJztcbmltcG9ydCB7VmFsaWRhdG9yfSBmcm9tICcuL3ZhbGlkYXRvcic7XG5pbXBvcnQge1BlcmZsb2dNZXRyaWN9IGZyb20gJy4vbWV0cmljL3BlcmZsb2dfbWV0cmljJztcbmltcG9ydCB7TXVsdGlNZXRyaWN9IGZyb20gJy4vbWV0cmljL211bHRpX21ldHJpYyc7XG5pbXBvcnQge0Nocm9tZURyaXZlckV4dGVuc2lvbn0gZnJvbSAnLi93ZWJkcml2ZXIvY2hyb21lX2RyaXZlcl9leHRlbnNpb24nO1xuaW1wb3J0IHtGaXJlZm94RHJpdmVyRXh0ZW5zaW9ufSBmcm9tICcuL3dlYmRyaXZlci9maXJlZm94X2RyaXZlcl9leHRlbnNpb24nO1xuaW1wb3J0IHtJT3NEcml2ZXJFeHRlbnNpb259IGZyb20gJy4vd2ViZHJpdmVyL2lvc19kcml2ZXJfZXh0ZW5zaW9uJztcbmltcG9ydCB7V2ViRHJpdmVyRXh0ZW5zaW9ufSBmcm9tICcuL3dlYl9kcml2ZXJfZXh0ZW5zaW9uJztcbmltcG9ydCB7U2FtcGxlRGVzY3JpcHRpb259IGZyb20gJy4vc2FtcGxlX2Rlc2NyaXB0aW9uJztcbmltcG9ydCB7V2ViRHJpdmVyQWRhcHRlcn0gZnJvbSAnLi93ZWJfZHJpdmVyX2FkYXB0ZXInO1xuaW1wb3J0IHtSZXBvcnRlcn0gZnJvbSAnLi9yZXBvcnRlcic7XG5pbXBvcnQge01ldHJpY30gZnJvbSAnLi9tZXRyaWMnO1xuaW1wb3J0IHtPcHRpb25zfSBmcm9tICcuL2NvbW1vbl9vcHRpb25zJztcblxuLyoqXG4gKiBUaGUgUnVubmVyIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBleGVjdXRpbmcgYSBzYW1wbGUgcnVuLlxuICogSXQgcHJvdmlkZXMgZGVmYXVsdHMsIGNyZWF0ZXMgdGhlIGluamVjdG9yIGFuZCBjYWxscyB0aGUgc2FtcGxlci5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bm5lciB7XG4gIHByaXZhdGUgX2RlZmF1bHRCaW5kaW5nczogUHJvdmlkZXJbXTtcbiAgY29uc3RydWN0b3IoZGVmYXVsdEJpbmRpbmdzOiBQcm92aWRlcltdID0gbnVsbCkge1xuICAgIGlmIChpc0JsYW5rKGRlZmF1bHRCaW5kaW5ncykpIHtcbiAgICAgIGRlZmF1bHRCaW5kaW5ncyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLl9kZWZhdWx0QmluZGluZ3MgPSBkZWZhdWx0QmluZGluZ3M7XG4gIH1cblxuICBzYW1wbGUoe2lkLCBleGVjdXRlLCBwcmVwYXJlLCBtaWNyb01ldHJpY3MsIGJpbmRpbmdzfTpcbiAgICAgICAgICAgICB7aWQ6IHN0cmluZywgZXhlY3V0ZT86IGFueSwgcHJlcGFyZT86IGFueSwgbWljcm9NZXRyaWNzPzogYW55LCBiaW5kaW5ncz86IGFueX0pOlxuICAgICAgUHJvbWlzZTxTYW1wbGVTdGF0ZT4ge1xuICAgIHZhciBzYW1wbGVCaW5kaW5ncyA9IFtcbiAgICAgIF9ERUZBVUxUX1BST1ZJREVSUyxcbiAgICAgIHRoaXMuX2RlZmF1bHRCaW5kaW5ncyxcbiAgICAgIGJpbmQoT3B0aW9ucy5TQU1QTEVfSUQpLnRvVmFsdWUoaWQpLFxuICAgICAgYmluZChPcHRpb25zLkVYRUNVVEUpLnRvVmFsdWUoZXhlY3V0ZSlcbiAgICBdO1xuICAgIGlmIChpc1ByZXNlbnQocHJlcGFyZSkpIHtcbiAgICAgIHNhbXBsZUJpbmRpbmdzLnB1c2goYmluZChPcHRpb25zLlBSRVBBUkUpLnRvVmFsdWUocHJlcGFyZSkpO1xuICAgIH1cbiAgICBpZiAoaXNQcmVzZW50KG1pY3JvTWV0cmljcykpIHtcbiAgICAgIHNhbXBsZUJpbmRpbmdzLnB1c2goYmluZChPcHRpb25zLk1JQ1JPX01FVFJJQ1MpLnRvVmFsdWUobWljcm9NZXRyaWNzKSk7XG4gICAgfVxuICAgIGlmIChpc1ByZXNlbnQoYmluZGluZ3MpKSB7XG4gICAgICBzYW1wbGVCaW5kaW5ncy5wdXNoKGJpbmRpbmdzKTtcbiAgICB9XG5cbiAgICB2YXIgaW5qID0gUmVmbGVjdGl2ZUluamVjdG9yLnJlc29sdmVBbmRDcmVhdGUoc2FtcGxlQmluZGluZ3MpO1xuICAgIHZhciBhZGFwdGVyID0gaW5qLmdldChXZWJEcml2ZXJBZGFwdGVyKTtcblxuICAgIHJldHVybiBQcm9taXNlV3JhcHBlclxuICAgICAgICAuYWxsKFthZGFwdGVyLmNhcGFiaWxpdGllcygpLCBhZGFwdGVyLmV4ZWN1dGVTY3JpcHQoJ3JldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDsnKV0pXG4gICAgICAgIC50aGVuKChhcmdzKSA9PiB7XG4gICAgICAgICAgdmFyIGNhcGFiaWxpdGllcyA9IGFyZ3NbMF07XG4gICAgICAgICAgdmFyIHVzZXJBZ2VudCA9IGFyZ3NbMV07XG5cbiAgICAgICAgICAvLyBUaGlzIG1pZ2h0IHN0aWxsIGNyZWF0ZSBpbnN0YW5jZXMgdHdpY2UuIFdlIGFyZSBjcmVhdGluZyBhIG5ldyBpbmplY3RvciB3aXRoIGFsbCB0aGVcbiAgICAgICAgICAvLyBwcm92aWRlcnMuXG4gICAgICAgICAgLy8gT25seSBXZWJEcml2ZXJBZGFwdGVyIGlzIHJldXNlZC5cbiAgICAgICAgICAvLyBUT0RPIHZzYXZraW4gY29uc2lkZXIgY2hhbmdpbmcgaXQgd2hlbiB0b0FzeW5jRmFjdG9yeSBpcyBhZGRlZCBiYWNrIG9yIHdoZW4gY2hpbGRcbiAgICAgICAgICAvLyBpbmplY3RvcnMgYXJlIGhhbmRsZWQgYmV0dGVyLlxuICAgICAgICAgIHZhciBpbmplY3RvciA9IFJlZmxlY3RpdmVJbmplY3Rvci5yZXNvbHZlQW5kQ3JlYXRlKFtcbiAgICAgICAgICAgIHNhbXBsZUJpbmRpbmdzLFxuICAgICAgICAgICAgYmluZChPcHRpb25zLkNBUEFCSUxJVElFUykudG9WYWx1ZShjYXBhYmlsaXRpZXMpLFxuICAgICAgICAgICAgYmluZChPcHRpb25zLlVTRVJfQUdFTlQpLnRvVmFsdWUodXNlckFnZW50KSxcbiAgICAgICAgICAgIHByb3ZpZGUoV2ViRHJpdmVyQWRhcHRlciwge3VzZVZhbHVlOiBhZGFwdGVyfSlcbiAgICAgICAgICBdKTtcblxuICAgICAgICAgIHZhciBzYW1wbGVyID0gaW5qZWN0b3IuZ2V0KFNhbXBsZXIpO1xuICAgICAgICAgIHJldHVybiBzYW1wbGVyLnNhbXBsZSgpO1xuICAgICAgICB9KTtcbiAgfVxufVxuXG52YXIgX0RFRkFVTFRfUFJPVklERVJTID0gW1xuICBPcHRpb25zLkRFRkFVTFRfUFJPVklERVJTLFxuICBTYW1wbGVyLkJJTkRJTkdTLFxuICBDb25zb2xlUmVwb3J0ZXIuQklORElOR1MsXG4gIFJlZ3Jlc3Npb25TbG9wZVZhbGlkYXRvci5CSU5ESU5HUyxcbiAgU2l6ZVZhbGlkYXRvci5CSU5ESU5HUyxcbiAgQ2hyb21lRHJpdmVyRXh0ZW5zaW9uLkJJTkRJTkdTLFxuICBGaXJlZm94RHJpdmVyRXh0ZW5zaW9uLkJJTkRJTkdTLFxuICBJT3NEcml2ZXJFeHRlbnNpb24uQklORElOR1MsXG4gIFBlcmZsb2dNZXRyaWMuQklORElOR1MsXG4gIFNhbXBsZURlc2NyaXB0aW9uLkJJTkRJTkdTLFxuICBNdWx0aVJlcG9ydGVyLmNyZWF0ZUJpbmRpbmdzKFtDb25zb2xlUmVwb3J0ZXJdKSxcbiAgTXVsdGlNZXRyaWMuY3JlYXRlQmluZGluZ3MoW1BlcmZsb2dNZXRyaWNdKSxcblxuICBSZXBvcnRlci5iaW5kVG8oTXVsdGlSZXBvcnRlciksXG4gIFZhbGlkYXRvci5iaW5kVG8oUmVncmVzc2lvblNsb3BlVmFsaWRhdG9yKSxcbiAgV2ViRHJpdmVyRXh0ZW5zaW9uLmJpbmRUbyhbQ2hyb21lRHJpdmVyRXh0ZW5zaW9uLCBGaXJlZm94RHJpdmVyRXh0ZW5zaW9uLCBJT3NEcml2ZXJFeHRlbnNpb25dKSxcbiAgTWV0cmljLmJpbmRUbyhNdWx0aU1ldHJpYyksXG5dO1xuIl19