建议练习时可以使用FastApi或Flask等Web服务端框架在本地搭建一个HTTP服务。

wrk简介

wrk是一个用于HTTP协议的基准测试工具。基准测试是一种性能测试方法,它通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量和可对比的测试。

GitHub地址:https://github.com/wg/wrk

安装

Mac直接使用HomeBrew进行安装:

$ brew install wrk

命令行选项

在命令行中输入wrk查看命令行选项:

$ wrk
Usage: wrk <options> <url>Options:-c, --connections <N>  Connections to keep open# 设置总的 http 并发连接数-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 请求头--latency          Print latency statistics# 打印延迟统计情况(建议启用)--timeout     <T>  Socket/request timeout-v, --version          Print version detailsNumeric arguments may include a SI unit (1k, 1M, 1G)Time arguments may include a time unit (2s, 2m, 2h)

基础示例

GET请求:

$ wrk -c100 -t10 -d10s --latency http://localhost:5000/test_get
# 100 个请求分 10 个线程压 10 秒

控制台输出:

Running 10s test @ http://localhost:5000/test_get10 threads and 100 connectionsThread Stats   Avg      Stdev     Max   +/- StdevLatency   201.71ms   58.06ms 451.62ms   79.16%Req/Sec    27.94     10.18    70.00     73.70%Latency Distribution50%  196.82ms75%  228.07ms90%  261.79ms99%  394.08ms2817 requests in 10.10s, 473.18KB read
Requests/sec:    278.94
Transfer/sec:     46.86KB

POST请求:

$ wrk -c100 -t10 -d10s -s test_post.lua --latency http://localhost:5000/test_post
# 使用 test_post.lua 脚本

Lua脚本:

wrk.method = "POST"
wrk.headers["Content-Type"] = "application/json"
wrk.body = '{"k1":1,"k2":2}'

控制台输出:

Running 10s test @ http://localhost:5000/test_post10 threads and 100 connectionsThread Stats   Avg      Stdev     Max   +/- StdevLatency   188.49ms   60.76ms 352.02ms   67.50%Req/Sec    38.35     23.71   101.00     67.22%Latency Distribution50%  182.22ms75%  230.92ms90%  272.66ms99%  325.02ms3665 requests in 10.10s, 604.87KB read
Requests/sec:    362.77
Transfer/sec:     59.87KB

注:GET请求同样可以使用Lua脚本。

进阶用法

全局变量

Lua脚本在压测时的全局变量(tabel)wrk。

全局变量:

wrk = {scheme  = "http",host    = "localhost",port    = nil,method  = "GET",path    = "/",headers = {},body    = nil,thread  = <userdata>,
}

全局方法:

function wrk.format(method, path, headers, body)
--[[wrk.format 方法返回一个 HTTP 请求的字符串,包含传入参数与 wrk 变量的值的组合。
]]--function wrk.lookup(host, service)
--[[wrk.lookup 方法返回一个包含主机所有已知地址的 table 和服务对,这对应于 POSIX 的 getaddrinfo() 方法
]]--
-- host:一个主机名或者地址串(IPv4的点分十进制串或者IPv6的16进制串)
-- service:服务名可以是十进制的端口号,也可以是已定义的服务名称,如ftp、http等function wrk.connect(addr)
--[[判断 addr 是否可以连接上,返回布尔值。addr 必须是一个 wrk.lookup() 方法的返回值。
]]--

Lua脚本的生命周期钩子

启动阶段(Setup):启动阶段开始于请求目标IP地址已解析且所有线程已经初始化但还没启动的时候。

function setup(thread)
--[[在脚本文件中实现 setup 方法,wrk 就会在目标 IP 已解析且测试线程初始化完成但还没有启动的时候调用该方法。wrk 会为每一个测试线程调用一次 setup 方法,并传入代表测试线程的对象 thread 作为参数。setup 方法中可操作该 thread 对象,获取信息、存储信息、甚至关闭该线程。setup 方法每个线程只执行一次。thread 对象提供了 1 个属性,3 个方法:thread.addr 获取或设置线程的服务器地址thread:get(name) 获取线程全局变量thread:set(name, value) 设置线程全局变量thread:stop() 终止线程
]]--

运行阶段(Running):运行阶段开始于对init方法的单次调用,然后在每个请求周期都调用一次request和response方法。

function init(args)
-- 每个线程仅调用 1 次,args 用于获取当前脚本命令行中所有传入的其它命令参数,例如 --env=prefunction delay()
-- 每次发起请求前调用 1 次,在 request 方法前调用,单位为 msfunction request()
-- 每次发起请求前调用 1 次,返回一个包含 HTTP 请求的字符串,wrk 会按该字符串的内容发起 HTTP 请求。
-- 通常会在该方法中调用 wrk.format() 生成 HTTP 请求字符串。function response(status, headers, body)
-- 每次请求返回时调用 1 次,wrk 通过传入 HTTP 响应码,响应头,响应体调用。

结束阶段(Done):

function done(summary, latency, requests)
--[[done 方法接收一个包含测试结果数据的 table 变量 summary 以及两个分别表示每个请求的延迟时间和每个线程的 QPS 的统计对象。持续时间和延迟时间单位均为 ms。整个测试过程中仅被调用 1 次。summary = {duration = N,  -- 运行持续时间,单位为 msrequests = N,  -- 总共完成的请求书bytes    = N,  -- 总共接收的数据量errors   = {connect = N, -- socket 连接总失败数read    = N, -- socket 连接读取总失败数write   = N, -- socket 连接写入总失败数status  = N, -- total HTTP status codes > 399timeout = N  -- total request timeouts}}latency.min              -- 最小延时latency.max              -- 最大延时latency.mean             -- 平均延时latency.stdev            -- 延时标准差latency:percentile(99.0) -- 99th percentile valuelatency(i)               -- raw value and count
]]--

调用过程示例

命令行语句:

$ wrk -c1 -t1 -d1s -s test_lua.lua http://localhost:5000

Lua脚本:

#!/usr/local/bin/luawrk.body = '{"k1":666}'
path = "/test_post"function setup(thread)print("调用 setup()")print(thread.addr)
endfunction init(args)print("调用 init()")
endfunction delay()print("调用 delay() 等待 500 ms")return 500
endfunction request()print("调用 resquest()")return wrk.format("POST", path)
endfunction response(status, headers, body)print("调用 response()")if (status == 200)thenpath = "/test_get?k1=" .. bodyend
endfunction done(summary, latency, requests)print("调用 done()")
end

控制台输出:

调用 setup()
127.0.0.1:5000
调用 init()
调用 resquest()
Running 1s test @ http://localhost:50001 threads and 1 connections
调用 delay() 等待 500 ms
调用 resquest()
调用 response()
调用 delay() 等待 500 ms
调用 resquest()
调用 response()
调用 delay() 等待 500 msThread Stats   Avg      Stdev     Max   +/- StdevLatency     1.08ms  135.06us   1.17ms  100.00%Req/Sec     1.50      0.71     2.00    100.00%2 requests in 1.01s, 525.00B readNon-2xx or 3xx responses: 1
Requests/sec:      1.98
Transfer/sec:     519.09B
调用 done()

HTTP请求日志:

127.0.0.1 - - [15/Nov/2019 11:10:02] "POST /test_post HTTP/1.1" 200 -
127.0.0.1 - - [15/Nov/2019 11:10:03] "POST /test_get?k1={"k1":666} HTTP/1.1" 405 -

最后: 可以在公众号:伤心的辣条 ! 自行领取一份216页软件测试工程师面试宝典文档资料【免费的】。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

学习不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。你可以加入我们的测试技术交流扣扣群:914172719(里面有各种软件测试资源和技术讨论)

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

性能测试工具wrk安装使用详解相关推荐

  1. mysql查询性能测试工具_MySQL性能测试工具MySQLslap使用实例详解

    原标题:MySQL性能测试工具MySQLslap使用实例详解 MySQLslap是MySQL(了解干货请戳:干货!超过500行的Mysql学习笔记)自带的基准测试工具,优点:查询数据,语法简单,灵活容 ...

  2. 性能测试工具 wrk 安装与初步使用

    开源的性能测试工具 wrk,简单易用,没有Load Runner那么复杂,他和 apache benchmark(ab)同属于性能测试工具,但是比 ab 功能更加强大,并且可以支持lua脚本来创建复杂 ...

  3. HTTP性能测试工具wrk安装及使用

    wrk 是一个很简单的 http 性能测试工具,没有Load Runner那么复杂,他和 apache benchmark(ab)同属于HTTP性能测试工具,但是比 ab 功能更加强大,并且可以支持l ...

  4. Python 自动化工具pyautogui 安装过程详解

    Ubuntu 环境上安装pyautogui 的详细步骤如下: 1. 安装pip3 sudo apt-get install python3-pip 2.安装pyautogui pip3 install ...

  5. php性能测试下载,PHP性能测试工具xhprof安装与使用方法详解

    本文实例分析了PHP性能测试工具xhprof安装与使用方法.分享给大家供大家参考,具体如下: xhprof概述: XHProf是一个分层PHP性能分析工具.它报告函数级别的请求次数和各种指标,包括阻塞 ...

  6. 虚拟化工具Xen的安装配置详解

    上一篇介绍了虚拟化的基础知识:这里来介绍具体的虚拟化工具的配置使用: 一.Xen的安装配置详解: 1.配置yum源 http://mirrors.163.com/centos/6.5/xen4/x86 ...

  7. python 自动化办公 案例_python自动化工具之pywinauto实例详解

    python自动化工具之pywinauto实例详解 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: python自动化工具之pywinauto实例详解.txt ] (友情提示: ...

  8. centos6 安装 mantisbt-1.2.8 —— (1) VMware Workstation 12 Pro 虚拟机安装步骤详解(window 10 系统)

    对于目前主流之一的VMware 虚拟机而言,一直是各位小伙伴的首选,而VMware 12 Pro 是截止目前最新的VMware Workstation 版本:偶在这里特地给刚刚入坑的小伙伴详细介绍介绍 ...

  9. linux PHP 编译安装参数详解

    linux PHP 编译安装参数详解 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc -- ...

最新文章

  1. 淘宝API商家自用型应用程序全部源代码和详细的帮助文档(1元有偿提供)
  2. TEASOFT软件 | 动作帮助信息定义语法
  3. 【机器学习入门到精通系列】不废话直入正题之单变量线性回归(另附单变量非线性代码)
  4. Anaconda+用conda创建python虚拟环境
  5. java oracle 乐观锁,oracle为什么默认乐观锁
  6. Linux应用:FTP
  7. 不用math type解决word公式上浮问题
  8. oracle 数据库基础配置,Oracle数据库网络服务配置基础、SQL编程详解-Oracle
  9. 碉堡了,独家首发Java核心知识点总结,超全!
  10. 无土栽培中的物联网技术应用
  11. Xilinx FPGA配置clocking时钟动态相位输出
  12. IDEA报 java 找不到符号解决办法
  13. Codeforces Round #531 (Div. 3) F. Elongated Matrix(状压DP)
  14. 上传身份证照片js_web端上传图片,截取证件照
  15. 如何设置对话框的最大(小)高度与宽度
  16. iOS RN学习随笔
  17. 创建证书与Xcode破解
  18. Gunicorn配置详解
  19. 把自己从一个疯狂下载者变成一个真正的学习者
  20. 音乐网站项目的收尾工作

热门文章

  1. 【Marva Collins' Way】第十一章
  2. 三大数据模型:星型模型、雪花模型、星座模型
  3. Pulsar Multi Tenancy 多租户
  4. 苹果公布 2021 年 App Store 最 佳应用、最 佳游戏
  5. 【MySQL】mysql | 解决navicat连接mysql报错1129
  6. Goland快捷键设置记录
  7. 输入一会整数,输出所有质素因子2020.11.10
  8. 向量空间模型(VSM)算法
  9. 团队密码管理器Passbolt的安装
  10. iptable 链表