wrk HTTP打流测试工具

这篇具有很好参考价值的文章主要介绍了wrk HTTP打流测试工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

介绍

官方解释 wrk is a modern HTTP benchmarking tool capable of generating significant load when run on a single multi-core CPU. It combines a multithreaded design with scalable event notification systems such as epoll and kqueue.

它结合了多线程以及类似epoll、kqueue的多事件模式,可以在单机多核CPU的条件下构造大量的负载。

工具 优点         劣点
wrk

wrk的优势从我这段时间的一个接口压测来看,主要有以下几点:

  • 轻量级的性能测试工具
  • 安装简单(git clone即可)
  • 学习简单,稍微看看文档就可以直接上手
  • 基于系统自带的高性能I/O机制,利用异步的事件驱动框架,通过很少的线程可以压出跟大的并发量(对于测试宿主机几乎无cpu的压力)
wrk的劣势主要是目前支持单机压测,即不支持多机器对目标的压测,即每次压测的机器地址很难去改变,可以改变压测的接口地址,但是压测的机器地址变不了
安装

git clone https://gitee.com/mirrors/wrk.git

参数
-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,lua脚本,使用方法往下看
-H, --header      <H>  Add header to request,添加http header, 比如. “User-Agent: wrk”
--latency          Print latency statistics,显示延迟统计
--timeout, -T:    <T>  Socket/request timeout,超时的时间
-v, --version          Print version details

例子

wrk -c 10000 -t 100 http://127.0.0.1:80/test -d 20s -T2 --latency

Running 20s test @ http://127.0.0.1/test
  100 threads and 10000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   146.36ms  253.95ms   2.00s    88.39%
    Req/Sec     1.24k   298.79     3.61k    69.12%
  Latency Distribution
     50%   34.30ms
     75%  176.93ms
     90%  459.42ms
     99%    1.16s
  2484504 requests in 20.10s, 781.90MB read
  Socket errors: connect 0, read 0, write 0, timeout 9316
Requests/sec: 123612.53
Transfer/sec:     38.90MB
 借助lua脚本进行复杂测试

wrk默认是采用GET请求方式进行接口测试,如果需要使用POST请求就需要使用到lua脚本,通过加载编写好的lua脚本来进行定制化的请求。采用-s 或者 --script可以加载脚本文件。

  • 单纯的利用POST提交方法

-- 全局设定

wrk.method = "POST" 
wrk.body = "name=zhangsan&password=123456"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"

或者可以采用以下的方式:

wrk.headers["Content-Type"] = "application/x-www-form-urlencoded" 
request = function() 
    method = "POST" 
    body = "name=zhangsan&password=123456" 
    path = "/user/login" return wrk.format(method,path,nil,body) 
end
  • 自定义请求和参数

要求每一次的参数不同如何处理       

request = function() 
    uid = math.random(1,1000000) 
    path = "/login?uid"..uid return wrk.formate(nil,path,nil,nil) 
end
  •  设置延迟
function 
    delay() 
return 10 -- 表示设置10ms的延迟 end 
  • 先登录后请求

这个地方是为了对一些需要先登录获取token,后续的请求都需要携带token请求的接口进行测试的,参照官方给出的lua脚本案例:auth.lua

-- example script that demonstrates response handling and 
-- retrieving an authentication token to set on all future 
-- requests 
token = nil 
path = "/authenticate" -- 初始的请求url 
request = function() 
    return wrk.format("GET", path) -- 发送第一次authenticate认证请求 
end 
response = function(status, headers, body) 
    if not token and status == 200 then 
        token = headers["X-Token"] 
        path = "/resource" -- 拿到之后做修改 
        wrk.headers["X-Token"] = token -- 修改头,携带token进入后续的请求 
    end 
end
  • pipeline请求

即一次发送多个请求,参照官方给出的pipeline.lua文章来源地址https://www.toymoban.com/news/detail-722311.html

-- example script demonstrating HTTP pipelining

init = function(args)
   local r = {}
   r[1] = wrk.format(nil, "/?foo")
   r[2] = wrk.format(nil, "/?bar")
   r[3] = wrk.format(nil, "/?baz")

   req = table.concat(r)
end

request = function()
   return req
end

到了这里,关于wrk HTTP打流测试工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网络性能测试工具 iperf3

    iperf3软件下载地址:https://liyouchen.lanzoul.com/iZmaI0otb1de 下载到电脑到,并解压后,会得到两个文件:cygwin1.dll 和 iperf3.exe,这两个文件拷贝到 c:windows 目录下 最后打开 cmd,执行 iperf3 --version ,若安装成功,会打印出版本信息 最后要在使用前,关闭防火墙 iperf3 有客户端 和 服务

    2024年02月12日
    浏览(88)
  • 网络性能测试工具:iperf3

    iperf3 是一个网络性能测试工具(iperf3下载地址)。iperf可以测试TCP和UDP带宽质量。iperf可以测量最大TCP带宽,具有多种参数和UDP特性。iperf可以报告带宽,延迟抖动和数据包丢失。 iperf3是一种用于主动测量IP网络上可实现的 最大带宽 的工具。 它支持调整与时序、缓冲区和协议(

    2024年02月16日
    浏览(52)
  • Linux之网络性能测试工具netperf实践

      Netperf是一种网络性能的测量工具,主要针对基于TCP或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。Netperf测试结果所反映的是一个系统能够以多快的速度向另外一个系统发送

    2024年02月01日
    浏览(39)
  • Linux环境安装iperf3(网络性能测试工具)

    iperf官网地址: iPerf - The TCP, UDP and SCTP network bandwidth measurement tool   iperf特性: 测量带宽 报告MSS/MTU大小和观察到的读数大小。 通过套接字缓冲区支持TCP窗口大小。 UDP 客户端可以创建指定带宽的UDP流。 测量数据包丢失 测量延迟抖动 支持多播 跨平台:Windows、Linux、Android、

    2024年02月03日
    浏览(46)
  • iperf3网络带宽性能测试工具 局域网网络最大带宽高阶教程

            iperf3 是一个 TCP, UDP, 和 SCTP (传输层协议)网络带宽测量工具,iperf 是一个用于主动测量 IP 网络上最大可用带宽的工具. 它支持与时间、协议和缓冲区相关的各种参数的调优. 对于每个测试,它报告测量的吞吐量/比特率(带宽), 丢包率和其他参数, iperf的版本不向下兼

    2024年02月20日
    浏览(44)
  • 【软件测试】单元测试工具---Junit详解

    JUnit是一个Java语言的单元测试框架。 虽然我们已经学习了selenium测试框架,但是有的时候测试用例很多,我们需要一个测试工具来管理这些测试用例,Junit就是一个很好的管理工具,简单来说Junit是一个针对Java单元测试的框架。Junit由Junit Platform _ Junit Jupiter + junit Vintage3部分组

    2024年02月15日
    浏览(44)
  • 单元测试及其工具Junit

    单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确,通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。 单元测试是软件测试的一种类型,测试对象是最基础的代码单元(函数、类、模块),属

    2024年02月10日
    浏览(42)
  • 单元测试工具——JUnit的使用

    ⭐️ 前言 ⭐️ 本篇文章主要介绍单元测试工具JUnit的使用。 🍉 欢迎点赞 👍 收藏 ⭐ 留言评论 📝 私信必回哟 😁 🍉 博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言 🍉 博客中涉及源码及博主日常练习代码均已上传GitHub JUnit提供了非常强大的注解功能

    2024年02月02日
    浏览(47)
  • 【工具/性能】开源的性能测试工具sysbench

    sysbensh是一个非常通用的benchmark工具,其提供多种方面的测试: cpu :提供一个简单的cpu benchmark测试 fileio:文件磁盘io的benchmark测试 memory:内存访问 benchmark测试 thread:线程调度 benchmark测试 mutex:POSIX的锁 benchmark测试 OLTP:数据库 benchmark测试,支持MySQL,Pgsql 默认支持MySQL,如

    2024年02月12日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包