本项目展示了如何利用 wrk 进行复杂场景的性能测试,包括:
- 按照脚本定义的顺序发起登录(
/auth/v1/inner/access_token
)、获取用户信息、验证 Token 等请求流程 - 通过 Lua 的 FFI 接口获取毫秒级时间戳,用于精确控制 RPS 和间隔
- 将测试流程拆分为可重用的模块:请求逻辑(
wrk.lua
)、玩家模拟(player.lua
)、通用函数(functions.lua
)、JSON 编解码(json.lua
)等 - 通过 start.sh 一键启动测试,默认使用 4 个线程、200 个并发,持续 120 秒,并输出延迟统计和每个线程的请求/响应数
.
├── start.sh # 启动脚本,一行命令运行 wrk
├── wrk.lua # wrk 主脚本,定义 setup/init/request/response/done 四大回调
├── player.lua # 玩家模拟器,按顺序生成登录、查询、验证等请求
├── functions.lua # 通用日志、Dump、类定义、表操作等辅助函数
├── json.lua # 轻量级 JSON 编解码库
├── md5.lua # MD5 计算库
├── LICENSE # MIT 许可证
└── .gitignore
- 自定义请求生成
- 通过 player.lua 可灵活定义多步请求流程(登录 → 获取信息 → Token 验证)
- 每个请求可自定义 HTTP 方法、路径、Header 与 Body,支持从前一步响应中提取数据
- 精确 RPS 控制
- 在 wrk.lua 中使用 FFI 调用 clock_gettime 获取毫秒级当前时间
- 维护
max_rps
与current_rps
,在超过阈值时自动 sleep,避免瞬时爆发请求
- 响应解析与状态追踪
- 在 response 回调中,解析响应体并调用 player.lua 中的 parse_rsp,实现数据驱动的下一步请求
- done 回调输出每个线程的请求数和响应数,方便对比和诊断性能瓶颈
- 通用工具函数
- 日志打印:
printLog
、printError
、printInfo
等,支持可控级别的日志输出 - 数据结构操作:表拷贝、合并、过滤、唯一化等多种常用方法
- 文件读写、路径处理:io.readfile、io.writefile、io.pathinfo 等
- 克隆仓库
git clone https://github.com/SinuxLee/wrk-usage.git cd wrk-usage
- 修改目标地址
- 编辑 start.sh 中的 http://172.29.64.1:8086 为你的测试目标
- 赋予执行权限并运行
chmod +x start.sh ./start.sh
- 查看输出
- 控制台将打印延迟分布(Latency)和各线程的请求/响应统计
- 增加请求步骤:在
player.lua
的 fun 数组中添加新的请求函数和对应的结果处理函数 - 调整 RPS 策略:修改
THREAD_MAX_RPS
或delay()
逻辑,实现平滑爬升、突发等多种模式 - 数据持久化:可在 done 回调中将结果写入文件,或结合第三方工具自动生成报告
本项目采用 MIT 许可证,详见 LICENSE 文件
欢迎 Star、Fork 并提出 Issues 或 PR,一起完善更丰富的 wrk 使用示例!