【测试设计】性能测试工具选择:wrk?jmeter?locust?仍是LR?

原文连接:http://www.51testing.com/html/49/n-3721249.htmlhtml

前言

当你想作性能测试的时候,你会选择什么样的测试工具呢?是会选择wrk?jmeter?locust?仍是loadrunner呢?java

今天,笔者将根据本身使用经验,针对jmeter、locust、wrk和loadrunner经常使用的性能测试工具进行简单介绍和对比。首先,四者基本对比图:python

. loadrunner jmeter locust wrk
分布式压力 支持 支持 支持 不支持
单机并发能力
并发机制 进程/线程 线程 协程 线程
开发语言 C/Java Java Python C
报告与分析 完善 简单图标 简单图表 简单结果
受权方式 商业收费 开源免费 开源免费 开源免费
测试脚本形式 C/Java GUI Python C
资源监控 支持 不支持 不支持 不支持

因为loadrunner为商业收费模式,对于公司级测试使用而言涉及到受权问题,所以,本文暂不对loadrunner进行详细讨论。web

wrk

wrk是轻量化的http性能测试工具,采用线程+网络异步IO模型,网络异步IO可使得系统使用不多的线程模拟大量的网络链接以增大并发量、提升压力。编程

优势

  • 操做简单、易于使用,

使用方式例如:网络

./wrk -c 1000 -t 8 -d 10s http://www.baidu.com

主要包括如下参数:并发

  • -t(--thread) 须要模拟的线程数;
  • -c(connection) 须要模拟的链接数;
  • --timeout 超时的时间;-d(--duration) 测试的持续时间

缺点

①wrk只支持http协议类型请求(如get、post等),但如果须要执行get以外的http类型请求须要使用者自行编写lua脚本;异步

②只容许单机测试,不支持多机分布式压力测试,所以wrk适合性能基准测试,对于模拟上万的用户并发测试显得有点力不从心;tcp

③测试结果简单,无详细图表解析,举例以下;编程语言

wrk测试结果输出: image

jmeter

jmeter一样采用线程并发机制,但其主要依靠增长线程数提升并发量,当单机模拟数以千计的并发用户时,对于CPU和内存的消耗比较大。与上述wrk相比,jmeter自己具备如下优势和缺点:

优势

①界面可视化操做,可使用录制脚本方式对较为复杂的用户流建模,还能够建立断言来验证测试行为是否经过;

②表格、图形、结果树等多类可视化数据分析和报告输出,举例以下; jmeter聚合报告及表格查看结果: image

③支持http、ftp、tcp等多种协议类型测试;

④支持分布式压力测试,但对于上万的用户并发测试须要多台测试机支持,资源要求比较大;

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

缺点

jmeter的GUI模式消耗资源较大,当须要测试高负载时,须要先使用GUI工具来生成XML测试计划,而后在非GUI模式下导入测试计划运行测试,而且关闭不须要的侦听器(收集数据与展现测量的组件),由于侦听器也会消耗掉本用于生成负载的大量资源。测试结束后后,须要将原始结果数据导入GUI以才能查看结果。

locust

locust是一个的简单易用的分布式负载测试工具,主要用来对网站进行负载压力测试。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测试结果: image

总结

本文简单介绍和对比了wrk、jmeter及locust三种性能测试工具,但愿能给你们带来基础的认识。此外让咱们最后一块儿来看看面临如下测试需求,咱们应该如何在三者中进行选择:

我想使用界面操做的形式对个人系统作性能测试,而且但愿个人测试数据有个良好的可视化展现方式;

建议使用jmeter工具

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

建议使用wrk工具

我想对个人系统模拟用户操做进行复杂场景的性能测试;

建议使用locust工具

我想测试个人系统在必定QPS状况下,一段时间内的性能指标(cpu消耗、内存消耗等);

建议使用jmeter工具

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

建议使用jmeter或locust工具

我想体验编程的乐趣,本身编写脚本进行性能测试;

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

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

附录

wrk 使用参数说明

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

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

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

相关文章
相关标签/搜索