**
性能测试
**
性能测试是什么
就是说基于协议模拟用户的发出请求,对服务器进行一定的负载,来测试服务器的性能指标是否满足要求性能指标关注点:时间性能、空间性能,性能测试与页面无关
性能测试工具:HP LoadRunner、Apache AB、Apache Jmeter
Jmeter简介
1.我们为什么使用Jmeter
开源,免费,基于Java编写,可集成到其他系统可拓展各个功能插件
支持接口测试,压力(负载和压力)测试等多种功能,支持录制回放,
入门简单相较于自己编写框架活其他开源工具,有较为完善的UI界面,便于接口调试
多平台支持,可在Linux,Windows,Mac上运行,支持多协议
2.Jmeter的作用
- 接口测试 因为方便好用。
- 性能测试 jmeter,也可以用postman(runner),但是没有性能指标
- 数据库测试
3.Jmeter下载安装
JMeter安装
1.http://jmeter.apache.org/下载最新版本的JMeter,解压文件到任意目录
2.安装JDK,配置环境变量JAVA_HOME.
3.系统要求:JMeter2.11 需要JDK1.6以上的版本支持运行
4.JMeter可以运行在如下操作系统上:Unix,Windows和Open VMS.
5.避免在一个有空格的路径安装JMeter,这将导致远程测试出现问题。
运行:进入bin目录运行jmeter.bat启动jmeter
注意:打开的时候会有两个窗口,JMeter的命令窗口和JMeter的图形操作界面,不可以关闭命令窗口。
Windows下Jmeter下载安装,登录 http://jmeter.apache.org/download_jmeter.cgi ,根据自己平台,下载对应文件
4.安装JAVA环境
安装JDK,配置环境变量(具体步骤不做介绍)
将下载Jmeter文件解压,打开/bin/jmeter.bat
可以将语言切换位中文,如图所示:
Jmeter的目录结构
/bin 目录常用文件介绍:
examples:目录下包含Jmeter使用实例
ApacheJMeter.jar:JMeter源码包
jmeter.bat:windows下启动文件
jmeter.sh:Linux下启动文件
jmeter.log:Jmeter运行日志文件
jmeter.properties:Jmeter配置文件
jmeter-server.bat:windows下启动负载生成器服务文件
jmeter-server:Linux下启动负载生成器文件
/docs目录——Jmeter帮助文档
/extras目录——提供了对Ant的支持文件,可也用于持续集成
/lib目录——存放Jmeter依赖的jar包,同时安装插件也放于此目录
/licenses目录——软件许可文件,不用管
/printable_docs目录——Jmeter用户手册
Jmeter的快速入门-http请求
使用Jmeter访问一个网站 , 并查看请求和响应信息
步骤:
1.启动Jmeter
2.在 测试计划 中添加 线程组
3.在 线程组 中添加 http请求 取样器
4.在 http请求 中添加对应的请求参数
5.在 线程组 下添加 察看结果树 监听器
6.点击 启动 按钮,并查看结果
创建线程组
如图所示,在Test Plan上右键,然后做如下操作:
**线程组主要包含三个参数:**线程组Number of Threads)、准备时长(Ramp-Up Period(in seconds))、循环次数(Loop count)。
线程组(Number of Threads):
虚拟用户数。一个虚拟用户占用一个线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
准备时长(秒)(Ramp-Up Period(in seconds)):
设置的虚拟用户数需要多长时间全部启动。如果线程数为20 ,准备时长为10 ,那么需要10秒钟启动20个线程。也就是每秒钟启动2个线程。
循环次数(Loop count):
每个线程发送请求的次数。如果线程数为20 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,一直到选择停止运行脚本。
调度器
设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
持续时间(秒)
测试持续时间,会覆盖结束时间
启动延迟(秒)
测试延迟启动时间,会覆盖启动时间
11.3.2 创建http请求
线程组右键 – Add — Sampler(取样器)-- HTTP Request
关于http请求的的属性参数说明:
1)Name(名称):用于标识一个sample。建议使用一个有意义的名称
2)Comments(注释):对于测试没任何影响,仅用来记录用户可读的注释信息
3)Protocol(协议):向目标服务器发送http请求时的协议,http/https,大小写不敏感,默认http
4)Server Name or IP(服务器名称或IP):http请求发送的目标服务器名称或者IP地址,比如http://www.baidu.com
5)Port Number(端口号):目标服务器的端口号,默认值为80,可不填
6)Method(方法):发送http请求的方法(链接:http://www.cnblogs.com/imyalost/p/5630940.html)
7)Path(路径):目标的URL路径(不包括服务器地址和端口)
8)Content encoding:内容的编码方式(Content-Type=application/json;charset=utf-8)
————————————————————————————————————————————————————————
9)Redirect Automatically(自动重定向):如果选中该项,发出的http请求得到响应是301/302,jmeter会重定向到新的界面
10)Follow Redirects(跟随重定向):如果发出的http请求得到响应是301/302,jmeter会重定向到新的界面
11)Use keep Alive:jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信(默认选中)
12)Use multipart/from-data for HTTP POST :当发送HTTP POST 请求时,使用
13)Browser Compatible headers
————————————————————————————————————————————————————
14)Parameters、Body Data以及Files Upload的区别:
1. parameter是指函数定义中参数,而argument指的是函数调用时的实际参数
2. 简略描述为:parameter=形参(formal parameter), argument=实参(actual parameter)
3.在不很严格的情况下,现在二者可以混用,一般用argument,而parameter则比较少用
当定义方法时,传递到方法中的变量称为参数.
当调用方法时,传给变量的值称为引数.(有时argument被翻译为“引数“)
4.Body Data指的是实体数据,就是请求报文里面主体实体的内容,一般我们向服务器发送请求,携带的实体主体参数,可以写入这里
5、Files Upload指的是:从HTML文件获取所有有内含的资源:被选中时,发出HTTP请求并获得响应的HTML文件内容后还对该HTML进行Parse 并获取HTML中包含的所有资源(图片、flash等):(默认不选中)
如果用户只希望获取特定资源,可以在下方的Embedded URLs must match 文本框中填入需要下载的特定资源表达式,只有能匹配指定正则表达式的URL指向资源会被下载
使用监听器查看结果
对于http请求的结果,我们可以使用监听器去查看,通常使用的有三种:察看结果树,聚合报告,用表格查看结果
在线程组中修改 线程数,Ramp-up时间,循环次数,点击绿色三角图标运行
察看结果树
通过察看结果树,我们可以看到每个请求的结果,其中红色的是出错的请求,绿色的为通过。
Thread Name:线程组名称
Sample Start: 启动开始时间
Load time:加载时长
Latency:等待时长
Size in bytes:发送的数据总大小
Headers size in bytes:发送数据的其余部分大小
Sample Count:发送统计
Error Count:交互错误统计
Response code:返回码
Response message:返回信息
Response headers:返回的头部信息
聚合报告
lable:对应每一个http请求,显示的是http请求的Name,如百度http请求name为baidu
#Samples:表示这一次的测试中一共发出了多少请求,如上图所示,sougou和baidu的http请求每个都发出30个请求
Average:平均响应时间,指的是所有的请求的平均响应时间,如上图的30个请求的总的响应时间除以30得出的平均响应时间,默认的情况下是单个请求的平均响应时间,但当使用了“事务控制器”时,则以事物为单位显示平均响应时间
Median:中位数,响应时间的中值
90%Line:90%用户的响应时间
Min:最小响应时间
Max:最大的响应时间
Error%:本次测试中出现错误的请求的数量/请求的总数,如上图所示,本次的测试中,sougou的http请求66.6%的请求出错,而baidu的请求则没有出错的请求
Throughput:吞吐量,默认情况下表示每秒完成的请求数,如上图请求所示,每秒完成的请求数分别为2.9个每秒,13.7个每分钟
Recived KB/Sec:每秒从服务器端接收到的数据量,以kb为计算的单位
掌握:平均时间、错误率、吞吐量。
用表格察看结果
Sample:每个请求的序号
Start Time:每个请求开始时间
Thread Name:每个线程的名称
Label:Http请求名称
Sample Time:每个请求所花时间,单位毫秒
Status:请求状态,如果为勾则表示成功,如果为叉表示失败。
Bytes:请求的字节数
样本数目:也就是上面所说的请求个数,成功的情况下等于你设定的并发数目乘以循环次数
平均:每个线程请求的平均时间
最新样本:表示服务器响应最后一个请求的时间
偏离:服务器响应时间变化、离散程度测量值的大小,或者,换句话说,就是数据的分布。