前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软件性能测试方案-性能测试工具选型

软件性能测试方案-性能测试工具选型

作者头像
用户5521279
发布2019-10-15 15:38:27
8.4K1
发布2019-10-15 15:38:27
举报
文章被收录于专栏:搜狗测试搜狗测试

前言

在往期文章《软件性能测试方案-性能测试准备》介绍了前期性能测试准备的要点,本文主要介绍性能测试工具的选型。

想象下,如果不使用工具进行性能测试会怎么样?我们可以从性能测试的定义的角度来分析,性能测试是指通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。如果不使用工具,仅靠人工进行性能测试会存在以下的弊端:

  • 测试需要投入大量的资源:

  为了模拟多种负载、并发的场景需要多人协同工作,通常测试没有很多的资源,而且就算有资源人工的效果也会大打折扣,甚至于某些场景仅凭人工是无法完成的。

  • 可重复性非常差:

  性能测试经常需要反复调优和测试执行,如果没有工具的帮助,全靠人工实在不敢想象。

  • 测试准确性较差:

  由于需要模拟多种负载和并发场景,如果由人工来操作,难免会存在误差,而且相对工具或程序来说这种误差会更大,对测试结果影响也非常大。

  • 结果的收集、整理和呈现形式差:

  如果没有工具,全凭人工采集数据相对工具来说也会存在较大的误差。

性能测试工具选型参考

1.成本:

  • 工具成本:工具通常分为商业(闭源)和非商业(开源)两种,商业工具通常功能比较强大、收费、可提供售后服务。开源工具通常是免费的、功能有限。
  • 学习成本:使用任何工具都需要进行学习,我们需要从工具上手难易程度、资料丰富程度等维度考量工具是否适合自己和测试需求。

2.调度能力:

因为性能测试不可能由一台压力机完成或者说大部分情况下,我们不能不可能由一台压力机来完成,凡是对压力真正有所要求的场景,往往是多台压力机共同施加压力完成性能测试;因此,性能测试工具必须有很好的调度能力,能够由一个主控机同时管理多台代理机完成性能测试任务,而不是由人去一台一台的代理机上操作来完成这个任务。

3.线性扩展能力:

调度能力有好有坏,有些性能测试工具调度能力特别强,具备很好的线性扩展能力,当压力不够的时候能够通过增加压力机数量的方式来线性的增加吞吐量、并发量,从而实现目标。

4.稳定的并发能力

我们在实际性能测试当中往往不是按照传统流程进行的,实际测试中往往需要做对比测试。比如,不同的系统版本,不同的系统,或者数据库参数的调节、超时时间调整等。实际测试中,我们的策略是对比吞吐量相同的情况下CPU利用率的差异,因为吞吐量我们是可以控制的,而CPU我们是不能控制的。使用工具发出来100QPS就是100QPS,200QPS就是200QPS。而CPU是操作系统和CPU共同控制的,它不在我们的控制能力范围。所以,工具的稳定性(“稳定”控制吞吐量)显得尤为重要。

5.单机高吞吐能力

相同资源的服务器如果能发更多的业务压力,就能节省不少的环境资源,并且,压力机数量的减少,直接影响是维护这些工具的工作量减少了,整体测试效率提高了。

6.二次开发的能力

工具支持二次开发,能够更好地契合测试需求,更方面地统计结果数据,并能很好地与公司现有系统做集成。

常用的性能测试工具

下面是对Jmeter、locust、wrk、Loadrunner、vegeta不同维度的对比以及简单介绍

LR

Jmeter

locust

vegeta

wrk

短时间内大并发

支持

支持

支持

支持

支持

UI界面

资源监控

支持

支持

不支持

学习成本

是否开源

多协议支持

图形化展示报告

是否支持场景录制

wrk

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

优点

  • 操作简单、易于使用 使用方式例如:
代码语言:javascript
复制
./wrk -c 1000 -t 8 -d 10s http://www.baidu.com

主要包括以下参数:

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

缺点

  • wrk只支持http协议类型请求(如get、post等);
  • 只允许单机测试,不支持多机分布式压力测试;
  • 测试结果简单,无详细图表解析。

vegeta

Vegeta 是一个用 Go 语言编写的多功能的 HTTP 负载测试工具,它提供了命令行工具和一个开发库。与上述wrk相比,vegeta本身具有以下优点和缺点:

优点:

1.安装、操作简单,易于使用; 2.单机支持能力强; 3.支持分布式压力测试; 4.可以用于测试固定吞吐量下的系统性能。

缺点

同wrk一样,vegeta的测试结果输出较为简单,不支持图形化结果展示(如果你是iTerm用户另当别论)。

jmeter

jmeter同样采用线程并发机制,但其主要依靠增加线程数提高并发量,当单机模拟数以千计的并发用户时,对于CPU和内存的消耗比较大。与上述wrk、vegeta相比,jmeter本身具有以下优点和缺点:

优点

1.界面可视化操作; 2.表格、图形、结果树等多类可视化数据分析和报告输出; 3.支持http、ftp、tcp等多种协议类型测试; 4.支持分布式压力测试; 5.可以用于测试固定吞吐量下的系统性能。

缺点

jmeter的GUI模式消耗资源较大,非GUI模式下需要将原始结果数据导入GUI才能查看结果。

locust

locust是一个的简单易用的分布式负载测试工具。locust使用python语言开发,测试资源消耗远远小于java语言开发的jmeter。与jmeter、wrk、vegeta相比,locust具有以下优缺点:

优点

1.不同于wrk和jmeter使用线程数提高并发量,locust借助于协程实现对用户的模拟,相同物理资源(机器cpu、内存等)配置下locust能支持的并发用户数相比jmeter可以提升一个数量级; 2.locust的界面干净整洁,可以实时显示测试的相关细节。

缺点

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

总结

本文主要介绍了主流的服务端性能测试工具,希望大家能够根据不同的测试需求和自己对工具的理解,选取适合自己的测试工具。

  • 如果你想做场景的压测,而不是单个接口的压测,可使用jmeter、locust,支持接口串联,接口body参数化,思考时间等复杂场景。
  • 如果你压测要求的并发比较高,需要使用分布式压测,可使用jmeter、locust、vegeta。
  • 如果你关注接口的返回,多维度压测报告统计,可使用jmeter。
  • 如果你想对http的rest接口进行性能测试,只关注接口的发送、QPS和错误率,可使用vegeta、wrk。
  • 如果你想体验编程的乐趣,自己编写脚本进行性能测试,可使用wrk、locust。
  • 如果你想系统保持在一定QPS情况下,一段时间的性能指标,可使用vegeta、jmeter。



本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • wrk
    • 缺点
    • vegeta
      • 优点:
        • 缺点
        • jmeter
          • 优点
            • 缺点
            • locust
              • 优点
                • 缺点
                相关产品与服务
                命令行工具
                腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档