软件性能测试方案-性能测试工具选型
发布时间:2021-03-16

‖ 前言


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


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

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


● 可重复性非常差:

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


● 测试准确性较差:

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


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

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


‖ 性能测试工具选型参考


1.成本:

 ● 工具成本:工具通常分为商业(闭源)和非商业(开源)两种,商业工具通常功能比较强大、收费、可提供售后服务。开源工具通常是免费的、功能有限。

 ● 学习成本:使用任何工具都需要进行学习,我们需要从工具上手难易程度、资料丰富程度等维度考量工具是否适合自己和测试需求。

2.调度能力:

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

3.线性扩展能力:

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

4.稳定的并发能力

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

5.单机高吞吐能力

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

6.二次开发的能力

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


‖ 常用的性能测试工具


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

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等);

● 只允许单机测试,不支持多机分布式压力测试;

● 测试结果简单,无详细图表解析。


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。




更多软件测试相关推荐:

软件测试更多干货文章

软件测试就业培训


文章来源:网络  版权归原作者所有

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8103),我们将立即处理

相关阅读
/