Skip to content

SinuxLee/wrk-usage

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

wrk-usage 项目介绍

本项目展示了如何利用 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

主要功能

  1. 自定义请求生成
  • 通过 player.lua 可灵活定义多步请求流程(登录 → 获取信息 → Token 验证
  • 每个请求可自定义 HTTP 方法、路径、Header 与 Body,支持从前一步响应中提取数据
  1. 精确 RPS 控制
  • 在 wrk.lua 中使用 FFI 调用 clock_gettime 获取毫秒级当前时间
  • 维护 max_rpscurrent_rps,在超过阈值时自动 sleep,避免瞬时爆发请求
  1. 响应解析与状态追踪
  • 在 response 回调中,解析响应体并调用 player.lua 中的 parse_rsp,实现数据驱动的下一步请求
  • done 回调输出每个线程的请求数和响应数,方便对比和诊断性能瓶颈
  1. 通用工具函数
  • 日志打印:printLogprintErrorprintInfo 等,支持可控级别的日志输出
  • 数据结构操作:表拷贝、合并、过滤、唯一化等多种常用方法
  • 文件读写、路径处理:io.readfile、io.writefile、io.pathinfo 等

快速上手

  1. 克隆仓库
     git clone https://github.com/SinuxLee/wrk-usage.git
     cd wrk-usage
  2. 修改目标地址
  3. 赋予执行权限并运行
      chmod +x start.sh
      ./start.sh
  4. 查看输出
    • 控制台将打印延迟分布(Latency)和各线程的请求/响应统计

自定义扩展

  • 增加请求步骤:在 player.lua 的 fun 数组中添加新的请求函数和对应的结果处理函数
  • 调整 RPS 策略:修改 THREAD_MAX_RPSdelay() 逻辑,实现平滑爬升、突发等多种模式
  • 数据持久化:可在 done 回调中将结果写入文件,或结合第三方工具自动生成报告

许可证

本项目采用 MIT 许可证,详见 LICENSE 文件

欢迎 StarFork 并提出 Issues 或 PR,一起完善更丰富的 wrk 使用示例!

About

wrk example

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published