网站首页 > 开源技术 正文
对于一个 HTTP 服务的开发来说,基准性能测试往往十分必要,它能够测量服务在大并发量下的响应时间、延迟和传输速率,为系统的性能估算,和接口的进一步优化,提供翔实的实验依据。Wrk,这个现代化的 HTTP 基准性能测试工具,以其简单的使用方法,和强大的可扩展性,在同类工具中备受欢迎。
简介
Wrk,是 wg 在 Github 上开源的 HTTP 基准测试工具,项目位于 https://github.com/wg/wrk,目前版本为 4.1.0。Wrk 使用 C 语言编写,结合了多线程的设计,以及可伸缩的事件提示系统,如 epoll 和 kqueue 等,可以在单个多核 CPU 上生成大量的 HTTP 请求。Wrk 还提供了基于 LuaJIT 的 Lua 脚本来进行扩展,生成更为复杂的 HTTP 请求,提供更多维度的测试数据等,大大提升了其扩展能力。
安装
Wrk 使用方便,在 Linux 上,可直接使用包管理工具安装,如在 Centos / RHEL 7 上:
yum install https://extras.getpagespeed.com/release-el7-latest.rpm
yum install wrk
也可以自行编译:
sudo yum groupinstall 'Development Tools'
sudo yum install -y openssl-devel git
git clone https://github.com/wg/wrk.git wrk
cd wrk
make
sudo cp wrk /somewhere/in/your/PATH
在 Mac OS X 上,使用 Homebrew 直接安装:
brew install wrk
示例
Wrx 作为一个命令行工具,主要通过命令行参数进行配置和运行,常用的参数包括
- -c, --connections:总连接数
- -d, --duration:测试总时长
- -t, --threads:使用线程数
- -s, --script:LuaJIT 脚本
- -H, --header:HTTP请求头
- --latency:输出详细的延迟数据
- --timeout:请求的超时时间
给出一个基本测试例子。对于 HTTP 服务 http://127.0.0.1:8080/index.html,运行命令:
wrk -t12 -c400 -d30s http://127.0.0.1:8080/index.html
Wrk 使用 12 个线程,共 400 个 HTTP 连接,测试持续 30 秒。当测试完成后,命令行输出
Running 30s test @ http://127.0.0.1:8080/index.html
12 threads and 400 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 635.91us 0.89ms 12.92ms 93.69%
Req/Sec 56.20k 8.07k 62.00k 86.54%
22464657 requests in 30.00s, 17.76GB read
Requests/sec: 748868.53
Transfer/sec: 606.33MB
可以看到,wrk 输出了对于每个线程统计后得到的延迟和每秒请求数的平均值、标准差、极大值和标准差百分比。
Wrk 还提供了使用基于 LuaJIT 的 Lua 脚本进行扩展,脚本在每个线程中都有独立的运行环境,可在 wrk 运行的配置、测试运行时和结束时执行相应脚本。Wrk 提供了一个全局的 Lua 表结构,包括协议、主机、端口、请求方法、请求路径等,可以在脚本中引用,也可以进行修改配置,实现全局的请求自定义。例如,我们可以配置一个 POST 方法提交表格的测试:
wrk.method = "POST"
wrk.body = "foo=bar&baz=quux"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"
我们还可以使用在测试运行时所提供的函数,进行请求和响应的自定义。例如,我们可以使用 request 函数进行请求的计数:
counter = 0
request = function()
path = "/" .. counter
wrk.headers["X-Counter"] = counter
counter = counter + 1
return wrk.format(nil, path)
end
对于每个请求,把请求路径加上当前的计数,并在请求头中添加 X-Token,附带当前计数值。也可以使用 delay 函数,配置自定义的请求延时:
function delay()
return math.random(10, 50)
end
本例中,在每次请求之前,添加 10 到 50 毫秒的随机延迟。我们还可以结合 request 和 response,实现请求的身份验证:
token = nil
path = "/authenticate"
request = function()
return wrk.format("GET", path)
end
response = function(status, headers, body)
if not token and status == 200 then
token = headers["X-Token"]
path = "/resource"
wrk.headers["X-Token"] = token
end
end
在这个例子中,路径 path 默认指向验证接口,而对于每个测试返回的相应,都在响应头添加 X-Token,进行身份验证,并把路径指向资源接口 /resource,允许访问资源。
总结
Wrk 作为一个 HTTP 基准性能测试工具,其具有优秀的性能,能够最大限度地挑战被测试服务的性能极限;同时,wrk 提供了基于 LuaJIT 的脚本扩展功能,在保证性能的基础上,提供了极为方便的扩展功能,可以通过编写脚本实现复杂的测试逻辑,使其功能更为强大,值得在实践中进行尝试使用。
猜你喜欢
- 2024-10-12 全职宝妈的我啊这肚子,阳康一过大了几圈
- 2024-10-12 佟丽娅称选手像易烊千玺,男方粉丝不干,饭圈太敏感会四面树敌吗
- 2024-10-12 马苏素颜开直播健身,穿健美裤大秀“木瓜臀”,女生都吃不下饭了
- 2024-10-12 熊黛林穿开叉礼服出席活动秀丰满上围大长腿,小肚腩却抢镜了
- 2024-10-12 周扬青林允合影曝光,“网红脸”一览无遗,网友:凡事就怕对比
- 2024-10-12 NalfWrkxfV(wfdwyxqxjf-rh)
- 2024-10-12 阿森纳VS切尔西,欧联杯冠军之争,你看好谁?是埃梅里还是萨里?
- 2024-10-12 大学生志愿者三下乡支教活动顺利开展
- 2024-10-12 他是圈内隐形低调富豪,明明家里有亿万家产,还跑龙套
- 2024-10-12 他曾建议开除岳云鹏,成名后岳云鹏最感激他,网友:男人的气度
你 发表评论:
欢迎- 03-19基于layui+springcloud的企业级微服务框架
- 03-19开箱即用的前端开发模板,扩展Layui原生UI样式,集成第三方组件
- 03-19SpringMVC +Spring +Mybatis + Layui通用后台管理系统OneManageV2.1
- 03-19SpringBoot+LayUI后台管理系统开发脚手架
- 03-19layui下拉菜单form.render局部刷新方法亲测有效
- 03-19Layui 遇到的坑(记录贴)(layui chm)
- 03-19基于ASP.NET MVC + Layui的通用后台开发框架
- 03-19LayUi自定义模块的定义与使用(layui自定义表格)
- 最近发表
-
- 基于layui+springcloud的企业级微服务框架
- 开箱即用的前端开发模板,扩展Layui原生UI样式,集成第三方组件
- SpringMVC +Spring +Mybatis + Layui通用后台管理系统OneManageV2.1
- SpringBoot+LayUI后台管理系统开发脚手架
- layui下拉菜单form.render局部刷新方法亲测有效
- Layui 遇到的坑(记录贴)(layui chm)
- 基于ASP.NET MVC + Layui的通用后台开发框架
- LayUi自定义模块的定义与使用(layui自定义表格)
- Layui 2.9.11正式发布(layui2.6)
- Layui 2.9.13正式发布(layui2.6)
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)