/LoadEffect

Distributed Load Testing in Javascript-like Scripting Language

Primary LanguageJavaScript

Stories in Ready Build Status Coverage Status

Load Effect


image

Description

Load Effect is a load testing API that allow you to write a custom script using the API-provided scripting language to simulate real user interactions up to scale.

Load Effect features script validation, domain validation through DNS TXT records and real-time analytics during load tests.

This application was built using React, Redux, Chartist.js, Node.js, express.js, sockets.io, MySQL, Zombie.js, docker, AWS, Digital Ocean, Travis CI, and Mocha/Chai.

Table of Contents

  1. Usage
  2. Getting Started
    1. Prerequisites
    2. Installing Dependencies
  3. API Documentation
  4. Deployment Documentation
    1. Server creation
      1. AWS
      2. Digital Ocean
    2. Shell connection
    3. Environment setup
      1. Environment variables
      2. Certificates
    4. Pull images
    5. Run Containers
      1. MySQL Database
      2. Web Application
    6. Monitor Containers
  5. Master-Worker-Documentation
    1. Master
    2. Worker
  6. Website Validation
  7. DNS Instructions
  8. How it works
  9. Core Team
  10. Contributing
  11. Licensing

Usage

  1. Signup: image

  2. Create Scenario: image

  3. Scenarios Overview: image

  4. Verify website ownership with validation token: image

  5. Run Scenario: image

Getting Started

Prerequisites

Installing Dependencies

From within the root directory:

npm install

Running The App

npm start

Testing

Run:

npm test

API Documentation

  1. File Structure
  2. Architecture Diagram and Flow-Chart
  3. LoadEffect Overview Presentation

Deployment Documentation

DeploymentDocs README

Master-Worker Documentation

Master documentation

Master README

Worker documentation

Worker README

Website Validation

DNS Instructions

In order to prevent using the API to perform DDOS attacks, you'll need to verify domain ownership through the use of DNS Text Records.

  1. Copy the validation token. It should start with "LoadEffect-""
  2. Log in to your domain, access your DNS settings, and look for an option to Add a New Record.
  3. Under the field Name/Host/Alias, enter '@'.
  4. Under Value/Answer/Destination, paste the validation token and save.

Here's an example of what it would look like for Namecheap:

image

Depending on your domain provider, it may take from 1 minute to a few days for the DNS Text record to provision. Once provisioned, click on the Unverified dropdown button and select Validate Your Site to run the validation check.

image

If the validation was successful, the button will turn green and you'll be able to run the test.

image

How The DNS Verification Works

Node has a DNS module built in, which has a number of helpful API's that can perform this lookup on the backend.

Example usage:

const dns = require('dns');
const app = require('express')();

const validateWebsite = (request, response) => {
  dns.resolveTxt('anhtaihuynh.com', (err, results) => {
    if (err) {
      response.send(err);
      throw err;
    }
    response.send(results); // Results is a 2D array of the DNS Text record values for the input url
  });
}

app.get('/api/validate-site', validateWebsite);

Core Team

Contributing

  1. Fork the repo.
  2. Clone it to your local computer
  3. Cut a namespaced feature branch from master and name it appropriately
  4. Make commits and prefix each commit with the type of work you were doing
  5. BEFORE PUSHING UP YOUR CHANGES, rebase upstream changes into your branch, fix any potential conflicts, and then push to your fork.
  6. Submit a pull request directly to the master
  7. Someone else will perform code review to keep codebase clean
  8. Fix any errors or issues raised by the reviewer and push the fixes as a single new commit
  9. Repeat until the pull request is merged.

See CONTRIBUTING.md for contribution guidelines in detail.

License

M.I.T