Skip to content

Commit 8b7df90

Browse files
committed
fix(build): simplify the e2e/perf config via command line arguments
1 parent 3d12d08 commit 8b7df90

12 files changed

+128
-135
lines changed

README.md

+15-2
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,25 @@ the transpiler is reloaded. With that it is possible to make changes
5454
to the preprocessor and run the tests without exiting karma
5555
(just touch a test file that you would like to run).
5656

57+
### E2e tests
58+
59+
1. `gulp build.js.cjs` (builds benchpress and tests into `dist/js/cjs` folder)
60+
2. `gulp serve.js.prod serve.js.dart2js` (runs local webserver)
61+
3. `protractor protractor-js.conf.js`: JS e2e tests
62+
4. `protractor protractor-dart2js.conf.js`: Dart2JS e2e tests
63+
64+
Angular specific command line options when running protractor:
65+
`protractor protractor-{js|dart2js}-conf.js --ng-help`
66+
5767
### Performance tests
5868

5969
1. `gulp build.js.cjs` (builds benchpress and tests into `dist/js/cjs` folder)
6070
2. `gulp serve.js.prod serve.js.dart2js` (runs local webserver)
61-
3. `protractor protractor-perf-js.conf.js`: JS performance tests
62-
4. `protractor protractor-perf-dart2js.conf.js`: Dart2JS performance tests
71+
3. `protractor protractor-js.conf.js --benchmark`: JS performance tests
72+
4. `protractor protractor-dart2js.conf.js --benchmark`: Dart2JS performance tests
73+
74+
Angular specific command line options when running protractor (e.g. force gc, ...):
75+
`protractor protractor-{js|dart2js}-conf.js --ng-help`
6376

6477
### Examples
6578

protractor-dart2js.conf.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
var data = module.exports = require('./protractor-shared.js');
2+
var config = data.config;
3+
4+
config.baseUrl = 'http://localhost:8002/';
5+
6+
config.exclude.push(
7+
'dist/js/cjs/examples/e2e_test/sourcemap/sourcemap_spec.js',
8+
// TODO: remove this line when largetable dart has been added
9+
'dist/js/cjs/benchmarks_external/e2e_test/largetable_perf.js'
10+
);
11+
12+
data.createBenchpressRunner({ lang: 'dart' });
13+

protractor-e2e-dart2js.conf.js

-16
This file was deleted.

protractor-e2e-shared.js

-5
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
1-
var data = module.exports = require('./protractor-e2e-shared.js');
1+
var data = module.exports = require('./protractor-shared.js');
22
var config = data.config;
33

44
config.baseUrl = 'http://localhost:8001/';
5-
65
// TODO: remove exclusion when JS verison of scrolling benchmark is available
7-
config.exclude = config.exclude || [];
6+
config.exclude.push('dist/js/cjs/benchmarks_external/e2e_test/naive_infinite_scroll_spec.js');
87
config.exclude.push('dist/js/cjs/benchmarks_external/e2e_test/naive_infinite_scroll_perf.js');
98

10-
data.createBenchpressRunner({
11-
forceGc: false,
12-
lang: 'js',
13-
test: true,
14-
sampleSize: 1
15-
});
9+
data.createBenchpressRunner({ lang: 'js' });
1610

protractor-perf-dart2js.conf.js

-16
This file was deleted.

protractor-perf-js.conf.js

-16
This file was deleted.

protractor-perf-shared.js

-8
This file was deleted.

protractor-shared.js

+93-59
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,69 @@
11
// load traceur runtime as our tests are written in es6
22
require('traceur/bin/traceur-runtime.js');
33

4-
var nodeUuid = require('node-uuid');
5-
var benchpress = require('./dist/js/cjs/benchpress/benchpress');
6-
var SeleniumWebDriverAdapter = require('./dist/js/cjs/benchpress/src/webdriver/selenium_webdriver_adapter').SeleniumWebDriverAdapter;
7-
var cmdArgs = require('minimist')(process.argv);
4+
var argv = require('yargs')
5+
.usage('Angular e2e/perf test options.')
6+
.options({
7+
'sample-size': {
8+
describe: 'sample size',
9+
default: 20,
10+
type: 'boolean'
11+
},
12+
'force-gc': {
13+
describe: 'force gc',
14+
default: false,
15+
type: 'boolean'
16+
},
17+
'benchmark': {
18+
describe: 'whether to run the benchmarks',
19+
default: false
20+
},
21+
'browsers': {
22+
describe: 'preconfigured browsers that should be used',
23+
default: 'ChromeDesktop'
24+
}
25+
})
26+
.help('ng-help')
27+
.wrap(40)
28+
.argv
829

9-
var cmdLineBrowsers = cmdArgs.browsers ? cmdArgs.browsers.split(',') : [];
30+
var browsers = argv['browsers'].split(',');
31+
32+
var BROWSER_CAPS = {
33+
Dartium: {
34+
name: 'Dartium',
35+
browserName: 'chrome',
36+
chromeOptions: {
37+
'binary': process.env.DARTIUM,
38+
'args': ['--js-flags=--expose-gc']
39+
},
40+
loggingPrefs: {
41+
performance: 'ALL',
42+
browser: 'ALL'
43+
}
44+
},
45+
ChromeDesktop: {
46+
browserName: 'chrome',
47+
chromeOptions: {
48+
'args': ['--js-flags=--expose-gc']
49+
},
50+
loggingPrefs: {
51+
performance: 'ALL',
52+
browser: 'ALL'
53+
}
54+
},
55+
ChromeAndroid: {
56+
browserName: 'chrome',
57+
chromeOptions: {
58+
androidPackage: 'com.android.chrome',
59+
'args': ['--js-flags=--expose-gc']
60+
},
61+
loggingPrefs: {
62+
performance: 'ALL',
63+
browser: 'ALL'
64+
}
65+
}
66+
};
1067

1168
var config = exports.config = {
1269
// Disable waiting for Angular as we don't have an integration layer yet...
@@ -23,11 +80,31 @@ var config = exports.config = {
2380
}
2481
},
2582

83+
specs: argv['benchmark'] ? [
84+
'dist/js/cjs/**/e2e_test/**/*_perf.js'
85+
] : [
86+
'dist/js/cjs/**/e2e_test/**/*_spec.js',
87+
'dist/js/cjs/**/e2e_test/**/*_perf.js'
88+
],
89+
90+
exclude: [
91+
'dist/js/cjs/**/node_modules/**',
92+
],
93+
94+
multiCapabilities: browsers.map(function(browserName) {
95+
var caps = BROWSER_CAPS[browserName];
96+
console.log('Testing against', browserName);
97+
if (!caps) {
98+
throw new Error('Not configured browser name: '+browserName);
99+
}
100+
return caps;
101+
}),
102+
26103
framework: 'jasmine2',
27104

28105
jasmineNodeOpts: {
29106
showColors: true,
30-
defaultTimeoutInterval: 30000
107+
defaultTimeoutInterval: argv.benchpress ? 80000 : 30000
31108
},
32109
params: {
33110
benchmark: {
@@ -39,6 +116,11 @@ var config = exports.config = {
39116
};
40117

41118
exports.createBenchpressRunner = function(options) {
119+
var nodeUuid = require('node-uuid');
120+
var benchpress = require('./dist/js/cjs/benchpress/benchpress');
121+
var SeleniumWebDriverAdapter =
122+
require('./dist/js/cjs/benchpress/src/webdriver/selenium_webdriver_adapter').SeleniumWebDriverAdapter;
123+
42124
// TODO(tbosch): add cloud reporter again (only when !options.test)
43125
// var cloudReporterConfig;
44126
// if (process.env.CLOUD_SECRET_PATH) {
@@ -59,67 +141,19 @@ exports.createBenchpressRunner = function(options) {
59141
benchpress.bind(benchpress.WebDriverAdapter).toFactory(
60142
function() { return new SeleniumWebDriverAdapter(global.browser); }, []
61143
),
62-
benchpress.bind(benchpress.Options.FORCE_GC).toValue(options.forceGc),
144+
benchpress.bind(benchpress.Options.FORCE_GC).toValue(argv['force-gc']),
63145
benchpress.bind(benchpress.Options.DEFAULT_DESCRIPTION).toValue({
64146
'lang': options.lang,
65147
'runId': runId
66148
})
67149
];
68-
if (options.test) {
150+
if (argv['benchmark']) {
151+
bindings.push(benchpress.RegressionSlopeValidator.BINDINGS);
152+
bindings.push(benchpress.bind(benchpress.RegressionSlopeValidator.SAMPLE_SIZE).toValue(argv['sample-size']));
153+
} else {
69154
bindings.push(benchpress.SizeValidator.BINDINGS);
70155
bindings.push(benchpress.bind(benchpress.SizeValidator.SAMPLE_SIZE).toValue(1));
71-
} else {
72-
bindings.push(benchpress.RegressionSlopeValidator.BINDINGS);
73-
bindings.push(benchpress.bind(benchpress.RegressionSlopeValidator.SAMPLE_SIZE).toValue(options.sampleSize));
74156
}
75157

76158
global.benchpressRunner = new benchpress.Runner(bindings);
77159
}
78-
79-
80-
var POSSIBLE_CAPS = {
81-
Dartium: {
82-
name: 'Dartium',
83-
browserName: 'chrome',
84-
chromeOptions: {
85-
'binary': process.env.DARTIUM,
86-
'args': ['--js-flags=--expose-gc']
87-
},
88-
loggingPrefs: {
89-
performance: 'ALL',
90-
browser: 'ALL'
91-
}
92-
},
93-
ChromeDesktop: {
94-
browserName: 'chrome',
95-
chromeOptions: {
96-
'args': ['--js-flags=--expose-gc']
97-
},
98-
loggingPrefs: {
99-
performance: 'ALL',
100-
browser: 'ALL'
101-
}
102-
},
103-
ChromeAndroid: {
104-
browserName: 'chrome',
105-
chromeOptions: {
106-
androidPackage: 'com.android.chrome',
107-
'args': ['--js-flags=--expose-gc']
108-
},
109-
loggingPrefs: {
110-
performance: 'ALL',
111-
browser: 'ALL'
112-
}
113-
}
114-
};
115-
if (cmdLineBrowsers.length) {
116-
config.multiCapabilities = cmdLineBrowsers.map(function(browserName) {
117-
var caps = POSSIBLE_CAPS[browserName];
118-
if (!caps) {
119-
throw new Error('Not configured browser name: '+browserName);
120-
}
121-
return caps;
122-
});
123-
} else {
124-
config.multiCapabilities = [POSSIBLE_CAPS.ChromeDesktop];
125-
}

scripts/ci/test_e2e_dart.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,4 @@ trap killServer EXIT
2121
# wait for server to come up!
2222
sleep 10
2323

24-
./node_modules/.bin/protractor protractor-e2e-dart2js.conf.js --browsers=$E2E_BROWSERS
24+
./node_modules/.bin/protractor protractor-dart2js.conf.js --browsers=$E2E_BROWSERS

scripts/ci/test_e2e_js.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,4 @@ trap killServer EXIT
2121
# wait for server to come up!
2222
sleep 10
2323

24-
./node_modules/.bin/protractor protractor-e2e-js.conf.js --browsers=$E2E_BROWSERS
24+
./node_modules/.bin/protractor protractor-js.conf.js --browsers=$E2E_BROWSERS

scripts/ci/test_perf.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,5 @@ trap killServer EXIT
2121
# wait for server to come up!
2222
sleep 10
2323

24-
./node_modules/.bin/protractor protractor-perf-js.conf.js --browsers=$PERF_BROWSERS
25-
./node_modules/.bin/protractor protractor-perf-dart2js.conf.js --browsers=$PERF_BROWSERS
24+
./node_modules/.bin/protractor protractor-js.conf.js --browsers=$PERF_BROWSERS --benchmark
25+
./node_modules/.bin/protractor protractor-dart2js.conf.js --browsers=$PERF_BROWSERS --benchmark

0 commit comments

Comments
 (0)