17 个版本
0.8.2 | 2023年2月7日 |
---|---|
0.8.1 | 2022年7月29日 |
0.7.2 | 2021年9月3日 |
0.7.1 | 2020年11月27日 |
0.1.0 | 2017年6月14日 |
#27 在 HTTP 客户端 中
616 每月下载量
85KB
2K SLoC
Drill
Drill 是一个基于 Rust 编写的 HTTP 负载测试应用程序。该项目的主要目标是创建一个真正轻量级的工具,作为其他需要 JVM 和其他资源的工具的替代品。
您可以使用 YAML 格式编写基准文件,描述您想要测试的所有内容。
它受到 Ansible 语法的启发,因为它非常易于使用和扩展。
以下是一个 benchmark.yml 的示例
---
concurrency: 4
base: 'https://127.0.0.1:9000'
iterations: 5
rampup: 2
plan:
- name: Include comments
include: comments.yml
- name: Fetch users
request:
url: /api/users.json
- name: Fetch organizations
request:
url: /api/organizations
- name: Fetch account
request:
url: /api/account
assign: foo
- name: Fetch manager user
request:
url: /api/users/{{ foo.body.manager_id }}
- name: Assert request response code
assert:
key: foo.status
value: 200
- name: Assign values
assign:
key: bar
value: "2"
- name: Assert values
assert:
key: bar
value: "2"
- name: Fetch user from assign
request:
url: /api/users/{{ bar }}
- name: Fetch some users
request:
url: /api/users/{{ item }}
with_items:
- 70
- 73
- 75
- name: Tagged user request
request:
url: /api/users/70
tags:
- tag_user
- name: Fetch some users by hash
request:
url: /api/users/{{ item.id }}
with_items:
- { id: 70 }
- { id: 73 }
- { id: 75 }
- name: Fetch some users by range, index {{ index }}
request:
url: /api/users/{{ item }}
with_items_range:
start: 70
step: 5
stop: 75
- name: Fetch some users from CSV, index {{ index }}
request:
url: /api/users/contacts/{{ item.id }}
with_items_from_csv: ./fixtures/users.csv
shuffle: true
- name: POST some crafted JSONs stored in CSV, index {{ index }}
request:
url: /api/transactions
method: POST
body: '{{ item.txn }}'
headers:
Content-Type: 'application/json'
with_items_from_csv:
file_name: ./fixtures/transactions.csv
quote_char: "\'"
- name: Fetch no relative url
request:
url: https://127.0.0.1:9000/api/users.json
- name: Interpolate environment variables
request:
url: https://127.0.0.1:9000/api/{{ EDITOR }}
- name: Support for POST method
request:
url: /api/users
method: POST
body: foo=bar&arg={{ bar }}
- name: Login user
request:
url: /login?user=example&password=3x4mpl3
- name: Fetch counter
request:
url: /counter
assign: memory
- name: Fetch counter
request:
url: /counter
assign: memory
- name: Fetch endpoint
request:
url: /?counter={{ memory.body.counter }}
- name: Reset counter
request:
method: DELETE
url: /
- name: Exec external commands
exec:
command: "echo '{{ foo.body }}' | jq .phones[0] | tr -d '\"'"
assign: baz
- name: Custom headers
request:
url: /admin
headers:
Authorization: Basic aHR0cHdhdGNoOmY=
X-Foo: Bar
X-Bar: Bar {{ memory.headers.token }}
- name: One request with a random item
request:
url: /api/users/{{ item }}
with_items:
- 70
- 73
- 75
shuffle: true
pick: 1
如您所见,您可以通过不同的方式玩转插值。这将允许您指定具有不同请求及其之间依赖关系的基准。
如果您想了解更多关于基准文件语法的知识,请 阅读此内容
安装
目前,获取 drill
最简单的方法是访问 最新版本 页面,并下载您平台上的二进制文件。
如果您系统中有 Rust,安装 drill
的另一种方法是使用 cargo
cargo install drill
drill --benchmark benchmark.yml --stats
或下载源代码并编译它
git clone [email protected]:fcsonline/drill.git && cd drill
cargo build --release
./target/release/drill --benchmark benchmark.yml --stats
依赖关系
编译 Drill 需要 OpenSSL,无论是通过 cargo install
还是使用 cargo build
从源代码编译。
根据您的平台,依赖项的名称可能会有所不同。
Linux
使用您喜欢的包管理器安装 libssl-dev
和 pkg-config
包(如果找不到 libssl-dev
,请尝试其他名称,如 openssl
或 openssl-devel
)。
macOS
首先,安装 Homebrew 包管理器。
然后使用 Homebrew 安装 openssl
Windows
首先,安装 vcpkg。
然后运行 vcpkg install openssl:x64-windows-static-md
。
演示
功能
这是当前版本 drill
所支持的所有功能的列表
- 并发:选择并发迭代次数来运行基准测试。
- 多迭代:指定运行基准测试的迭代次数。
- 预热:指定
drill
开始所有迭代所需的时间(秒)。 - 延迟:在请求之间引入可控的延迟。例如:delay.yml
- 动态URL:在URL中使用动态插值执行请求,例如:
/api/users/{{ item }}
- 动态头部:使用动态头部执行请求。例如:headers.yml
- 插值环境变量:设置环境变量,例如:
/api/users/{{ EDITOR }}
- 执行:使用测试计划数据执行远程命令。
- 断言:在测试计划期间断言值。例如:iterations.yml
- 请求依赖:使用
assign
和 URL 插值创建请求之间的依赖关系。 - 分割文件:将基准测试组织到多个文件中并包含它们。
- CSV支持:读取CSV文件并构建N个请求,使用CSV数据填充动态插值。
- HTTP方法:使用不同的HTTP方法(如GET、POST、PUT、PATCH、HEAD或DELETE)构建请求。
- Cookie支持:创建具有会话的基准测试,因为Cookie会在请求之间传播。
- 统计:获取所有请求的良好统计数据。例如:cookies.yml
- 阈值:将当前基准测试性能与存储的会话进行比较,如果超过阈值则失败。
- 标签:通过标签指定测试计划项目。
测试它
转到 example
目录,您将找到一个 README,说明如何在安全环境中进行测试。
免责声明:我们强烈建议不要在生产环境中运行密集型基准测试。
命令行界面
完整的CLI选项列表,可在 drill --help
下找到
drill 0.8.2
HTTP load testing application written in Rust inspired by Ansible syntax
USAGE:
drill [FLAGS] [OPTIONS] --benchmark <benchmark>
FLAGS:
-h, --help Prints help information
--list-tags List all benchmark tags
--list-tasks List benchmark tasks (executes --tags/--skip-tags filter)
-n, --nanosec Shows statistics in nanoseconds
--no-check-certificate Disables SSL certification check. (Not recommended)
-q, --quiet Disables output
--relaxed-interpolations Do not panic if an interpolation is not present. (Not recommended)
-s, --stats Shows request statistics
-V, --version Prints version information
-v, --verbose Toggle verbose output
OPTIONS:
-b, --benchmark <benchmark> Sets the benchmark file
-c, --compare <compare> Sets a compare file
-r, --report <report> Sets a report file
--skip-tags <skip-tags> Tags to exclude
--tags <tags> Tags to include
-t, --threshold <threshold> Sets a threshold value in ms amongst the compared file
-o, --timeout <timeout> Set timeout in seconds for all requests
路线图
- 完善和改进插值引擎
- 添加写入文件支持
捐赠
如果您赞赏在这个项目中做的所有工作,小额捐赠始终受欢迎
贡献
这个项目最初是一个学习Rust的副项目,所以我相信它充满了错误和需要改进的领域。如果您认为您可以对代码进行调整以使其更好,我将非常欢迎拉取请求。 ;)
依赖关系
~11–28MB
~398K SLoC