DEV Community

Cover image for Ddosify : High-performance load testing tool
NaveenKumar Namachivayam ⚡
NaveenKumar Namachivayam ⚡

Posted on • Originally published at qainsights.com

Ddosify : High-performance load testing tool

There are over 50+ tools and solutions available in the market for performance testing your application and services. Now it is time to check out Ddosify, high-performance load testing tool which offers free and commercial features to test web applications and services over HTTP(S), HTTP/2, and other protocols are on their way. In this blog article, let us deep-dive into Ddosify tool and see whether it satisfies a typical performance engineer or not.

Before we see Ddosify, let us try to understand the name of the tool. Ddosify contains Ddos term. DDoS stands for Distributed Denial of Services. Below is the Wikipedia entry for Denial of Service:

In computing, a denial-of-service attack is a cyber-attack in which the perpetrator seeks to make a machine or network resource unavailable to its intended users by temporarily or indefinitely disrupting services of a host connected to the Internet.

An attacker targets a machine and tries to disrupt its services. The term distributed stands for multiple sources. Instead of attacking a system from one source, attacker uses multiple sources.

If you try to fit the DDoS capabilities for good intent, you will get Ddosify.

What is Ddosify?

Ddosify is a high-performance load testing tool written in Golang. It comes in two flavors: open-source and commercial.

It supports HTTP(S), HTTP/2 protocols (as of now); other protocols are on the way.

JSON support for creating scenarios.

Supports various workload models.

Getting Started

As Ddosify is Golang based, the prerequisite is to install the latest and stable version of Golang if you want to build from the source, else you can download the binaries to get started. Head to https://golang.org/dl/ to install the Golang.

To install Ddosify, you can leverage Docker or install it from source.

docker run -it --rm ddosify/ddosify
go install -v go.ddosify.com/ddosify@latest

After successful installation, you can verify Ddosify by issuing the below command.

ddosify -version

Quick Start

Let us start a quick load testing, targeting the demo app. I am running a sample Jetty app locally on the port 8080. To begin the testing using Ddosify, you can issue the below command.

ddosify -t http://localhost:8080/test/hello

The above command sends 100 requests in 10 seconds. Below is the output. During the test, Ddosify displays the status runtime. Once the test is done, it will display the results with DNS, Connection, Request Write, Server Processing, Response Read time and Total time in seconds.

To terminate the test, you can press Ctrl + C.

Ddosify : High-performance load testing tool
Ddosify : High-performance load testing tool

Scenario Design

Now let us design a quick scenario to test the demo app in JSON. Copy and paste the below JSON and save it as config.json.

To start the test, issue ddosify -config .\config.json.

{
  "request_count": 20,
  "load_type": "linear",
  "duration": 5,
  "output": "stdout",
  "steps": [
    {
      "id": 1,
      "url": "http://localhost:8080/test/session/",
      "protocol": "http",
      "method": "POST",
      "headers": {
        "ContenType": "application/xml",
        "header1": "header2"
      },
      "payload": "Name=test&Value=test&Action=Set",
      "timeout": 3,      
      "others": {
        "keep-alive": true,
        "disableCompression": false,
        "h2": true,
        "disable-redirect": true
      }
    }    
  ]
}

The above scenario throws 20 requests (iterates) over the period of 5 seconds. Below is the output.

Ddosify : High-performance load testing tool
Ddosify : High-performance load testing tool

Below are the various flags available for Ddosify at this time of writing.













































































































Flag Description Type Default Required?
-t Target website URL. Example: https://ddosify.com
string - Yes
-n Total request count int 100 No
-d Test duration in seconds. int 10 No
-p Protocol of the request. Supported protocols are HTTP, HTTPS. HTTP/2 support is only available by using a config file as described. More protocols will be added. string HTTPS No
-m Request method. Available methods for HTTP(s) are GET, POST, PUT, DELETE, UPDATE, PATCH
string GET No
-b The payload of the network packet. AKA body for the HTTP. string - No
-a Basic authentication. Usage: -a username:password
string - No
-h Headers of the request. You can provide multiple headers with multiple -h flag. string - No
-T Timeout of the request in seconds. int 5 No
-P Proxy address as host:port. -P http://user:pass@proxy_host.com:port'
string - No
-o Test result output destination. Other output types will be added. string stdout No
-l
Type of the load test. Ddosify supports 3 load types.
string linear No
-config
Config File of the load test.
string - No
-version Prints version, git commit, built date (utc), go information and quit - - No
Ddosify Flags

Workload Models

At this moment, Ddosify supports three workload models: Linear, Incremental, and Waved.

Linear helps to inject the load consistently over the period of time.

Incremental injects the load gradually increasing.

The wave pattern injects the load like peaks and valleys.

How many requests you can send from your system?

To determine, how many requests you can generate on the system, purely depends on the CPU, memory, and other parameters. You need to run benchmark tests and conclude your findings.

I have two cores with 16 GB RAM. Golang is based on a lightweight thread managed by Go runtime called goroutines. Golang has better concurrency than other languages. You can easily spin up hundreds of threads using minimal resources.

I executed a test with 10000 requests. As you see, the load is proportional to the time.

High Load Test
High Load Test

When I injected with 10000000, I observed high CPU and memory on ddosify.exe and the test took a long time to complete. I have to terminate the exe file. It is not DDosify issue, it is my system configuration. I have an under-powered config which cannot be useful for running very high load.

Overall

Ddosify might be a good fit if you want to run a very high load quickly with minimal configuration. It is still in the very early stages, and a lot of features are missing (parameterization, logical actions, scripting to name a few). The commercial version is yet to be released.; I am on the waiting list. I hope Ddosify team will develop the features which will satisfy typical performance engineers eventually. I urge you to try Ddosify to ddosify your app.

Discussion (1)