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

性能压测工具:wrk

一般我们压测的时候,需要了解衡量系统性能的一些参数指标,比如。

1、性能指标简介

1.1 延迟

简单易懂。green:一般指响应时间

95线:P95。平均100%的请求中95%已经响应的时间

99线:P99。平均100%的请求中99%已经响应的时间

平均响应时间:所有请求的平均响应时间

最大响应时间:所有请求中最大的响应时间

1.2 吞吐量

简单易懂。green:即每秒处理的请求数量

对于查询搜索类的系统使用每秒处理的请求数(QPS)来衡量吞吐能力。

一般对于交易类的系统使用每秒处理的事务数(TPS)来衡量吞吐能力。

TPS:每秒处理的事务数(比如每秒处理的订单数)

QPS:每秒处理的请求数

1.3 系统容量

也叫做设计容量,可以理解为硬件配置(内存,cpu什么的),成本约束

2、压测工具 wrk

wrk 是一款针对 Http 协议的基准测试开源工具,它能够在单机多核 CPU 的条件下,使用red:系统自带的高性能 I/O 机制,如 epoll,kqueue 等,通过多线程和事件模式,对目标机器产生大量的负载。

wrk 目前仅支持单机压测,后续也不太可能支持多机器对目标机压测。

因为它本身的定位,并不是用来取代 JMeter, LoadRunner 等专业的测试工具,wrk 提供的功能,对后端开发人员来说,应付日常接口性能验证还是比较友好的。

wrk 只能被安装在类 Unix 系统上,所以我们需要一个 Linux 或者 MacOS 环境。Windows 10 安装需要开启自带的 Ubuntu 子系统。

3、使用 wrk

使用方法: wrk <选项> <被测HTTP服务的URL>

Options:

-c, --connections <N> 跟服务器建立并保持的TCP连接数量  -d, --duration <T> 压测时间           -t, --threads <N> 使用多少个线程进行压测   -s, --script <S> 指定Lua脚本路径       -H, --header <H> 为每一个HTTP请求添加HTTP头      --latency 在压测结束后,打印延迟统计信息   --timeout <T> 超时时间     -v, --version 打印正在使用的wrk的详细版本信息

代表数字参数,支持国际单位 (1k, 1M, 1G)

代表时间参数,支持时间单位 (2s, 2m, 2h)

3.1 命令简单的压测

简单进行一次压测,用10个线程,200个连接,对百度进行30s的压测。

以下是对压测结果

wrk -t 10 -c 200 -d 30s --latency http://www.baidu.com# 30s内测试百度的结果如下:Running 30s test @ http://www.baidu.comm/# 用12个线程 400个连接测试12 threads and 400 connectionsLatency Distribution# 响应时间-延迟分布明细# 有50%的请求执行时间是在64.42ms内完成50% 64.42ms# 30秒内功处理了 149798 个请求,读取了 241.85MB 的数据149798 requests in 30.09s, 241.85MB read# QPS 4977.65, 即平均每秒处理请求数为4977.65 可以参考吞吐量。Requests/sec: 4977.65# 平均每秒读取 8.04M 的数据Transfer/sec: 8.04MB

3.2 编写压测脚本

首先需要准备一个 lua 文件,比如名为 test-postapi.lua ,写入如下内容。

### 请求方式wrk.method = "POST"### 设置 请求类型wrk.headers["Content-Type"] = "application/json"### POST 请求参数wrk.body = '{"username": "13999999999","username": "13999999999"}'

这个文件内容自己写,写好接口内容后保存。

3.3 执行脚本

以下是模拟6个线程,600个连接,在60s内,间隔6s 执行 test-postapi.lua 脚本的请求。

# 进入wrk执行文件目录# --script 参数的值为脚本名# --latency 参数的值为接口地址./wrk -t6 -c600 -d60s --script=test-postapi.lua --latency http://api.xxxdev.com/enterprise/user/login

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

相关文章:

  • 报错0x0000007b问题解决
  • 【经典小练习】输出文件路径名
  • Vue中的$nextTick的作用
  • QT visual stdio加载动态库报错126问题
  • 【代码随想录】算法训练计划28
  • 5、LED流水灯
  • python:傅里叶分析,傅里叶变换 FFT
  • vue2-006——使用脚手架搭建vue2项目+项目结构分析
  • OpenGL 图元赋色(Qt)
  • 大数据预处理技术
  • HOOPS Web平台助力开发3D应用,实现超大规模3D web轻量化渲染与数据格式转换!
  • 品优购首页快捷导航部分
  • postman和Jmeter做接口测试的区别(经验之谈)
  • Axios笔记
  • 【nlp】2.8 注意力机制拓展
  • iOS 系统授权开发
  • LeetCode29.两数相除 JavaScript
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Spring-boot 启动时碰到的错误
  • Zsh 开发指南(第十四篇 文件读写)
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 从setTimeout-setInterval看JS线程
  • 从零开始的无人驾驶 1
  • 讲清楚之javascript作用域
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 跨域
  • 前端之React实战:创建跨平台的项目架构
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 我建了一个叫Hello World的项目
  • 想写好前端,先练好内功
  • 异步
  • Hibernate主键生成策略及选择
  • 整理一些计算机基础知识!
  • ​水经微图Web1.5.0版即将上线
  • # .NET Framework中使用命名管道进行进程间通信
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #pragma multi_compile #pragma shader_feature
  • $$$$GB2312-80区位编码表$$$$
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (zt)最盛行的警世狂言(爆笑)
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (论文阅读30/100)Convolutional Pose Machines
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • **CI中自动类加载的用法总结
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET 8.0 中有哪些新的变化?
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET单元测试