mirror of
https://github.com/aykhans/dodo.git
synced 2025-04-21 11:16:47 +00:00
Compare commits
No commits in common. "a8c3efe198ceaba1c0d85ec2709774373d93da2b" and "00f0bcb2dedc0ee15e90eb29bee0749a80667a04" have entirely different histories.
a8c3efe198
...
00f0bcb2de
30
README.md
30
README.md
@ -1,11 +1,11 @@
|
|||||||
<h1 align="center">Dodo - A Fast and Easy-to-Use HTTP Benchmarking Tool</h1>
|
<h1 align="center">Dodo is a fast and easy-to-use HTTP benchmarking tool.</h1>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img width="30%" height="30%" src="https://ftp.aykhans.me/web/client/pubshares/VzPtSHS7yPQT7ngoZzZSNU/browse?path=%2Fdodo.png">
|
<img width="30%" height="30%" src="https://ftp.aykhans.me/web/client/pubshares/VzPtSHS7yPQT7ngoZzZSNU/browse?path=%2Fdodo.png">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
### Using Docker (Recommended)
|
### With Docker (Recommended)
|
||||||
|
|
||||||
Pull the Dodo image from Docker Hub:
|
Pull the Dodo image from Docker Hub:
|
||||||
|
|
||||||
@ -13,26 +13,26 @@ Pull the Dodo image from Docker Hub:
|
|||||||
docker pull aykhans/dodo:latest
|
docker pull aykhans/dodo:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
When using Dodo with Docker and a local config file, you must provide the config.json file as a volume to the Docker run command (not as the "-f config.json" argument):
|
If you use Dodo with Docker and a local config file, you must provide the config.json file as a volume to the Docker run command (not as the "-f config.json" argument).
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
docker run -v /path/to/config.json:/config.json aykhans/dodo
|
docker run -v /path/to/config.json:/config.json aykhans/dodo
|
||||||
```
|
```
|
||||||
|
|
||||||
If you're using Dodo with Docker and providing a config file via URL, you don't need to set a volume:
|
If you use it with Docker and provide config file via URL, you do not need to set a volume.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
docker run aykhans/dodo -f https://raw.githubusercontent.com/aykhans/dodo/main/config.json
|
docker run aykhans/dodo -f https://raw.githubusercontent.com/aykhans/dodo/main/config.json
|
||||||
```
|
```
|
||||||
|
|
||||||
### Using Binary Files
|
### With Binary File
|
||||||
|
|
||||||
You can download pre-built binaries from the [releases](https://github.com/aykhans/dodo/releases) section.
|
You can grab binaries in the [releases](https://github.com/aykhans/dodo/releases) section.
|
||||||
|
|
||||||
### Building from Source
|
### Build from Source
|
||||||
|
|
||||||
To build Dodo from source, you need to have [Go 1.24+](https://golang.org/dl/) installed.
|
To build Dodo from source, you need to have [Go1.24+](https://golang.org/dl/) installed. <br>
|
||||||
Follow these steps:
|
Follow the steps below to build dodo:
|
||||||
|
|
||||||
1. **Clone the repository:**
|
1. **Clone the repository:**
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ This will generate an executable named `dodo` in the project directory.
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
You can use Dodo with CLI arguments, a JSON config file, or both. When using both, CLI arguments will override JSON config values if there's a conflict.
|
You can use Dodo with CLI arguments, a JSON config file, or both. If you use both, CLI arguments will always override JSON config arguments if there is a conflict.
|
||||||
|
|
||||||
### 1. CLI
|
### 1. CLI
|
||||||
|
|
||||||
@ -72,7 +72,7 @@ With Docker:
|
|||||||
docker run --rm -i aykhans/dodo -u https://example.com -m GET -d 10 -r 1000 -t 2s
|
docker run --rm -i aykhans/dodo -u https://example.com -m GET -d 10 -r 1000 -t 2s
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. JSON Config File
|
### 2. JSON config file
|
||||||
|
|
||||||
Send 1000 GET requests to https://example.com with 10 parallel dodos (threads) and a timeout of 800 milliseconds:
|
Send 1000 GET requests to https://example.com with 10 parallel dodos (threads) and a timeout of 800 milliseconds:
|
||||||
|
|
||||||
@ -152,7 +152,7 @@ docker run --rm -i -v /path/to/config.json:/config.json aykhans/dodo
|
|||||||
docker run --rm -i aykhans/dodo -f https://example.com/config.json
|
docker run --rm -i aykhans/dodo -f https://example.com/config.json
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Combined (CLI & JSON)
|
### 3. Both (CLI & JSON)
|
||||||
|
|
||||||
Override the config file arguments with CLI arguments:
|
Override the config file arguments with CLI arguments:
|
||||||
|
|
||||||
@ -168,17 +168,17 @@ docker run --rm -i -v /path/to/config.json:/config.json aykhans/dodo -u https://
|
|||||||
|
|
||||||
## CLI and JSON Config Parameters
|
## CLI and JSON Config Parameters
|
||||||
|
|
||||||
If `Headers`, `Params`, `Cookies`, `Body`, or `Proxy` fields have multiple values, each request will choose a random value from the list.
|
If `Headers`, `Params`, `Cookies`, `Body`, and `Proxy` fields have multiple values, each request will choose a random value from the list.
|
||||||
|
|
||||||
| Parameter | JSON config file | CLI Flag | CLI Short Flag | Type | Description | Default |
|
| Parameter | JSON config file | CLI Flag | CLI Short Flag | Type | Description | Default |
|
||||||
| --------------- | ---------------- | ------------ | -------------- | ------------------------------ | --------------------------------------------------------------- | ------- |
|
| --------------- | ---------------- | ------------ | -------------- | ------------------------------ | --------------------------------------------------------------- | ------- |
|
||||||
| Config file | - | -config-file | -f | String | Path to local config file or http(s) URL of the config file | - |
|
| Config file | - | -config-file | -f | String | Path to the local config file or http(s) URL of the config file | - |
|
||||||
| Yes | yes | -yes | -y | Boolean | Answer yes to all questions | false |
|
| Yes | yes | -yes | -y | Boolean | Answer yes to all questions | false |
|
||||||
| URL | url | -url | -u | String | URL to send the request to | - |
|
| URL | url | -url | -u | String | URL to send the request to | - |
|
||||||
| Method | method | -method | -m | String | HTTP method | GET |
|
| Method | method | -method | -m | String | HTTP method | GET |
|
||||||
| Requests | requests | -requests | -r | UnsignedInteger | Total number of requests to send | 1000 |
|
| Requests | requests | -requests | -r | UnsignedInteger | Total number of requests to send | 1000 |
|
||||||
| Dodos (Threads) | dodos | -dodos | -d | UnsignedInteger | Number of dodos (threads) to send requests in parallel | 1 |
|
| Dodos (Threads) | dodos | -dodos | -d | UnsignedInteger | Number of dodos (threads) to send requests in parallel | 1 |
|
||||||
| Timeout | timeout | -timeout | -t | Duration | Timeout for canceling each request | 10s |
|
| Timeout | timeout | -timeout | -t | Duration | Timeout for canceling each request (milliseconds) | 10000 |
|
||||||
| Params | params | -param | -p | [{String: String OR [String]}] | Request parameters | - |
|
| Params | params | -param | -p | [{String: String OR [String]}] | Request parameters | - |
|
||||||
| Headers | headers | -header | -H | [{String: String OR [String]}] | Request headers | - |
|
| Headers | headers | -header | -H | [{String: String OR [String]}] | Request headers | - |
|
||||||
| Cookies | cookies | -cookie | -c | [{String: String OR [String]}] | Request cookies | - |
|
| Cookies | cookies | -cookie | -c | [{String: String OR [String]}] | Request cookies | - |
|
||||||
|
@ -60,22 +60,23 @@ func releaseDodos(
|
|||||||
requestCountPerDodo uint
|
requestCountPerDodo uint
|
||||||
dodosCount uint = requestConfig.GetValidDodosCountForRequests()
|
dodosCount uint = requestConfig.GetValidDodosCountForRequests()
|
||||||
dodosCountInt int = int(dodosCount)
|
dodosCountInt int = int(dodosCount)
|
||||||
|
requestCount uint = requestConfig.RequestCount
|
||||||
responses = make([][]*Response, dodosCount)
|
responses = make([][]*Response, dodosCount)
|
||||||
increase = make(chan int64, requestConfig.RequestCount)
|
increase = make(chan int64, requestCount)
|
||||||
)
|
)
|
||||||
|
|
||||||
wg.Add(dodosCountInt)
|
wg.Add(dodosCountInt)
|
||||||
streamWG.Add(1)
|
streamWG.Add(1)
|
||||||
streamCtx, streamCtxCancel := context.WithCancel(context.Background())
|
streamCtx, streamCtxCancel := context.WithCancel(context.Background())
|
||||||
|
|
||||||
go streamProgress(streamCtx, &streamWG, int64(requestConfig.RequestCount), "Dodos Working🔥", increase)
|
go streamProgress(streamCtx, &streamWG, int64(requestCount), "Dodos Working🔥", increase)
|
||||||
|
|
||||||
for i := range dodosCount {
|
for i := range dodosCount {
|
||||||
if i+1 == dodosCount {
|
if i+1 == dodosCount {
|
||||||
requestCountPerDodo = requestConfig.RequestCount - (i * requestConfig.RequestCount / dodosCount)
|
requestCountPerDodo = requestCount - (i * requestCount / dodosCount)
|
||||||
} else {
|
} else {
|
||||||
requestCountPerDodo = ((i + 1) * requestConfig.RequestCount / dodosCount) -
|
requestCountPerDodo = ((i + 1) * requestCount / dodosCount) -
|
||||||
(i * requestConfig.RequestCount / dodosCount)
|
(i * requestCount / dodosCount)
|
||||||
}
|
}
|
||||||
|
|
||||||
go sendRequest(
|
go sendRequest(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user