#http-server #testing-http #http #http-request #testing #cli #async

app heel-gun

用于测试HTTP服务器对任意请求的鲁棒性的工具

2个版本

0.1.1 2019年6月25日
0.1.0 2019年6月25日

#35 in #testing-http

Apache-2.0 OR MIT

30KB
530

Heel Gun

Latest Version Build Status dependency status Minimum Rust Version Stable

测试您的HTTP服务器对任意输入的鲁棒性。 heel-gun是一个工具,它执行多个HTTP请求以识别服务器行为不当的情况。请求基于一组可配置的规则随机构建。

使用

此CLI工具期望两个主要参数:HTTP服务器的基本URL,以及定义要测试的HTTP端点和如何生成这些参数的配置文件。

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]

示例

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

这将使用一组随机的请求测试服务器,例如这些

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

并将有问题响应记录在CSV文件中

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

此外,服务器错误响应的HTTP正文作为独立的文件保存在输出目录中

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

目前,有问题响应是HTTP响应状态码为5xx,或者请求导致连接中断或超时。

<config>是一个描述生成URI路径和其他参数(如查询字符串参数)的规则的文件。该模式作为TypeScript类型定义文件(heel-gun.d.ts)提供。请参阅资源目录中的示例。支持作为实验性功能提供的Play框架"routes"定义。

您还可以定义RUST_LOG环境变量以获得额外的日志输出(由log定义,可以是"error"、"warn"、"info"、"debug"或"trace"之一)

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

许可证和警告说明

许可协议为以下之一

由您选择。

除非您明确声明,否则根据Apache-2.0许可证定义,您提交的任何旨在包含在工作中的贡献,都应双许可,如上所述,没有任何额外的条款或条件。

尽管主要目标是测试服务器的健壮性,但此工具也可能表现出能够进行危险的错误(例如在生产环境中运行),不慎的行为(DoS攻击)和其他类型的滥用。请在使用heel-gun时负责。根据上述许可证,heel-gun的所有作者和贡献者不对由此软件使用造成的任何损害承担责任。

依赖项

~15–25MB
~336K SLoC