以服务于中国广大创业者为己任,立志于做最好的创业网站。

标签云创业博客联系我们

导航菜单

录视频专用软件 录制视频软件

  

  01 前 言   

  

  当你想做性能测试时,你会选择什么样的测试工具呢?.   

  

  你会选择wrk吗?jmeter?蝗虫?还是loadrunner?今天,根据我自己的经验,   

  

  针对jmeter、locust、wrk和loadrunner常用的性能测试工具进行简单介绍和对比。   

  

  首先,四者基本对比图:   

  

  工具   

  

  测试工具   

  

  蝗虫   

  

  码   

  

  - | - | - | - | -   

  

  分布压力   

  

  支持   

  

  支持   

  

  支持   

  

  不支持   

  

  单机并发能力。   

  

  并发机制   

  

  进程/线程   

  

  线   

  

  协同程序   

  

  线   

  

  开发语言   

  

  C/Java   

  

  爪哇   

  

  计算机编程语言   

  

  报告和分析。   

  

  改善   

  

  简单图标   

  

  简单图表   

  

  简单的结果   

  

  授权模式   

  

  商业费用   

  

  免费开源   

  

  免费开源   

  

  免费开源   

  

  测试脚本表单   

  

  C/Java   

  

  图像使用者界面   

  

  计算机编程语言   

  

  资源监控   

  

  支持   

  

  不支持   

  

  不支持   

  

  不支持   

  

  由于loadrunner是一种商业收费模式,涉及使用公司级测试的授权问题,本文暂时不详细讨论loadrunner。   

  

  02 wrk   

  

  wrk是轻量化的http性能测试工具,采用线程+网络异步IO模型   

  

  网络异步IO可以使系统用很少的线程模拟大量的网络连接,增加并发性,增加压力。   

  

  #优势:   

  

  *易于操作和使用。   

  

  用法:例如:/wrk-c1000-t 8-d 10s http://www.baidu.com主要包括以下参数:-t (-thread)待模拟线程数-c(connection)待模拟连接数-超时时间-d (-duration)测试持续时间。   

  

  #缺点:   

  

  * wrk仅支持http协议类型的请求(如get、post等)。),但是如果需要执行get以外的http类型请求,则需要用户自己编写lua脚本;   

  

  *只允许单机测试,不支持多机分布式压力测试。所以wrk适合性能基准测试,对于模拟上万用户的并发测试来说似乎有点不够用;   

  

  *测试结果简单,没有详细的图表分析。例子如下。   

  

  wrk测试结果输出:   

  

     

  '全面比较'/   

  

  03 jmeter   

  

  彼得也是采用线程并发机制.   

  

  然而,它主要依赖于增加线程数量来增加并发性。当单台计算机模拟成千上万的并发用户时,会消耗大量的CPU和内存。与上述wrk相比,jmeter本身有以下优点和缺点:   

  

  #优势:   

  

  *界面可视化操作,您可以使用记录的脚本来建模更复杂的用户流,还可以创建断言来验证测试行为是否通过;   

  

  *表格、图表、结果树和其他类型的可视化数据分析和报告输出,示例如下:   

  

  Jmeter聚合报表和表视图结果:   

  

  *支持http、ftp、tcp等协议类型测试;   

  

  *支持分布式压力测试,但对于数万用户来说,并发测试需要多台测试机支持,资源需求相对较大;   

  

  *可用于测试固定吞吐量下的系统性能,如100QPS(QPS:每秒查询率)下系统的响应时间和资源消耗;   

  

  #缺点:   

  

  jmeter的GUI模式   

  

  它消耗了大量的资源。当需要测试高负载时,需要先使用GUI工具生成XML测试计划,然后导入测试计划在非GUI模式下运行测试,关闭不必要的监听器(用于收集数据和显示测量的组件),因为监听器也会消耗大量用于生成负载的资源。测试完成后,需要将原始结果数据导入到图形用户界面中才能查看结果。   

  

  04 locust   

  

  瞧   

cust是一个 简单易用的分布式负载测试工具 ,主要 用来对网站进行负载压力测试

  

。locust使用python语言开发,测试资源消耗远远小于java语言开发的jmeter。且其支持分布式部署测试,能够轻松模拟百万级用户并发测试。与jmeter和wrk相比,locust具有以下优缺点:

  

# 优点:

  

* 不同与wrk和jmeter使用线程数提高并发量,locust借助于协程实现对用户的模拟,相同物理资源(机器cpu、内存等)配置下locust能支持的并发用户数相比jmeter可以提升一个数量级;

  

* 相比wrk对复杂场景测试的捉襟见肘和jmeter需要界面点击录制复杂场景的麻烦,locust只需用户使用python编写用户场景完成测试;

  

* 不同与jmeter复杂的用户使用界面,locust的界面干净整洁,可以实时显示测试的相关细节(如发送请求数、失败数和当前发送请求速度等);

  

* locust虽然是面向web应用测试的,但是它可以用来测试几乎所有系统。给locust编写一个客户端,可以满足你所有的测试要求;

  

# 缺点:

  

* 同wrk一样,locust测试结果输出不如jmeter的测试结果展示类型多;

  

locust测试结果:

  

  

全方位对比' />   

05 总 结

  

本文简单介绍和对比了wrk、jmeter及locust三种性能测试工具,希望能给大家带来基础的认识。此外让我们最后一起来看看面临以下测试需求,

  

我们应该如何在三者中进行选择:

  

# 1.我想使用界面操作的形式对我的系统做性能测试,并且希望我的测试数据有个良好的可视化展示方式;

  

* 建议使用jmeter工具

  

# 2.我想要对我系统的http rest接口进行性能测试,但是我之前没有进行过任何测试,我不知道我的系统QPS是个什么样的水平;

  

* 建议使用wrk工具

  

# 3.我想对我的系统模拟用户操作进行复杂场景的性能测试;

  

* 建议使用locust工具

  

# 4.我想测试我的系统在一定QPS情况下,一段时间内的性能指标(cpu消耗、内存消耗等);

  

* 建议使用jmeter工具

  

# 5.我想使用匀速请求的方式,对我的系统进行性能测试;

  

* 建议使用jmeter或locust工具

  

# 6.我想体验编程的乐趣,自己编写脚本进行性能测试;

  

* http请求:wrk,使用lua语言编写脚本;

  

* locust,使用python语言编写脚本;

  

或者,just do it by yourself,自己选择编程语言编写性能测试脚本。

  

06 附 录

  

# wrk 使用参数说明:

  

* 参数-c(connection,线链接数)与操作系统文件句柄数相关,-c不能超过文件句柄数设置,开始测试前应保证系统可用端口数大于-c设置;

  

* 参数-t(--thread,线程数)与操作系统cpu核数有关,-t不宜设置过大,过大的线程数设置反而会因线程调度反而使性能降低。如下图所示,操作系统为8核cpu:相同连接数和测试时长条件下,不同线程数对同一系统REST接口测试,从测试结果可以看出当thread=8(与cpu核数一致)时系统性能测试结果最佳,性能波动最小;

  

  

全方位对比' />   

8核cpu: 相同连接数和测试时长条件下,不同线程数对同一系统REST接口测试结果对比图