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

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

简单模拟工具

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

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专业人士也能操作,但是灵活度不足,使用方式上类似于第一类【简单模拟工具】,对于脚本编写支持一般,比较适合需要持久大规模压力的需求。

总结

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

原文地址:https://www.cnblogs.com/frog4/p/8874255.html

时间: 2024-08-12 23:33:53

性能测试入门(三):性能测试工具的相关文章

Jmeter Web 性能测试入门 (三):Jmeter 常用组件说明

线程组:用来设置并发的数量和模式.是用来模拟用户并发的组件.JMeter 的每个任务都是用线程来处理的.线程数:要并发的请求数量.Ramp-Up Period: 在多次时间内把这些并发的请求发送完,单位秒循环次数:这些并发一共要循环测试多少次调度器:启动时间:测试计划什么时候启动,启动延迟会覆盖它.当启动时间已过,手动运行脚本时当前时间也会覆盖它(但启动时间页面显示不会变).结束时间:测试计划什么时候结束,持续时间会覆盖它.持续时间(秒):测试计划持续多长时间,会覆盖结束时间.启动延迟(秒):测

性能测试入门-Jmeter工具与监控全方位打造

第1章 性能测试整体认知了解性能测试的目的,想做好性能测试都需要掌握哪些方面的技能(开发语言.操作系统.网络.工具等).性能测试.稳定性.压力.疲劳.容量预估.多并发逻辑.掌握如何开始性能测试,并且掌握在性能测试中每个部分的工作重点,了解软件架构.监控部署.脚本准备.场景设置及知道为什么需要做这些.掌握:事务.请求响应时间.... 1-1 性能测试行业分析 1-2 性能测试技能树 1-3 性能测试的目的及分类 1-4 性能测试的工作流程 1-5 常见系统应用分层架构 1-6 性能测试指标定义 1

JMeter性能测试入门篇,超详细

原文转自:https://blog.csdn.net/lovesoo/article/details/78579547 1. Jmeter简介 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件.相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工具之一. 本文为JMeter性能测试完整入门篇,从Jmeter下载安装到编写一个完整性能测试脚本.最终执行性能测试并分析性能测试结果. 运行环境为Windo

转:性能测试中的性能测试指标与用户体验分析

转自:http://www.ltesting.net/ceshi/ceshijishu/xncs/2012/0223/204182_2.html 性能测试中的性能测试指标与用户体验分析 网络应用性能分析的目的是准确展示网络带宽.延迟.负载和TCP端口的变化是如何影响用户的响应时间的.利用网络应用性能分析工具,例如 Application Expert,能够发现应用的瓶颈,我们可知应用在网络上运行时在每个阶 网络应用性能分析的目的是准确展示网络带宽.延迟.负载和TCP端口的变化是如何影响用户的响应

MongooooooooooooooooooooDB入门三:MongoDB shell

MongoDB shell是什么? MongDB shell是一个功能完备的Javascript解释器,可以运行Javascript程序. 但shell的作用远不止于此,它主要还是用于连接MongoDB服务器,执行脚本,对数据库进行操作.类似于SQL Server的管理工具SSMS. 可以通过以下2条命令打开shell控制台: > cd C:\Program Files\MongoDB 2.6 Standard\bin > mongo 如图所示: C:\Program Files\MongoD

安全性测试入门 (三):CSRF 跨站请求伪造攻击和防御

安全性测试入门 (三):CSRF 跨站请求伪造攻击和防御 本篇继续对于安全性测试话题,结合DVWA进行研习. CSRF(Cross-site request forgery):跨站请求伪造 1. 跨站请求伪造攻击 CSRF则通过伪装成受信任用户的请求来利用受信任的网站,诱使用户使用攻击性网站,从而达到直接劫持用户会话的目的. 由于现在的主流浏览器比如火狐和谷歌,都倾向于使用单个进程来管理用户会话(比如我们在FF和Chrome中,当要访问一个新页面时,通常是通过新增浏览器页面来达到的,而不是新开一

Flex入门(三)——微架构之Cairngorm

大家都知道我们在开发后台的时候,都会使用MVC,三层等分层架构,使后台代码达到职责更为分明单一,高内聚低耦合,例如,Dao层只是进行和数据库打交道,负责处理数据:Service(B层)只是进行逻辑判断处理,而Action则进行后台和前台页面的交互等.从而使程序更加容易管理,更加灵活,更加容易扩展,更加容易维护.也就是大家比较熟悉的Struts(SpringMVC)+Spring+Hibernate(Mybatis)等. 而作为前台Flex处理,也提供了类似的处理功能,想要达到的效果,也是代码分层

Swift语法基础入门三(函数, 闭包)

Swift语法基础入门三(函数, 闭包) 函数: 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被用于“调用”函数 格式: func 函数名称(参数名:参数类型, 参数名:参数类型...) -> 函数返回值 { 函数实现部分 } 没有参数没有返回值 可以写为 ->Void 可以写为 ->() 可以省略 Void.它其实是一个空的元组(tuple),没有任何元素,可以写成() func say() -> V

Thinkphp入门三—框架模板、变量(47)

原文:Thinkphp入门三-框架模板.变量(47) [在控制器调用模板] display()   调用当前操作名称的模板 display(‘名字’)  调用指定名字的模板文件 控制器调用模板四种方式: [在控制器给模板传递变量] 在smarty里边给模板传递变量信息 $smarty -> assign(变量名称,值); 在tp框架里边同样适用assign()给模板传递变量信息 ThinkPHP的模板引擎的左右标记: ThinkPHP/Lib/ Behavior/ ParseTemplateBe

Redbean:入门(三) - Exec 以及 Query 以及 ConvertToBeans

<?php //引入rb入口文件 include_once 'rb.php'; //定义dsn以及相关的数据 $dsn = 'mysql:host=localhost;dbname=hwibs_model'; $user = 'root'; $pass = ''; $table = 'link'; //链接数据库 R::setup($dsn,$user,$pass); //链接数据表 R::dispense($table); //exec::直接执行一条sql语句[不需要链接表即可使用][参数2