All Projects → Enet4 → heel-gun

Enet4 / heel-gun

Licence: Apache-2.0, MIT licenses found Licenses found Apache-2.0 LICENSE-APACHE MIT LICENSE-MIT
Test HTTP servers for robustness to arbitrary requests

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to heel-gun

mockcpp
Two C/C++ testing tools, mockcpp and testngpp.
Stars: ✭ 40 (+135.29%)
Mutual labels:  testing-tools
laika
Log, test, intercept and modify Apollo Client's operations
Stars: ✭ 99 (+482.35%)
Mutual labels:  testing-tools
client-java
Asynchronous client for Java-based agents
Stars: ✭ 17 (+0%)
Mutual labels:  testing-tools
good-first-issues
Find good first issues right from your CLI! 🚀
Stars: ✭ 64 (+276.47%)
Mutual labels:  cli-app
php.autotest
autotest for php written in php
Stars: ✭ 19 (+11.76%)
Mutual labels:  testing-tools
CodeBaseManager
Multi-langage CLI tool to manage your code base
Stars: ✭ 11 (-35.29%)
Mutual labels:  testing-tools
li18nt
🌎 Lint your i18n translation files. Detect conflicting properties, duplicates and make it more readable and easier to maintain by formatting it!
Stars: ✭ 29 (+70.59%)
Mutual labels:  cli-app
go-test-report
Captures go test output and parses it into a single self-contained HTML file.
Stars: ✭ 68 (+300%)
Mutual labels:  testing-tools
maintainer
👨‍💻 🐳 Generate personal daily reports or summary, AUTHORS, CONTRIBUTING, CHANGELOG and so on for GitHub user or repository.
Stars: ✭ 199 (+1070.59%)
Mutual labels:  cli-app
Orion-Stress-Tester
A simple, efficient and accurate stress tester, support HTTP, WebSocket and TCP
Stars: ✭ 32 (+88.24%)
Mutual labels:  testing-tools
whynote
Command Line Interface to Creating Notes/Tasks
Stars: ✭ 15 (-11.76%)
Mutual labels:  cli-app
surger
⚡ Is there surge pricing around me right now?
Stars: ✭ 20 (+17.65%)
Mutual labels:  cli-app
effcee
Effcee is a C++ library for stateful pattern matching of strings, inspired by LLVM's FileCheck
Stars: ✭ 76 (+347.06%)
Mutual labels:  testing-tools
tressa
Little test utility
Stars: ✭ 18 (+5.88%)
Mutual labels:  testing-tools
roundup
un-official mirror of http://hg.code.sf.net/p/roundup/code -- used for CI. Please visit https://issues.roundup-tracker.org for finding starter issues or log new issues.
Stars: ✭ 20 (+17.65%)
Mutual labels:  cli-app
ctest
A simple portable C test runner
Stars: ✭ 17 (+0%)
Mutual labels:  testing-tools
twifo-cli
🐤 Get user information of a Twitter user.
Stars: ✭ 24 (+41.18%)
Mutual labels:  cli-app
bookish spork
Erlang library for testing http requests
Stars: ✭ 82 (+382.35%)
Mutual labels:  testing-tools
vPAV
viadee Process Application Validator
Stars: ✭ 47 (+176.47%)
Mutual labels:  testing-tools
test-real-styles
(test-)framework agnostic utilities to test real styling of (virtual) dom elements
Stars: ✭ 37 (+117.65%)
Mutual labels:  testing-tools

Heel Gun

Latest Version Build Status dependency status Minimum Rust Version Stable

Test your HTTP server for robustness to arbitrary inputs. heel-gun is a tool which performs several HTTP requests to identify cases where the server misbehaves. Requests are built randomly based on a set of configurable rules.

Using

This CLI tool expects two main arguments: the base URL to the HTTP server, and a configuration file defining the HTTP endpoints to test and how these arguments are generated.

USAGE:
    heel-gun [OPTIONS] <url> <config> [outdir]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

OPTIONS:
    -N <n>        number of iterations to test for each target [default: 100]

ARGS:
    <url>       the base URL to test
    <config>    path to configuration file
    <outdir>    path to the output directory containing the logs [default: output]

Example:

heel-gun http://testmachine.myspot.net:8080 resources/example.yaml -N 4

This will test the server with a random assortment of requests, such as these:

GET http://testmachine.myspot.net:8080/cool-endpoint/lBtY2g18?id=0&more=891134
GET http://testmachine.myspot.net:8080/cool-endpoint/ie9EMV9G?id=-1&more=238164
GET http://testmachine.myspot.net:8080/cool-endpoint/dJ7iV7cs?id=null&more=415128
GET http://testmachine.myspot.net:8080/cool-endpoint/HCvpC90k?id=null&more=902781
POST http://testmachine.myspot.net:8080/user/UBwqFvFnXh?admin=undefined
POST http://testmachine.myspot.net:8080/user/LkspwEu0g4?admin=null
POST http://testmachine.myspot.net:8080/user/pkgagTBnem?admin
POST http://testmachine.myspot.net:8080/user/rRdlgzll2D?admin=false

And record problematic responses in a CSV file:

method,uri,reason,file
GET,http://testmachine.myspot.net:8080/cool-endpoint/lBtY2g18?id=0&more=891134,501 Not Implemented
GET,http://testmachine.myspot.net:8080/cool-endpoint/ie9EMV9G?id=-1&more=238164,501 Not Implemented
GET,http://testmachine.myspot.net:8080/cool-endpoint/dJ7iV7cs?id=null&more=415128,501 Not Implemented
GET,http://testmachine.myspot.net:8080/cool-endpoint/HCvpC90k?id=null&more=902781,501 Not Implemented
POST,http://testmachine.myspot.net:8080/user/UBwqFvFnXh?admin=undefined,501 Not Implemented
POST,http://testmachine.myspot.net:8080/user/LkspwEu0g4?admin=null,501 Not Implemented
POST,http://testmachine.myspot.net:8080/user/pkgagTBnem?admin,501 Not Implemented
POST,http://testmachine.myspot.net:8080/user/rRdlgzll2D?admin=false,501 Not Implemented

Moreover, the HTTP bodies of server error responses are saved as independent files in an output directory:

output/
├── GET
│   └── cool-endpoint
│       ├── lBtY2g18?id=0&more=891134
│       ├── ie9EMV9G?id=-1&more=238164
│       ├── dJ7iV7cs?id=null&more=415128
│       └──  HCvpC90k?id=null&more=902781
└── POST
    └── user
        ├── UBwqFvFnXh?admin=undefined
        ├── LkspwEu0g4?admin=null
        ├── pkgagTBnem?admin
        └── rRdlgzll2D?admin=false

For the time being, problematic responses are either HTTP responses with a 5xx status code, or requests which result in a broken or timed out connection.

<config> is a file describing a set of rules for producing URI paths and other parameters such as query string arguments. The schema is available as a TypeScript type definition file (heel-gun.d.ts). See also the resources directory for examples. Support for Play framework "routes" definitions is available as an experimental feature.

You can also define the RUST_LOG environment variable for additional logging output (as defined by log, to one of "error", "warn", "info", "debug" or "trace"):

RUST_LOG=info heel-gun http://testmachine.myspot.net:8080 resources/example.yaml

License and Warning Note

Licensed under either of

at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

In spite of the main goal of testing for server robustness, this tool may also present itself as capable of doing dangerous mistakes (such as running in production), poorly intended actions (DoS attacks), and other sorts of misuse. Please be responsible when using heel-gun. As defined by the aforementioned license, all authors and contributors to heel-gun cannot be held liable for any damage which may occur from the use of this software.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].