Wrk压测发送Post请求的正确姿势

2024-01-07 09:36

本文主要是介绍Wrk压测发送Post请求的正确姿势,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、Wrk简介

wrk 是一个能够在单个多核 CPU 上产生显著负载的现代 HTTP 基准测试工具。它采用了多线程设计,并使用了像 epoll 和 kqueue 这样的可扩展事件通知机制。此外,用户可以指定 LuaJIT 脚本来完成 HTTP 请求生成、响应处理和自定义报告等功能。

二、Wrk安装

wrk仅支持Linux和Unix系列,并不支持Windows

  1. Clone wrk
git clone https://github.com/wg/wrk.git
  1. 编译安装
cd wrk; make; cp wrk /usr/local/bin

3.验证安装

wrk --helpUsage: wrk <options> <url>                            Options:                                            -c, --connections <N>  Connections to keep open  -d, --duration <T>  Duration of test -t, --threads <N>  Number of threads to use -s, --script <S>  Load Lua script file       -H, --header <H>  Add header to request --latency Print latency statistics --timeout <T>  Socket/request timeout -v, --version          Print version details Numeric arguments may include a SI unit (1k, 1M, 1G)Time arguments may include a time unit (2s, 2m, 2h)-c 与服务器建立并保持的TCP连接数,其实就是并发数
-d 压测的持续时间(单位为秒),默认为 10s
-t 压测的线程数。正常设置为cpu核心线程数的2-4倍即可。如果线程数过多,会因线程上下文切换频繁,影响到压测效果
-s 指定Lua脚本路径。可以通过Lua脚本实现复杂请求
-H 指定请求的 HTTP Header
--latency 压测结束后,打印响应时间统计消息 
--timeout 请求超时时间 
-v 版本信息

三、Wrk实战压测实战

  1. Get请求
wrk -t32 -c5000 -d60s --timeout 30s --latency https://www.baidu.com/Running 1m test @ https://www.baidu.com/32 threads and 5000 connectionsThread Stats Avg Stdev Max +/- StdevLatency 6.59s     5.02s   29.57s    79.01%Req/Sec 5.14      4.82    36.00     83.11%Latency Distribution50% 4.91s 75% 8.24s 90% 13.38s 99% 25.42s 4677 requests in 1.00m, 51.98MB readSocket errors: connect 40, read 0, write 0, timeout 27
Requests/sec: 77.82
Transfer/sec: 0.86MBa、 Thread Stats 线程统计,包括响应时间以及请求时间
Latency:响应时间,有平均值、标准偏差、最大值、正负一个标准差占比。
Req/Sec:每个线程每秒完成的请求数, 同样有平均值、标准偏差、最大值、正负一个标准差占比。
b、 Latency Distribution 响应时间分布
50%:50% 的响应时间为4.91s。
75%:75% 的响应时间为8.24s 。
90%:90% 的响应时间为13.38s
99%:99% 的响应时间为25.42s。
c、 4677 requests in 1.00m, 51.98MB read 1m 完成的总请求数(4677)和数据读取量(51.98MB)
d、 Socket errors: connect 40, read 0, write 0, timeout 27 错误统计,会统计 connect 连接失败请求个数(40个)、读失败请求个数、写失败请求个数、超时请求个数(27个)。
e、 Requests/sec: 77.82 每秒请求数为77.82(QPS)
f、 Transfer/sec: 0.86MB 平均每秒读取0.86MB数据(TPS)

Get请求非常简单,不做过多赘述。

2.Post请求【重点】

  1. 编写执行Post请求的lua脚本,
--vim post.luawrk.method = "POST"
wrk.body = "{\"gaid\":\"96a940e6-ada5-4e13-9efb-e444610240cf\",\"ip\":\"195.16.186.34\",\"ua\":\"4.10.0 (Linux; U; Android 13; 23021RAAEG MIUI/V15.0.14.0.TMTMIXM) (mipicks; 4003085; 2536)\"}"
wrk.headers["Content-Type"] = "application/json"
response = function(status, headers, body)print(body) --调试用,正式测试时需要关闭,因为解析response非常消耗资源
end

Ps:划重点这里网上几乎都是错误的教程,错在将写成 wrk.body = ‘{“gaid”:“96a940e6-ada5-4e13-9efb-e444610240cf”,“ip”:“195.16.186.34”,“ua”:“4.10.0 (Linux; U; Android 13; 23021RAAEG MIUI/V15.0.14.0.TMTMIXM) (mipicks; 4003085; 2536)”}’ 实际上需要对Body体的Json进行转义并且双引号引用

  1. 调用post.lua脚本进行压测调用
wrk -t 16 -c 100 -d 30s --latency --timeout 5s --script=post.lua http://10.90.34.194:8080/v1/click/boosted

四、Wrk总结

总体使用起来非常简单,需要注意的就是执行Post请求压测的时候一定要把lua脚本中的wrk.body写正确,不然被压测Server是取不到Body直接报错的。

五、扫码关注 发现精彩内容

在这里插入图片描述

这篇关于Wrk压测发送Post请求的正确姿势的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/579491

相关文章

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

全面解析Golang 中的 Gorilla CORS 中间件正确用法

《全面解析Golang中的GorillaCORS中间件正确用法》Golang中使用gorilla/mux路由器配合rs/cors中间件库可以优雅地解决这个问题,然而,很多人刚开始使用时会遇到配... 目录如何让 golang 中的 Gorilla CORS 中间件正确工作一、基础依赖二、错误用法(很多人一开

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

Springboot如何正确使用AOP问题

《Springboot如何正确使用AOP问题》:本文主要介绍Springboot如何正确使用AOP问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录​一、AOP概念二、切点表达式​execution表达式案例三、AOP通知四、springboot中使用AOP导出

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1