一、JMeter的介绍
JMeter是Apache组织开发的基于Java的压力测试工具。JMeter能够对HTTP和FTP服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试(通过JDBC)。(Jmeter 开源免费)
1 、进程与线程
线程:是程序执行流的最小单元,是系统独立调度和分配CPU(独立运行)的基本单位。
进程:是资源分配的基本单位。一个进程包括多个线程。
多线程:同一时刻执行多个线程。如,用浏览器一边下载,一边听歌,一边看视频,一边看网页......
多进程:同时执行多个程序。如,同时运行微信,QQ,以及各种浏览器
2、Jmeter性能测试的一些相关概念
(1) 压测:通过逐步加压的方法,使得系统的某些资源达到饱和,甚至失效的状态,简单粗暴的解释就是什么条件能把系统压崩溃。Jmeter通过模拟大量的虚拟用户向服务器产生负载,使服务器的资源处于极限状态下长时间连续运行,以测试服务器在高负载情况下是否能够稳定工作。
(2) 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。也就是说并发是指在一段时间内宏观上多个程序同时运行。(区别于并行,并行是指在同一时刻,有多条指令在多个处理器上同时执行。所以无论从微观还是从宏观来看,二者都是一起执行的。)JMeter是以线程的方式来进行模拟用户的并发访问的。
(3) 并行:当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)
(3) 吞吐量(Throughput):是指系统在单位时间处理的请求数量。对于无并发的应用系统而言,吞吐量与响应时间成严格的反比关系,实际此时吞吐量就是响应时间的倒数。对于单用户的系统,响应时间可以很好地度量系统的性能,但对于并发系统,通常需要吞吐量作为性能指标。
(4) QPS每秒查询率(Query Per Second)每秒查询率QPS是对一个特定的查询服务器在规定的查询服务器在规定时间内所处理流量多少的衡量标准。(类似于TPS,只是应用于特定场景的吞吐量)
二、JMeter的组成
测试计划:测试脚本根节点,每一个测试脚本都是一个测试计划,名称可以自己定义。
线程组:控制多线程并发,设置虚拟用户。
断言:预期结果和实际结果比对。
定时器:操作线程时候停顿多长时间之类。
监听器:重要组成部分,可以用来调试脚本,看看是否成功,还可以对资源进行监控。
配置元件: 重要组成部分,可以在里面获取cookie信息之类的配置信息。
后置处理器: 在并发完成后想要做什么。后一个请求用到前一个请求的结果,用后置处理器就可以拿到,放的一个变量里,下一次请求去用。
前置处理器:请求发生前做什么。
逻辑控制器:当一个条件满足时,需要去做的操作。
Sampler:放置请求。
三、JMeter的使用
1、添加线程组
步骤:右键点击“测试计划” -> “添加” -> “线程(用户)” -> “线程组”
线程组参数(线程属性)详解:
(1) 线程数:虚拟用户数。一个虚拟用户占用一个进程或者线程,设置多少虚拟用户数在这里也就是设置多少个线程数。
(2) Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。
(3) 循环次数:每个线程发送的请求次数。eg:如果线程数为10,循环次数是20,那么每个线程发送20次请求。总请求数为10*20=200。如果勾选“永远”,那么所有线程会一直发送请求,除非手动选择停止运行脚本。
(4) 调度器
持续时间(秒):测试计划持续多长时间
启动延迟(秒):测试计划延长多长时间启动
2、添加HTTP请求
步骤:右键点击“线程组” -> “添加” -> “Sampler” -> “HTTP请求”
(1) Web服务器
协议:向目标服务器发送HTTP请求协议,可以是HTTP或HTTPS,默认为HTTP
服务器名称或IP :HTTP请求发送的目标服务器名称或IP
端口号:目标服务器的端口号,默认值为80
(2) Http请求
方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、DELETE等。
路径:目标URL路径(URL中去掉服务器地址、端口及参数后剩余部分)
Content encoding :编码方式,默认为ISO-8859-1编码,这里配置为utf-8
同请求一起发送参数
在请求中发送的URL参数,用户可以将URL中所有参数设置在本表中,表中每行为一个参数(对应URL中的 name=value),注意参数传入中文时需要勾选“编码”
3、添加察看结果树
步骤:右键点击“线程组” -> “添加” -> “监听器” -> “察看结果树”
4、添加用户自定义变量
5、添加断言、断言结果
4、添加聚合报告
聚合报告参数说明:
Label:每个请求的名称,eg:HTTP请求
#样本(#Samples):请求数——表示在这次测试中一共发了多少个请求
平均值(Average):平均响应时间——单个请求的平均响应时间
中位数(Median):所有请求响应时间的中间值
90%~99%百分位(Line):90%~99%用户的响应时间
最小值(Min):最小响应时间
最大值(Max):最大响应时间
异常(Error)%:错误率——错误请求数/请求总数
吞吐量(Throughput):每秒完成的请求数
接收KB/Sec: 每秒从服务器端接收到的数据量
发送 KB/src:每秒从客户端发送的请求的数量。
一般而言,性能测试中我们需要重点关注的数据有: Samples 请求数,Average 平均响应时间,Min 最小响应时间,Max 最大响应时间,Error% 错误率及Throughput 吞吐量。