当前位置: 首页 > article >正文

wrk如何测试post请求

wrk git地址

https://github.com/wg/wrk

wrk 默认是针对 GET 请求的,但它也可以通过添加自定义的 HTTP 请求体头部信息来进行 POST 请求的压测。以下是详细的步骤:

wrk -t4 -c100 -d30s -s post.lua http://example.com
  • -t4:使用 4 个线程。
  • -c100:模拟 100 个并发连接。
  • -d30s:测试持续 30 秒。
  • -s post.lua:加载一个自定义的 Lua 脚本 post.lua,用于指定 POST 请求的内容。

编写 post.lua 脚本

创建一个 post.lua 文件并写入以下内容:

wrk.method = "POST"
wrk.body   = '{"key1":"value1", "key2":"value2"}'
wrk.headers["Content-Type"] = "application/json"
参数说明:
  1. wrk.method:指定请求方法为 POST
  2. wrk.body:定义请求的 JSON 数据。
  3. wrk.headers["Content-Type"]:指定 HTTP 头部的 Content-Typeapplication/json

完整示例

假设你的 API 是 http://example.com/api,需要发送以下 POST 请求:

  • URL: http://example.com/api
  • Body: {"username": "testuser", "password": "testpass"}
  • Headers: Content-Type: application/json
脚本内容:
wrk.method = "POST"
wrk.body   = '{"username": "testuser", "password": "testpass"}'
wrk.headers["Content-Type"] = "application/json"

执行命令:

wrk -t2 -c50 -d10s -s post.lua http://example.com/api
  • -t2:使用 2 个线程。
  • -c50:模拟 50 个并发连接。
  • -d10s:测试持续 10 秒。

动态参数的高级脚本

如果需要动态生成请求体(例如每次发送不同的参数),可以在 Lua 脚本中自定义逻辑:

counter = 0

request = function()
   counter = counter + 1
   local body = string.format('{"username": "user%d", "password": "pass%d"}', counter, counter)
   wrk.body = body
   wrk.headers["Content-Type"] = "application/json"
   return wrk.format("POST")
end

在这个脚本中,每次请求都会生成不同的 usernamepassword

分析测试结果

运行完成后,wrk 会输出以下指标:

  • Requests/sec:每秒完成的请求数。
  • Latency:延迟(平均、最大、最小)。
  • Transfer/sec:数据传输速度。

通过这些结果,可以评估 POST 请求的性能表现。


http://www.kler.cn/a/441235.html

相关文章:

  • Prompt提示词完整案例:让chatGPT成为“书单推荐”的高手
  • 【MySQL】悲观锁和乐观锁的原理和应用场景
  • 【C语言】内存函数
  • 在线课堂小程序设计与实现(LW+源码+讲解)
  • android 音视频系列引导
  • 【llm对话系统】大模型 RAG 之回答生成:融合检索信息,生成精准答案
  • LabVIEW在国家项目中的应用与开发要求
  • 如何设计高效的商品系统并提升扩展性:从架构到实践的全方位探索
  • 【大数据】-- 读放大和写放大
  • 【$25000】利用Zendesk Nday获取漏洞赏金
  • 基于STM32设计的粮食仓库(粮仓)环境监测系统_284
  • Flutter:ListView实现一个可左右滑动的商品列表
  • 【Unity功能集】TextureShop纹理工坊(二)图层(上)
  • 单词谜(详解版)
  • python —— 常用命令行的命令
  • JS逆向--反调试(SoJson为例)
  • 从构想到实现:EasyOne 多模态 AI 产品开发历程
  • 集成自然语言理解服务,让应用 “听得懂人话”
  • 解决Linux 虚拟机网段与虚拟机配置网段不一致
  • IP6822为智能手机提供无线充电方案的无线充电发射微控制SOC芯片
  • Day25 C++ 文件和流
  • SLM510A系列——24V,15到150mA单通道可调电流线性恒流LED驱动芯片
  • 浅说单调队列
  • java中输入输出流
  • vue3 父组件调用子组件 el-drawer 抽屉
  • linux 串口调试工具minicom使用详解