Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/axemclion/protractor-perf
E2E test framework to check for performance regressions in Angular apps
https://github.com/axemclion/protractor-perf
angular perf perfmatters performance-regressions protractor web-performance
Last synced: 16 days ago
JSON representation
E2E test framework to check for performance regressions in Angular apps
- Host: GitHub
- URL: https://github.com/axemclion/protractor-perf
- Owner: axemclion
- Created: 2014-11-16T03:56:56.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2016-12-17T17:28:56.000Z (almost 8 years ago)
- Last Synced: 2024-09-15T06:25:34.211Z (about 2 months ago)
- Topics: angular, perf, perfmatters, performance-regressions, protractor, web-performance
- Language: JavaScript
- Size: 25.4 KB
- Stars: 91
- Watchers: 16
- Forks: 23
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
Awesome Lists containing this project
README
# Protractor-Perf
Just like [Protractor](https://github.com/angular/protractor) is the end to end test case runner for [AngularJS](https://github.com/angular/angular.js/) to check for functional regressions, [this project](htto://npmjs.org/package/protractor-perf) is a way check for performance regressions while reusing the same test cases.
## Usage
Install protractor-perf using `npm install -g protractor-perf`.
Protractor test cases are re-used to run scenarios where performance needs to be measured. Protractor-perf can be used just like protractor, just that the test-cases need to be instrumented to indicated when to start and stop measuring performance.
Protractor is usually invoked using `$ protractor conf.js`. Use `$ protractor-perf conf.js` instead to start measuring performance.
The config file is the same configuration file used for protractor tests.
_Note_: If you run selenium using protractor's `webdriver-manager`, you would need to specify `seleniumPort` and `selenium` keys in the config file, to explicitly specify the port on which the selenium server will run. This port will also be picked up by `protractor-perf`. See `./test/conf.js` as an example.
> When the instrumented test cases are run using protractor, the code related to performance is a no-op. This way, adding instrumentation does not break your ability to run protractor to just test for functionality.
## Instrumenting the test cases
The test case need to specify when to start and stop measuring performance metrics for a certain scenario. The following code is an example of a test case, with perf code snippets added.
```javascript
var PerfRunner = require('..');
describe('angularjs homepage todo list', function() {
var perfRunner = new PerfRunner(protractor, browser);it('should add a todo', function() {
browser.get('http://www.angularjs.org');
perfRunner.start();element(by.model('todoList.todoText')).sendKeys('write a protractor test');
element(by.css('[value="add"]')).click();perfRunner.stop();
if (perfRunner.isEnabled) {
expect(perfRunner.getStats('meanFrameTime')).toBeLessThan(60);
};var todoList = element.all(by.repeater('todo in todoList.todos'));
expect(todoList.count()).toEqual(3);
expect(todoList.get(2).getText()).toEqual('write a protractor test');});
});
```The four statements to note are
1. Initialize the Perf monitor using `new ProtractorPerf(protractor, browser)`
2. To start measuring the perf, use `perf.start()`
3. Once the scenario that you would like to perf test completes, use `perf.stop()`
4. Finally, use `perf.getStats('statName')` in `expect` statements to ensure that all the performance metrics are within the acceptable range.The `perf.isEnabled` is needed to ensure that perf metrics are not tested when the test case is run using `protractor` directly.
### Metrics measured
`protractor-perf` is based on [browser-perf](http://github.com/axemclion/browser-perf). `browser-perf` measures the metrics that can be tested for regressions. Look at [browser-perf's wiki page](https://github.com/axemclion/browser-perf/wiki) for more information about the project.
### Grunt Integration
Invoke `protractor-perf` from a GruntFile as below
```javascript
module.exports = function(grunt) {
var protractorperf = require('protractor-perf');
grunt.registerTask('protractorperf', function() {
var donerun = this.async();
// Optional config Object that overwrites properties of conf.js.
// Useful to set property values from grunt.option()
var argv = {
selenium: 'http://localhost:54321/wd/hub',
seleniumPort: 54321
};
protractorperf.run('./merci-perf-conf.js', donerun, argv); // config file
});
grunt.registerTask('run', ['protractorperf']);
};
```