Skip to content

Commit 561ad3a

Browse files
committed
refactor(build): support multiple configurable browsers for e2e and perf tests
Also includes browser configuration for Android
1 parent 7f701da commit 561ad3a

19 files changed

Lines changed: 226 additions & 164 deletions

.travis.yml

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,23 @@ node_js:
55
env:
66
global:
77
- CHANNEL=stable
8-
- BROWSERS=DartiumWithWebPlatform
8+
- KARMA_BROWSERS=DartiumWithWebPlatform
9+
- E2E_BROWSERS=Dartium
910
- LOGS_DIR=/tmp/angular-build/logs
11+
- ARCH=linux-x64
1012

1113
before_install:
1214
- export DISPLAY=:99.0
13-
- ./scripts/travis/install.sh
15+
- export GIT_SHA=$(git rev-parse HEAD)
16+
- ./scripts/ci/init_android.sh
17+
- ./scripts/ci/install_dart.sh
1418
- sh -e /etc/init.d/xvfb start
1519
- if [[ -e SKIP_TRAVIS_TESTS ]]; then { cat SKIP_TRAVIS_TESTS ; exit 0; } fi
1620
before_script:
1721
- mkdir -p $LOGS_DIR
1822
script:
19-
- ./scripts/travis/build.sh
23+
- ./scripts/ci/build.sh
24+
- ./scripts/ci/test_unit.sh
25+
- ./scripts/ci/test_e2e.sh
2026
after_script:
21-
- ./scripts/travis/print-logs.sh
27+
- ./scripts/ci/print-logs.sh

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
"q": "^1.0.1",
4747
"protractor": "1.5.x",
4848
"run-sequence": "^0.3.6",
49-
"through2": "^0.6.1"
49+
"through2": "^0.6.1",
50+
"minimist": "1.1.x"
5051
}
5152
}

perf-cloud-secret.template.js

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
module.exports = {
2-
auth: {
3-
"private_key_id": "1234",
4-
"private_key": "-----BEGIN PRIVATE KEY-----SOME PRIVATE KEY-----END PRIVATE KEY-----\n",
5-
"client_email": "SOME_EMAIL@developer.gserviceaccount.com",
6-
"client_id": "SOME_ID",
7-
"type": "service_account"
8-
},
9-
projectId: 'angular-perf',
10-
datasetId: 'benchmarks'
2+
"private_key_id": "1234",
3+
"private_key": "-----BEGIN PRIVATE KEY-----SOME PRIVATE KEY-----END PRIVATE KEY-----\n",
4+
"client_email": "SOME_EMAIL@developer.gserviceaccount.com",
5+
"client_id": "SOME_ID",
6+
"type": "service_account"
117
};

protractor-e2e-shared.js

Lines changed: 2 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,2 @@
1-
// load traceur runtime as our tests are written in es6
2-
require('traceur/bin/traceur-runtime.js');
3-
4-
var config = exports.config = {
5-
6-
specs: ['dist/cjs/**/*_spec.js'],
7-
8-
// Disable waiting for Angular as we don't have an integration layer yet...
9-
// TODO(tbosch): Implement a proper debugging API for Ng2.0, remove this here
10-
// and the sleeps in all tests.
11-
onPrepare: function() {
12-
browser.ignoreSynchronization = true;
13-
var _get = browser.get;
14-
var sleepInterval = process.env.TRAVIS ? 5000 : 2000;
15-
browser.get = function() {
16-
var result = _get.apply(this, arguments);
17-
browser.sleep(sleepInterval);
18-
return result;
19-
}
20-
},
21-
22-
jasmineNodeOpts: {
23-
showColors: true,
24-
defaultTimeoutInterval: 30000
25-
}
26-
};
27-
28-
if (process.env.TRAVIS) {
29-
config.capabilities = {
30-
name: 'Dartium',
31-
browserName: 'chrome',
32-
chromeOptions: {
33-
'binary': process.env.DARTIUM
34-
},
35-
loggingPrefs: {
36-
performance: 'ALL'
37-
}
38-
};
39-
} else {
40-
config.capabilities = {
41-
browserName: 'chrome',
42-
loggingPrefs: {
43-
performance: 'ALL'
44-
}
45-
};
46-
}
1+
var config = exports.config = require('./protractor-shared.js').config;
2+
config.specs = ['dist/cjs/**/*_spec.js'];

protractor-perf-dart2js.conf.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
var config = exports.config = require('./protractor-perf-shared.js').config;
2-
config.params.lang = 'dart';
32
config.baseUrl = 'http://localhost:8002/';
3+
config.params.lang = 'dart';
44
// TODO: remove this line when largetable dart has been added
55
config.exclude = config.exclude || [];
66
config.exclude.push('dist/cjs/e2e_test/benchmarks_external/e2e_test/largetable_perf.js');

protractor-perf-js.conf.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
var config = exports.config = require('./protractor-perf-shared.js').config;
2-
config.params.lang = 'js';
32
config.baseUrl = 'http://localhost:8001/';
4-
3+
config.params.lang = 'js';

protractor-perf-shared.js

Lines changed: 25 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,33 @@
1+
var config = exports.config = require('./protractor-shared.js').config;
12
// load traceur runtime as our tests are written in es6
23
require('traceur/bin/traceur-runtime.js');
34

45
var cloudReporterConfig;
5-
try {
6-
cloudReporterConfig = require('./perf-cloud-secret.js');
7-
} catch (e) {
8-
cloudReporterConfig = null;
6+
if (process.env.CLOUD_SECRET_PATH) {
7+
console.log('using cloud reporter!');
8+
cloudReporterConfig = {
9+
auth: require(process.env.CLOUD_SECRET_PATH),
10+
projectId: 'angular-perf',
11+
datasetId: 'benchmarks'
12+
};
913
}
1014

11-
var config = exports.config = {
12-
13-
specs: ['dist/cjs/**/*_perf.js'],
14-
15-
params: {
16-
benchmark: {
17-
// size of the sample to take
18-
sampleSize: 20,
19-
timeout: 20000,
20-
metrics: ['script', 'render', 'gcAmount', 'gcAmountInScript', 'gcTime'],
21-
// forces a gc after every run
22-
forceGc: false,
23-
reporters: [
24-
require('./dist/cjs/tools/benchpress/src/console_reporter.js'),
25-
cloudReporterConfig ? require('./dist/cjs/tools/benchpress/src/cloud_reporter.js') : null,
26-
],
27-
cloudReporter: cloudReporterConfig
28-
}
29-
},
30-
31-
// Disable waiting for Angular as we don't have an integration layer yet...
32-
// TODO(tbosch): Implement a proper debugging API for Ng2.0, remove this here
33-
// and the sleeps in all tests.
34-
onPrepare: function() {
35-
browser.ignoreSynchronization = true;
36-
var _get = browser.get;
37-
var sleepInterval = process.env.TRAVIS ? 5000 : 2000;
38-
browser.get = function() {
39-
var result = _get.apply(this, arguments);
40-
browser.sleep(sleepInterval);
41-
return result;
42-
}
43-
},
44-
45-
jasmineNodeOpts: {
46-
showColors: true,
47-
defaultTimeoutInterval: 30000
15+
config.specs = ['dist/cjs/**/*_perf.js'];
16+
config.params = {
17+
benchmark: {
18+
// size of the sample to take
19+
sampleSize: 20,
20+
timeout: 20000,
21+
metrics: ['script', 'render', 'gcAmount', 'gcAmountInScript', 'gcTime'],
22+
// forces a gc after every run
23+
forceGc: false,
24+
reporters: [
25+
require('./dist/cjs/tools/benchpress/src/console_reporter.js'),
26+
cloudReporterConfig ? require('./dist/cjs/tools/benchpress/src/cloud_reporter.js') : null,
27+
],
28+
cloudReporter: cloudReporterConfig,
29+
scaling: [{
30+
browserName: /chrome/, value: 0.5
31+
}]
4832
}
4933
};
50-
51-
// TODO: add real mobile devices via a cloud provider that supports appium
52-
if (process.env.TRAVIS) {
53-
config.capabilities = {
54-
name: 'Dartium',
55-
browserName: 'chrome',
56-
chromeOptions: {
57-
'binary': process.env.DARTIUM,
58-
'args': ['--js-flags=--expose-gc']
59-
},
60-
loggingPrefs: {
61-
performance: 'ALL'
62-
}
63-
};
64-
} else {
65-
config.capabilities = {
66-
browserName: 'chrome',
67-
chromeOptions: {
68-
'args': ['--js-flags=--expose-gc']
69-
},
70-
loggingPrefs: {
71-
performance: 'ALL'
72-
}
73-
};
74-
}

protractor-shared.js

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
// load traceur runtime as our tests are written in es6
2+
require('traceur/bin/traceur-runtime.js');
3+
var cmdArgs = require('minimist')(process.argv);
4+
var cmdLineBrowsers = cmdArgs.browsers ? cmdArgs.browsers.split(',') : [];
5+
6+
var config = exports.config = {
7+
// Disable waiting for Angular as we don't have an integration layer yet...
8+
// TODO(tbosch): Implement a proper debugging API for Ng2.0, remove this here
9+
// and the sleeps in all tests.
10+
onPrepare: function() {
11+
browser.ignoreSynchronization = true;
12+
var _get = browser.get;
13+
var sleepInterval = process.env.TRAVIS || process.env.JENKINS_URL ? 5000 : 2000;
14+
browser.get = function() {
15+
var result = _get.apply(this, arguments);
16+
browser.sleep(sleepInterval);
17+
return result;
18+
}
19+
},
20+
21+
jasmineNodeOpts: {
22+
showColors: true,
23+
defaultTimeoutInterval: 30000
24+
}
25+
};
26+
27+
var POSSIBLE_CAPS = {
28+
Dartium: {
29+
name: 'Dartium',
30+
browserName: 'chrome',
31+
chromeOptions: {
32+
'binary': process.env.DARTIUM,
33+
'args': ['--js-flags=--expose-gc']
34+
},
35+
loggingPrefs: {
36+
performance: 'ALL'
37+
}
38+
},
39+
ChromeDesktop: {
40+
browserName: 'chrome',
41+
chromeOptions: {
42+
'args': ['--js-flags=--expose-gc']
43+
},
44+
loggingPrefs: {
45+
performance: 'ALL'
46+
}
47+
},
48+
ChromeAndroid: {
49+
browserName: 'chrome',
50+
chromeOptions: {
51+
androidPackage: 'com.android.chrome',
52+
'args': ['--js-flags=--expose-gc']
53+
},
54+
loggingPrefs: {
55+
performance: 'ALL'
56+
}
57+
}
58+
};
59+
if (cmdLineBrowsers.length) {
60+
config.multiCapabilities = cmdLineBrowsers.map(function(browserName) {
61+
var caps = POSSIBLE_CAPS[browserName];
62+
if (!caps) {
63+
throw new Error('Not configured browser name: '+browserName);
64+
}
65+
return caps;
66+
});
67+
} else {
68+
config.multiCapabilities = [POSSIBLE_CAPS.ChromeDesktop];
69+
}

scripts/ci/build.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/bin/bash
2+
set -e
3+
4+
echo =============================================================================
5+
# go to project dir
6+
SCRIPT_DIR=$(dirname $0)
7+
source $SCRIPT_DIR/env_dart.sh
8+
cd $SCRIPT_DIR/../..
9+
10+
./node_modules/.bin/gulp build
11+
12+
pub install
File renamed without changes.

0 commit comments

Comments
 (0)