JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 8
  • Score
    100M100P100Q48826F
  • License MIT

Monkey testing library

Package Exports

  • qape

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (qape) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

QApe

QApe is in alpha phase and still requires a lot of work. But you are very welcome to try it out and give a feedback!

Build Status NPM NPM

QApe presentation

QApe is autonomous testing tool, which acts as a manual tester browsing your website, clicking anything it can and reporting any errors it finds with exact steps, how to reproduce it. It also automatically generates a script for regression test, which you can add to set of defined scenarios for QApe, so you will have regression test for every error it finds! The longer the QApe is testing your website, the more potentially problematic scenarios it knows and re-tests them with each run without any work from your side!

Give It a Try!

Take a look how QApe works!

npx qape --headless-mode-disabled -u https://www.example.com

Get Started

Simply install the latest version via npm install

npm install qape

Than you can run QApe like this

node_modules/.bin/qape -u https://www.example.com

By default, QApe saves all scenarios causing an error to report folder. You can replay these scenarios like this

node_modules/.bin/qape report/*minified.json -p

Display available options like this

node_modules/.bin/qape --help

Configuration

QApe will look for configuraition file in your current directory with name qape.conf.js. There are following options available.

module.exports = {
    // Number of parallel chrome instances initialized'
    parallelInstances: 1,
    // Time in ms, after which no more scenarios will be initialized, set to 0 to run forever
    stopNewScenariosAfterTime: 100000,
    // Maximal number of actions performed in a random scenario
    // (if error occures, the scenario is ended)
    actionsPerScenario: 100,
    // Wait time after each action,
    // there should be some delay so the javascript
    // at your website is executed and an error
    // is displayed before performing another action.
    afterActionWaitTime: 500,
    // Number of execution errors of actions to abort the random scenario.
    // This prevents from infinity loops, when qape is not able to perform
    // any action on the page and keeps retrying.
    numberOfActionFailuresToAbortRandomScenario: 20,
    // Starting url for all random scenarios
    url: 'http://localhost:4444',
    // After an error occured, qape will try to reproduce the error again
    // and will retry up to this number of actions before giving up.
    numberOfAllowedActionsToReproduceErrorFromPreviousRun: 20,
    // Disables random scenarios,
    // only user defined scenarios will be executed
    randomScenariosDisabled: false,
    // When user defined scenario recieves an error,
    // it will try to minify the steps to reproduce this error.
    minifyUserDefinedScenarios: true,
    // Disables chromium headless mode and will display browser GUI.
    headlessModeDisabled: false,
    // Preview mode will overwrite other config values
    // to display the scenario on the local computer
    // in non-headless mode. It will also run only
    // user defined scenarios and will not try to minify them.
    previewMode: false,
    // Wait time (in ms) between actions in preview mode.
    previewModePauseTime: 1500,
    // Default browser settings passed to puppeteer.launch()
    defaultBrowserSettings: {
        ignoreHTTPSErrors: true,
        defaultViewport: {
            width: 1280,
            height: 720
        },
        args: [
            '--start-maximized',
            '--user-agent=Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
        ]
    },
    // Default navigation timeout set via page.setDefaultNavigationTimeout()
    defaultNavigationTimeout: 60000,
    // Page error handler, which should tell what is actually an error.
    // Function is evaluated in the browser context via
    // page.evaluateOnNewDocument() and has method
    // "qapeError(error)" available.
    pageErrorHandler: () => {
        window.addEventListener('error', (event) => {
            qapeError(event.error.toString());
        });
    },
    // A browser websocket endpoint to connect to (i.e. ws://5.5.5.5:3505)
    browserWebSocketEndpoint: null,
    // Define your reporters for the QApe run.
    // You can pass a string for reporters in npm registry,
    // i.e. if you pass \'super\', QApe will look for
    // reporter 'qape-reporter-super'. You can also pass Class.
    reporters: ['console', 'file', 'spinner'],
    // Relative path for the report output
    reportPath: './report',
}

Development

Build from source

npm run build

Build from source with watch

npm run dev

Run unit tests

npm test

Run local testing website (from example)

node server.js

Start local version of qape with source mapping

npm start -- [options]