UNPKG

benchpress

Version:

Benchpress - a framework for e2e performance tests

89 lines 13.7 kB
import { Injector, bind, provide } 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 = Injector.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 = Injector.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYmVuY2hwcmVzcy9zcmMvcnVubmVyLnRzIl0sIm5hbWVzIjpbIlJ1bm5lciIsIlJ1bm5lci5jb25zdHJ1Y3RvciIsIlJ1bm5lci5zYW1wbGUiXSwibWFwcGluZ3MiOiJPQUFPLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQVcsTUFBTSxzQkFBc0I7T0FDL0QsRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFDLE1BQU0sMEJBQTBCO09BQ3BELEVBQUMsY0FBYyxFQUFDLE1BQU0sMkJBQTJCO09BRWpELEVBQUMsT0FBTyxFQUFjLE1BQU0sV0FBVztPQUN2QyxFQUFDLGVBQWUsRUFBQyxNQUFNLDZCQUE2QjtPQUNwRCxFQUFDLGFBQWEsRUFBQyxNQUFNLDJCQUEyQjtPQUNoRCxFQUFDLHdCQUF3QixFQUFDLE1BQU0sd0NBQXdDO09BQ3hFLEVBQUMsYUFBYSxFQUFDLE1BQU0sNEJBQTRCO09BQ2pELEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYTtPQUM5QixFQUFDLGFBQWEsRUFBQyxNQUFNLHlCQUF5QjtPQUM5QyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVCQUF1QjtPQUMxQyxFQUFDLHFCQUFxQixFQUFDLE1BQU0scUNBQXFDO09BQ2xFLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxzQ0FBc0M7T0FDcEUsRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGtDQUFrQztPQUM1RCxFQUFDLGtCQUFrQixFQUFDLE1BQU0sd0JBQXdCO09BQ2xELEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxzQkFBc0I7T0FDL0MsRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHNCQUFzQjtPQUM5QyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVk7T0FDNUIsRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVO09BQ3hCLEVBQUMsT0FBTyxFQUFDLE1BQU0sa0JBQWtCO0FBRXhDOzs7R0FHRztBQUNIO0lBRUVBLFlBQVlBLGVBQWVBLEdBQWVBLElBQUlBO1FB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R0EsQ0FBQ0EsT0FBT0EsQ0FBQ0EsQ0FBQ0E7WUFDcENBLE1BQU1BLENBQUNBLE9BQU9BLENBQUNBLE1BQU1BLEVBQUVBLENBQUNBO1FBQzFCQSxDQUFDQSxDQUFDQSxDQUFDQTtJQUNUQSxDQUFDQTtBQUNIRixDQUFDQTtBQUVELElBQUksa0JBQWtCLEdBQUc7SUFDdkIsT0FBTyxDQUFDLGlCQUFpQjtJQUN6QixPQUFPLENBQUMsUUFBUTtJQUNoQixlQUFlLENBQUMsUUFBUTtJQUN4Qix3QkFBd0IsQ0FBQyxRQUFRO0lBQ2pDLGFBQWEsQ0FBQyxRQUFRO0lBQ3RCLHFCQUFxQixDQUFDLFFBQVE7SUFDOUIsc0JBQXNCLENBQUMsUUFBUTtJQUMvQixrQkFBa0IsQ0FBQyxRQUFRO0lBQzNCLGFBQWEsQ0FBQyxRQUFRO0lBQ3RCLGlCQUFpQixDQUFDLFFBQVE7SUFDMUIsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQy9DLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUUzQyxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztJQUM5QixTQUFTLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDO0lBQzFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDOUYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7Q0FDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0b3IsIGJpbmQsIHByb3ZpZGUsIFByb3ZpZGVyfSBmcm9tICdhbmd1bGFyMi9zcmMvY29yZS9kaSc7XG5pbXBvcnQge2lzUHJlc2VudCwgaXNCbGFua30gZnJvbSAnYW5ndWxhcjIvc3JjL2ZhY2FkZS9sYW5nJztcbmltcG9ydCB7UHJvbWlzZVdyYXBwZXJ9IGZyb20gJ2FuZ3VsYXIyL3NyYy9mYWNhZGUvYXN5bmMnO1xuXG5pbXBvcnQge1NhbXBsZXIsIFNhbXBsZVN0YXRlfSBmcm9tICcuL3NhbXBsZXInO1xuaW1wb3J0IHtDb25zb2xlUmVwb3J0ZXJ9IGZyb20gJy4vcmVwb3J0ZXIvY29uc29sZV9yZXBvcnRlcic7XG5pbXBvcnQge011bHRpUmVwb3J0ZXJ9IGZyb20gJy4vcmVwb3J0ZXIvbXVsdGlfcmVwb3J0ZXInO1xuaW1wb3J0IHtSZWdyZXNzaW9uU2xvcGVWYWxpZGF0b3J9IGZyb20gJy4vdmFsaWRhdG9yL3JlZ3Jlc3Npb25fc2xvcGVfdmFsaWRhdG9yJztcbmltcG9ydCB7U2l6ZVZhbGlkYXRvcn0gZnJvbSAnLi92YWxpZGF0b3Ivc2l6ZV92YWxpZGF0b3InO1xuaW1wb3J0IHtWYWxpZGF0b3J9IGZyb20gJy4vdmFsaWRhdG9yJztcbmltcG9ydCB7UGVyZmxvZ01ldHJpY30gZnJvbSAnLi9tZXRyaWMvcGVyZmxvZ19tZXRyaWMnO1xuaW1wb3J0IHtNdWx0aU1ldHJpY30gZnJvbSAnLi9tZXRyaWMvbXVsdGlfbWV0cmljJztcbmltcG9ydCB7Q2hyb21lRHJpdmVyRXh0ZW5zaW9ufSBmcm9tICcuL3dlYmRyaXZlci9jaHJvbWVfZHJpdmVyX2V4dGVuc2lvbic7XG5pbXBvcnQge0ZpcmVmb3hEcml2ZXJFeHRlbnNpb259IGZyb20gJy4vd2ViZHJpdmVyL2ZpcmVmb3hfZHJpdmVyX2V4dGVuc2lvbic7XG5pbXBvcnQge0lPc0RyaXZlckV4dGVuc2lvbn0gZnJvbSAnLi93ZWJkcml2ZXIvaW9zX2RyaXZlcl9leHRlbnNpb24nO1xuaW1wb3J0IHtXZWJEcml2ZXJFeHRlbnNpb259IGZyb20gJy4vd2ViX2RyaXZlcl9leHRlbnNpb24nO1xuaW1wb3J0IHtTYW1wbGVEZXNjcmlwdGlvbn0gZnJvbSAnLi9zYW1wbGVfZGVzY3JpcHRpb24nO1xuaW1wb3J0IHtXZWJEcml2ZXJBZGFwdGVyfSBmcm9tICcuL3dlYl9kcml2ZXJfYWRhcHRlcic7XG5pbXBvcnQge1JlcG9ydGVyfSBmcm9tICcuL3JlcG9ydGVyJztcbmltcG9ydCB7TWV0cmljfSBmcm9tICcuL21ldHJpYyc7XG5pbXBvcnQge09wdGlvbnN9IGZyb20gJy4vY29tbW9uX29wdGlvbnMnO1xuXG4vKipcbiAqIFRoZSBSdW5uZXIgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGV4ZWN1dGluZyBhIHNhbXBsZSBydW4uXG4gKiBJdCBwcm92aWRlcyBkZWZhdWx0cywgY3JlYXRlcyB0aGUgaW5qZWN0b3IgYW5kIGNhbGxzIHRoZSBzYW1wbGVyLlxuICovXG5leHBvcnQgY2xhc3MgUnVubmVyIHtcbiAgcHJpdmF0ZSBfZGVmYXVsdEJpbmRpbmdzOiBQcm92aWRlcltdO1xuICBjb25zdHJ1Y3RvcihkZWZhdWx0QmluZGluZ3M6IFByb3ZpZGVyW10gPSBudWxsKSB7XG4gICAgaWYgKGlzQmxhbmsoZGVmYXVsdEJpbmRpbmdzKSkge1xuICAgICAgZGVmYXVsdEJpbmRpbmdzID0gW107XG4gICAgfVxuICAgIHRoaXMuX2RlZmF1bHRCaW5kaW5ncyA9IGRlZmF1bHRCaW5kaW5ncztcbiAgfVxuXG4gIHNhbXBsZSh7aWQsIGV4ZWN1dGUsIHByZXBhcmUsIG1pY3JvTWV0cmljcywgYmluZGluZ3N9OlxuICAgICAgICAgICAgIHtpZDogc3RyaW5nLCBleGVjdXRlPzogYW55LCBwcmVwYXJlPzogYW55LCBtaWNyb01ldHJpY3M/OiBhbnksIGJpbmRpbmdzPzogYW55fSk6XG4gICAgICBQcm9taXNlPFNhbXBsZVN0YXRlPiB7XG4gICAgdmFyIHNhbXBsZUJpbmRpbmdzID0gW1xuICAgICAgX0RFRkFVTFRfUFJPVklERVJTLFxuICAgICAgdGhpcy5fZGVmYXVsdEJpbmRpbmdzLFxuICAgICAgYmluZChPcHRpb25zLlNBTVBMRV9JRCkudG9WYWx1ZShpZCksXG4gICAgICBiaW5kKE9wdGlvbnMuRVhFQ1VURSkudG9WYWx1ZShleGVjdXRlKVxuICAgIF07XG4gICAgaWYgKGlzUHJlc2VudChwcmVwYXJlKSkge1xuICAgICAgc2FtcGxlQmluZGluZ3MucHVzaChiaW5kKE9wdGlvbnMuUFJFUEFSRSkudG9WYWx1ZShwcmVwYXJlKSk7XG4gICAgfVxuICAgIGlmIChpc1ByZXNlbnQobWljcm9NZXRyaWNzKSkge1xuICAgICAgc2FtcGxlQmluZGluZ3MucHVzaChiaW5kKE9wdGlvbnMuTUlDUk9fTUVUUklDUykudG9WYWx1ZShtaWNyb01ldHJpY3MpKTtcbiAgICB9XG4gICAgaWYgKGlzUHJlc2VudChiaW5kaW5ncykpIHtcbiAgICAgIHNhbXBsZUJpbmRpbmdzLnB1c2goYmluZGluZ3MpO1xuICAgIH1cblxuICAgIHZhciBpbmogPSBJbmplY3Rvci5yZXNvbHZlQW5kQ3JlYXRlKHNhbXBsZUJpbmRpbmdzKTtcbiAgICB2YXIgYWRhcHRlciA9IGluai5nZXQoV2ViRHJpdmVyQWRhcHRlcik7XG5cbiAgICByZXR1cm4gUHJvbWlzZVdyYXBwZXJcbiAgICAgICAgLmFsbChbYWRhcHRlci5jYXBhYmlsaXRpZXMoKSwgYWRhcHRlci5leGVjdXRlU2NyaXB0KCdyZXR1cm4gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7JyldKVxuICAgICAgICAudGhlbigoYXJncykgPT4ge1xuICAgICAgICAgIHZhciBjYXBhYmlsaXRpZXMgPSBhcmdzWzBdO1xuICAgICAgICAgIHZhciB1c2VyQWdlbnQgPSBhcmdzWzFdO1xuXG4gICAgICAgICAgLy8gVGhpcyBtaWdodCBzdGlsbCBjcmVhdGUgaW5zdGFuY2VzIHR3aWNlLiBXZSBhcmUgY3JlYXRpbmcgYSBuZXcgaW5qZWN0b3Igd2l0aCBhbGwgdGhlXG4gICAgICAgICAgLy8gcHJvdmlkZXJzLlxuICAgICAgICAgIC8vIE9ubHkgV2ViRHJpdmVyQWRhcHRlciBpcyByZXVzZWQuXG4gICAgICAgICAgLy8gVE9ETyB2c2F2a2luIGNvbnNpZGVyIGNoYW5naW5nIGl0IHdoZW4gdG9Bc3luY0ZhY3RvcnkgaXMgYWRkZWQgYmFjayBvciB3aGVuIGNoaWxkXG4gICAgICAgICAgLy8gaW5qZWN0b3JzIGFyZSBoYW5kbGVkIGJldHRlci5cbiAgICAgICAgICB2YXIgaW5qZWN0b3IgPSBJbmplY3Rvci5yZXNvbHZlQW5kQ3JlYXRlKFtcbiAgICAgICAgICAgIHNhbXBsZUJpbmRpbmdzLFxuICAgICAgICAgICAgYmluZChPcHRpb25zLkNBUEFCSUxJVElFUykudG9WYWx1ZShjYXBhYmlsaXRpZXMpLFxuICAgICAgICAgICAgYmluZChPcHRpb25zLlVTRVJfQUdFTlQpLnRvVmFsdWUodXNlckFnZW50KSxcbiAgICAgICAgICAgIHByb3ZpZGUoV2ViRHJpdmVyQWRhcHRlciwge3VzZVZhbHVlOiBhZGFwdGVyfSlcbiAgICAgICAgICBdKTtcblxuICAgICAgICAgIHZhciBzYW1wbGVyID0gaW5qZWN0b3IuZ2V0KFNhbXBsZXIpO1xuICAgICAgICAgIHJldHVybiBzYW1wbGVyLnNhbXBsZSgpO1xuICAgICAgICB9KTtcbiAgfVxufVxuXG52YXIgX0RFRkFVTFRfUFJPVklERVJTID0gW1xuICBPcHRpb25zLkRFRkFVTFRfUFJPVklERVJTLFxuICBTYW1wbGVyLkJJTkRJTkdTLFxuICBDb25zb2xlUmVwb3J0ZXIuQklORElOR1MsXG4gIFJlZ3Jlc3Npb25TbG9wZVZhbGlkYXRvci5CSU5ESU5HUyxcbiAgU2l6ZVZhbGlkYXRvci5CSU5ESU5HUyxcbiAgQ2hyb21lRHJpdmVyRXh0ZW5zaW9uLkJJTkRJTkdTLFxuICBGaXJlZm94RHJpdmVyRXh0ZW5zaW9uLkJJTkRJTkdTLFxuICBJT3NEcml2ZXJFeHRlbnNpb24uQklORElOR1MsXG4gIFBlcmZsb2dNZXRyaWMuQklORElOR1MsXG4gIFNhbXBsZURlc2NyaXB0aW9uLkJJTkRJTkdTLFxuICBNdWx0aVJlcG9ydGVyLmNyZWF0ZUJpbmRpbmdzKFtDb25zb2xlUmVwb3J0ZXJdKSxcbiAgTXVsdGlNZXRyaWMuY3JlYXRlQmluZGluZ3MoW1BlcmZsb2dNZXRyaWNdKSxcblxuICBSZXBvcnRlci5iaW5kVG8oTXVsdGlSZXBvcnRlciksXG4gIFZhbGlkYXRvci5iaW5kVG8oUmVncmVzc2lvblNsb3BlVmFsaWRhdG9yKSxcbiAgV2ViRHJpdmVyRXh0ZW5zaW9uLmJpbmRUbyhbQ2hyb21lRHJpdmVyRXh0ZW5zaW9uLCBGaXJlZm94RHJpdmVyRXh0ZW5zaW9uLCBJT3NEcml2ZXJFeHRlbnNpb25dKSxcbiAgTWV0cmljLmJpbmRUbyhNdWx0aU1ldHJpYyksXG5dO1xuIl19