基准测试工具:Wrk初识

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: Wrk是一个支持HTTP协议的基准测试工具,结合了多线程设计和可扩展事件通知,底层封装epoll(linux)和kqueue(bsd),能用较少线程生成大量并发请求(使用了操作系统特定的高性能io机制)。

最近和同事聊起常用的一些压测工具,谈到了Apache ab、阿里云的PTS、Jmeter、Locust以及wrk各自的一些优缺点和适用的场景类型。这篇文章,简单介绍下HTTP基准测试工具wrk的基本使用方法。

 

一、压测工具对比


工具名称 类型 多协议支持 优缺点 适用人群&场景
Apache ab 开源 HTTP  Apache自带源生测试工具,安装部署简单,不适合多协议及复杂场景  开发:单机&单接口性能基准验证 
PTS 商业 多协议(支持不太好)  阿里云配套收费压测工具,支持多协议链路压测,功能完善   技术人员:基准&链路&高并发
Jmeter 开源 多协议  使用率高&学习成本低,多协议复杂场景支持良好,受限于机制,资源损耗较高  技术人员:多场景&万级以下并发全场景 
Locust 开源  多协议(需二次开发)  python开源压测框架,支持多协议&复杂场景(需二次开发,定制化)  技术人员:性能测试&支持程度取决于定制开发 
Wrk 开源  HTTP  HTTP基准测试工具,高并发低损耗,安装部署简单,不适合多协议及复杂场景  开发:单机&单接口性能基准验证  


二、简介及安装


1、简介


Wrk是一个支持HTTP协议的基准测试工具,结合了多线程设计和可扩展事件通知,底层封装epoll(linux)和kqueue(bsd),能用较少线程生成大量并发请求(使用了操作系统特定的高性能io机制)。


源生支持LuaJIT脚本,可以执行HTTP发起请求、响应处理和自定义测试报告;SCRIPTING有详细说明,并且scripts中提供了几个示例。


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


2、安装


Point:wrk托管与github,前先安装Git;依赖gcc和OpenSSL(阿里云Centos服务默认已有)库,如下载报错,安装即可!命令如下:


# 下载命令
git clone https://github.com/wg/wrk.git
# 进入wrk文件夹
cd wrk
# 编译
make


编译需要一定时间,耐心等待即可。编译成功后,示例如下:


640.png

 

三、示例demo


1、参数说明


Usage: wrk <options> <url>                            
  Options:
# 脚本开启的HTTP连接数
    -c, --connections <N>  Connections to keep open
# 测试脚本执行的时长
    -d, --duration      <T>  Duration of test
# 测试脚本使用的线程数
    -t, --threads        <N>  Number of threads to use
# 加载Lua脚本文件
    -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


2、示例脚本


[root@localhost wrk]# ./wrk -t4 -c100 -d60s --latency http://www.cnblogs.com/imyalost
Running 1m test @ http://www.cnblogs.com/imyalost
  4 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   196.87ms  318.88ms   1.90s    86.33%
    Req/Sec   316.86    220.75     3.19k    75.19%
  Latency Distribution
     50%    5.73ms
     75%  259.62ms
     90%  615.77ms
     99%    1.47s
  73434 requests in 1.00m, 11.06MB read
  Socket errors: connect 0, read 2, write 0, timeout 267
Requests/sec:   1222.07
Transfer/sec:    188.51KB


结果解析:


4 threads and 100 connections :4个线程,发起100个http连接请求;


Thread Stats Avg Stdev Max +/- Stdev :测试结果统计(精简版jmeter的聚合报告),分别是:平均值、标准偏差、最大值、偏差比(值越高表示测试结果离散程度越高,性能波动较大);


Latency :响应时间分布(即百分比响应时间范围);


Req/Sec :每秒完成的请求数;


Latency Distribution :如上面的示例结果,分别代表50/75/90/99%响应时间在多少ms内;


73434 requests in 1.00m, 11.06MB read :本次测试共计在1min内发起73434个请求,总计读取11.06MB的数据;


Socket errors: connect 0, read 2, write 0, timeout 267 :本次测试中,连接失败0个,读取错误2个,超时267个;


Requests/sec :所有线程平均每秒钟完成1222.07个请求;


Transfer/sec :平均每秒读取188.51KB数据(吞吐量);


3、更多用法


前文提到了wrk支持LuaJIT脚本,可以执行HTTP发起请求、响应处理和自定义测试报告,wrk提供的几个lua函数作用如下:


640.png


是不是发现和selenium自动化很像,特别是setup和init函数(手动狗头)。。。

 

以上就是关于基准测试工具Wrk的简单用法和几种常见的压测工具对比,上面的脚本仅是个demo,具体使用方法请自行实践。其实吧,我觉得这个工具更适合开发童鞋写好一个新的接口后,自己测试一下,这样也不用等出性能问题了才想起来要找性能测试同学压测。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
3月前
|
前端开发 测试技术 Python
【Selenium全攻略】掌握这一工具,实现自动化测试的所有梦想
本文分享了使用Selenium进行UI自动化测试的全过程,包括开发环境部署、代码实现、思路分析和难点解析。作者通过一个实际案例,讲述了如何利用Selenium处理前端生成报告失败的问题,以及在UI自动化中定位元素和处理元素不唯一的情况。同时,文章强调了解决问题思路的重要性,鼓励读者开拓思维,寻找不同的解决方案。
138 4
【Selenium全攻略】掌握这一工具,实现自动化测试的所有梦想
|
3月前
|
前端开发 jenkins 测试技术
自动化测试介绍,为何 Apifox 是进行自动化测试的最佳工具
自动化测试利用专用软件执行测试用例,比手动测试更高效准确。Apifox是一款集API文档、调试与自动化测试于一体的工具,提供一体化解决方案,简化API变更管理。其强大的测试功能支持丰富的断言及测试场景组合,便于模拟真实业务流程。Apifox还提供详尽的测试报告与分析功能,有助于快速定位问题。此外,它能轻松集成到CI/CD流程中,并支持定时任务及多分支管理,极大提升了测试效率和团队协作。相较于其他工具,Apifox以其全面的功能和友好的界面脱颖而出。
|
7天前
|
Web App开发 定位技术 iOS开发
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
16 1
|
1月前
|
Java 流计算
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
35 1
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
|
22天前
|
jenkins 测试技术 持续交付
提升软件测试效率的实用技巧与工具
【10月更文挑战第12天】 本文将深入探讨如何通过优化测试流程、引入自动化工具和持续集成等策略,来显著提高软件测试的效率。我们将分享一些实用的技巧和工具,帮助测试人员更高效地发现和定位问题,确保软件质量。
41 2
|
30天前
|
测试技术
黑盒功能测试工具UFT的使用
黑盒功能测试工具UFT的使用
32 0
黑盒功能测试工具UFT的使用
|
1月前
|
XML 网络安全 数据格式
Kali渗透测试:Windows事件管理工具wevtutil的使用方法(一)
Kali渗透测试:Windows事件管理工具wevtutil的使用方法(一)
|
2月前
|
测试技术
基于LangChain手工测试用例转App自动化测试生成工具
在传统App自动化测试中,测试工程师需手动将功能测试用例转化为自动化用例。市面上多数产品通过录制操作生成测试用例,但可维护性差。本文探讨了利用大模型直接生成自动化测试用例的可能性,介绍了如何使用LangChain将功能测试用例转换为App自动化测试用例,大幅节省人力与资源。通过封装App底层工具并与大模型结合,记录执行步骤并生成自动化测试代码,最终实现高效自动化的测试流程。
70 4
|
1月前
|
XML 网络安全 数据格式
Kali渗透测试:Windows事件管理工具wevtutil的使用方法(二)
Kali渗透测试:Windows事件管理工具wevtutil的使用方法(二)
|
1月前
|
安全 网络安全 数据库
Kali渗透测试:使用工具Metasploit攻击操作系统(一)
Kali渗透测试:使用工具Metasploit攻击操作系统(一)