Awesome Open Source
Awesome Open Source
Sponsorship

Wedgetail

Performance test your functions

View on npm npm downloads Dependencies Build Status codecov NSP StatusKnown Vulnerabilities FOSSA Status

Wedgetail is a small performance tesing library that runs on NodeJS 9.5.0 and above. It's designed to be used inside your tests, to ensure your desired function is always as fast as you want it to be.

Getting Started

Add wedgetail to your devDependencies.

yarn add -D wedgetail

npm install --save-dev wedgetail

Wedgetail can be easily inserted into your tests. It's reccomended you create a seperate test just for performance, as you cannot use the result of the function you are testing.

The function you are testing can also be your whole test.

Usage

To use wedgetail you need to call in inside the callback.

// javascript
import test from "ava";

import { timeExecution } from "wedgetail";

test("Can time a function", async t => {
    // This object contains a definition of the threshold
    // at which your function is too slow.
    // All timings are in milliseconds(ms)
    const allowedPerformance = {
        average: 0.001,
        high: 1,
        low: 0.001,
        percentiles: {
            ninetieth: 0.0004,
            ninetyFifth: 0.001,
            ninetyNinth: 0.001,
            tenth: 0.0005,
        },
    };

    const timings = await timeExecution({
        expectedTimings: allowedPerformance,
        numberOfExecutions: 5000,
        // By using an anonymous arrow function you should
        // be able to maintain the correct scope
        // of `this`.
        callback: () => {
            // Your function goes here
            Math.sqrt(Math.random());
        },
    });
    // You can use any testing or assertion library.
    // if the timings are below your expected values then
    // `timings.results.passed` will be `true`
    t.true(timings.results.passed, "timings failed");
});
// typescript
import test from "ava";

import { timeExecution, Timings, TimedPerformance } from "wedgetail";

test("Can time a function", async t => {
    // This object contains a definition of the threshold
    // at which your function is too slow.
    // All timings are in milliseconds(ms)
    const allowedPerformance: Timings = {
        average: 0.001,
        high: 1,
        low: 0.001,
        percentiles: {
            ninetieth: 0.0004,
            ninetyFifth: 0.001,
            ninetyNinth: 0.001,
            tenth: 0.0005,
        },
    };

    const timings: TimedPerformance = await timeExecution({
        expectedTimings: allowedPerformance,
        numberOfExecutions: 5000,
        // By using an anonymous arrow function you should
        // be able to maintain the correct scope
        // of `this`.
        callback: () => {
            // Your function goes here
            Math.sqrt(Math.random());
        },
    });
    // You can use any testing or assertion library.
    // if the timings are below your expected values then
    // `timings.results.passed` will be `true`
    t.true(timings.results.passed, "timings failed");
});

You will need to play around with numberOfExecutions to find the right number. If your function is slow (2ms+) you may want to use a number less than 5000.

Running the tests

Use yarn tests or npm run tests.

Tests are written with ava, and we would strongly like tests with any new functionality.

Contributing

Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.

Versioning

We use SemVer for versioning. For the versions available, see the tags on this repository.

Authors

License

This project is licensed under the MIT License - see the LICENSE.md file for details

FOSSA Status


Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
javascript (66,526
typescript (9,458
testing (881
testing-tools (188
performance-testing (53
typescript-library (26

Find Open Source By Browsing 7,000 Topics Across 59 Categories