UNPKG

benchpress

Version:

Benchpress - a framework for e2e performance tests

89 lines 13.4 kB
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