性能测试入门(三):性能测试工具

时间:2020-11-27 19:36:05

这篇文章介绍下性能测试工具:

简单模拟工具

有很多场景下,我们只是想做一个简单的压测,对于监测结果要求并不高,压测的场景也比较简单,不想安装复杂的工具,这种情况下,推荐使用简单的模拟工具进行就可以了。

ab

ab即ApacheBench,是apache自带的一款功能强大的测试工具,安装了apache一般就自带了,即httpd(在bin目录下)。 ab主要是设计用来测试apache的性能,但是使用ab可以同时模拟多个并发请求,专门用于HTTP Server的压测,

优点是:

  1. 小巧、性能好
  2. post请求,传参等基本http功能齐全
  3. 支持windows(这点其实不容易)

缺点是:

  1. 得装个apache web服务器
  2. 一次测试只能支持单个链接

命令格式简单示例:

$ ab -n1000 -c100 https://www.baidu.com/

这句的意思是用100个并发线程完成1000次对网页的访问,返回结果如下:

This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.baidu.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        BWS/1.1
Server Hostname:        www.baidu.com
Server Port:            443
SSL/TLS Protocol:       TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128

Document Path:          /
Document Length:        227 bytes

Concurrency Level:      100
Time taken for tests:   3.581 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      872000 bytes
HTML transferred:       227000 bytes
Requests per second:    279.25 [#/sec] (mean)
Time per request:       358.107 [ms] (mean)
Time per request:       3.581 [ms] (mean, across all concurrent requests)
Transfer rate:          237.80 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       87  255  61.1    257    1217
Processing:    28   73  43.1     60     256
Waiting:       28   57  29.2     47     242
Total:        141  328  51.0    323    1371

Percentage of the requests served within a certain time (ms)
  50%    323
  66%    335
  75%    344
  80%    353
  90%    373
  95%    384
  98%    431
  99%    465
 100%   1371 (longest request)

最关键的指标是:

Requests per second:    279.25 [#/sec] (mean)
Time per request:       358.107 [ms] (mean)

标明的是QPS为279.25 ,请求处理的平均时间是358ms。

siege

siege是一个linux下的压测工具,基本功能和ab差不多,但是他是个独立的工具,可以独立安装。另支持传入文件列表,可以允许一次性压测多个链接(注意是随机访问,不是顺序访问)。

官方网站:https://www.joedog.org/siege-home/

下载地址:http://download.joedog.org/siege/siege-3.1.4.tar.gz

安装

# tar -xzvf siege-3.1.4.tar.gz 
# cd siege-3.1.4
# ./configure
# make 
# make install

使用方式及返回结果与ab类似,看官网或者看其他类型文章即可,不做赘述。

注意:http_load和webbenche都是linux下不错的Web压测工具,非常小巧,是用来也比较简单。但是都不支持post的请求,没有ab和siege均衡,返回结果也显得简单,因此不做推荐。

专业压测工具

Jmeter

官方:http://jmeter.apache.org/download_jmeter.cgi

Gatling出来之前,在免费领域的工具,其实基本上只有Jmeter一个选择。Jmeter使用java语言开发,拥有完善的一个UI界面、录制脚本、报表展示、支持思考时间、参数传递等复杂功能。学习一个压力测试工具网络上已经有太多的教程了,随便搜索即可。这里只谈两点:

  1. Jmeter的录制脚本的功能,可以使用另外一个工具badboy来代替。
  2. Jmeter是可以在linux下使用命令行执行的,不需要必须使用UI界面。这点很多同学都不知道。因为在一些环境下,Linux服务是不放开图形界面的,所以这一点也非常重要。

Jmeter的缺点主要是使用了Java编写,并采用一个并发一个线程的方式,本身性能并不很好,在需要很大压力的情况下,往往对于客户端要求配置比较高。另外报表丑了点。

Gatling

Gatling号称新一代的服务器性能测试工具,其实也是基于Java研发的,但是它采用了Akka Actors和Async IO,因此理论上性能上比Jmeter会更好一点,最近几年越来越流行。程序员的世界里喜新厌旧是永恒的主题,后浪总能把前浪排在沙滩上。

  • 在测试脚本撰写方面,Gatling选择了Scala代码,而JMeter选择的是XML代码。所以Scala更容易看出逻辑,相对更好维护。
  • 在报表上,Gatling的报表更轻量级,更好用一点。

但是新生事物其实也存在他的问题,比如中文文档相对较少,可能会存在某些未知的坑,目前中文环境下介绍Gatling的并没有那么多,建议多参考下官网:

https://gatling.io/

LoadRunner

收费软件,庞大无比,功能强大,特别是报表UI、脚本录入等功能,但是随着开源软件以及云压测工具的兴起,渐渐显露疲态,受到关注小多了。

云压测工具

进入到互联网软件领域,随着软件的规模原来越大,所需要压测量级越来越大,对于模拟数据的真实性也越来越高,性能测试不再是单机或者几台机器能完成的,随之而来的压测工具也变成了分布式的,逐步走向服务化。比如阿里云的PTS、APM的云压测工具,腾讯的WeTest都是解决特定Web领域的压测软件,目前都是近几年刚刚兴起,走在发展的道路上。但是这部分软件目前只解决了压力上不去的问题,让非IT专业人士也能操作,但是灵活度不足,使用方式上类似于第一类【简单模拟工具】,对于脚本编写支持一般,比较适合需要持久大规模压力的需求。

总结

本文主要介绍了性能测试工具的几种类型。简单模拟工具安装简单,使用简单,比较适合程序员自行压测解决软件问题。专业压测工具主要面向专门测试人员,有一定的入门门槛,需要使用人有撰写脚本或者至少修改脚本的能力,提供的功能也更多,数据也更准确。云压测工具主要适用于云端,对于压力要求较高,或者使用了该厂商的其他云组件服务,或者本身没有专业性能测试能力,可以考虑下云压测工具。