一.下载及安装教程
1. http://jmeter.apache.org/download_jmeter.cgi 下载
2.解压这个jmeter包
3.cd到这个解压包的bin目录
4.sh jmeter 打开jmeter
二.第一个jmeter测试
1.添加线程组
在测试计划右键弹出下拉菜单(添加-->Threads(Users)--->线程组)中选择线程组即可。
线程组主要包含三个参数:线程数、准备时长(Ramp-Up Period(in seconds))、循环次数。
(1)线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
(2)准备时长: 设置的虚拟用户数需要多长时间全部启动。如果线程数为20 ,准备时长为10 ,那么需要10秒钟启动20个线程。也就是每秒钟启动2个线程。
(3)循环次数:每个线程发送请求的次数。如果线程数为20 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
设置合理的线程数对于能否达到测试目标有决定性的影响。在本例中,要求得到网站首页在20 QPS 负载情况下的响应时间,如果如果线程数量设置的过小,则很可能无法达到设定的QPS要求。另外,设置合理的循环次数也很重要,除了上面介绍的固定循环次数与永远外;也可以灵活的选择设定测试运行时间。勾选“调度器”,进行调度器配置。
2.添加http请求
线程组上右键菜单(添加--->Sampler--->HTTP请求)选择HTTP请求。
配置参数:
(1)名称:本属性用于标识一个取样器,建议使用一个有意义的名称。
(2)注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。
(3)服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址。比如:mini-dev-finance.haimaiche.net
端口号:目标服务器的端口号,默认值为80 。
(4)协议:向目标服务器发送HTTP请求时的协议,可以是http或者是https ,默认值为http 。
(5)方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
Content encoding :内容的编码方式,默认值为iso8859
(6)路径:目标URL路径(不包括服务器地址和端口)。比如:/v2/appHomePage/appShow.json
自动重定向:如果选中该选项,当发送HTTP请求后得到的响应是302/301时,JMeter 自动重定向到新的页面。
(7)Use keep Alive : 当该选项被选中时,jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信,默认选中。
(8)Use multipart/from-data for HTTP POST :当发送HTTP POST 请求时,使用Use multipart/from-data方法发送,默认不选中。
(9)同请求一起发送参数 : 在请求中发送URL参数,对于带参数的URL ,jmeter提供了一个简单的对参数化的方法。用户可以将URL中所有参数设置在本表中,表中的每一行是一个参数值对(对应RUL中的 名称1=值1)。
(10)同请求一起发送文件:在请求中发送文件,通常,HTTP文件上传行为可以通过这种方式模拟。
(11)从HTML文件获取所有有内含的资源:当该选项被选中时,jmeter在发出HTTP请求并获得响应的HTML文件内容后,还对该HTML进行Parse 并获取HTML中包含的所有资源(图片、flash等),默认不选中,如果用户只希望获取页面中的特定资源,可以在下方的Embedded URLs must match 文本框中填入需要下载的特定资源表达式,这样,只有能匹配指定正则表达式的URL指向资源会被下载。
(12)用作监视器:此取样器被当成监视器,在Monitor Results Listener 中可以直接看到基于该取样器的图形化统计信息。默认为不选中。
(13)Save response as MD5 hash? :选中该项,在执行时仅记录服务端响应数据的MD5值,而不记录完整的响应数据。在需要进行数据量非常大的测试时,建议选中该项以减少取样器记录响应数据的开销。
3.设置QPS限制
在http请求上添加(添加--->定时器--->Constant Throughput Timer)
属性参数:
(1)Target throughput(in samples per minute):目标吞吐量。注意这里是每分钟发送的请求数,因此,对应测试需求中所要求的20 QPS ,这里的值应该是1200 。
(2)Calculate Throughput based on :有5个选项
4.添加监听器
右键点击线程组,在弹的菜单(添加--->监听器--->聚合报告)中选择聚合报告。
也可以生成其他监听器
监控结果需要关注的有:成功率、响应时间、标准差、CPU、mem内存、io等
5.聚合报告分析
6.响应结果出现乱码
当响应内容没有设定编码时,jmeter会按照jmeter.properties文件中设定的编码进行解码。默认的编码为ISO-8859-1,所以在解析中文时出错。
解决办法:
添加后置处理器--BeanShellPostProcessor
设置编码为UTF-8
7.jemter自带后置处理器,正则表达式提取,可用来提取接口响应的信息,给后续接口传参使用
假设我们要取登录接口的sessionId字段
先添加后置处理器--正则表达式
(1)名称:取一个有意义的名称
(2)Apply to:应用范围(一般就选择默认的Main sample
only),就算有重定向,一般也是提取最终那个请求的接口。
(3)要检查的响应字段:
主体:
接口响应主体内容,一般要提取普通http响应结果的数据,都勾选这个。
信息头:响应头的所有内容。
Request
Headers:请求头的所有内容。
url:是对sample的url进行匹配,也就是查看结果树里请求内容的第一行url,不包含data里的请求参数(即只能匹配protocol(协议)+host+path+querystring,如:https://www.baidu.com/index.php?tn=monline_3_dg)。
响应代码:http响应代码,如101,200,302,404,501等。
响应信息:http响应代码对应的响应信息,例如:OK,
Found(HTTP/1.1 200 Ok;HTTP/1.1 302 Found)。
(4)引用名称:其他地方引用时的变量名称比如sessionId,名称只能是一个,引用方法:${sessionId}
(5)
正则表达式:
数据提取器,一般简单的通用语法就是:左边界(.*?)右边界,(.*?)
是替换了想要提取的内容,里面的'?'为非贪婪匹配,(非贪婪模式就是说在遇到第一个右边界后就停止匹配,这样就可以精确拿到想要的内容)。建议均使用非贪婪匹配,除非特殊情况。"sessionId":"(.*?)","settedTradePwd":(.*?),"type":(.*?), 注意 (.*?)要不要加""取决于返回的这个字段的值有没有""
模板:
对应正则表达式提取器类型,样式为:$n$。若模板为:$0$,则为整个表达式匹配到的内容,就是包括小括号内跟小括号外的内容,即("sessionId":"d116c405a75e406db7e74eaee5e02d8d","settedTradePwd":0,"type":1,"userId":30289)。若模板为:$1$,则对应正则表达式中的第一个(.*?)所匹配的内容,即(d116c405a75e406db7e74eaee5e02d8d),若模板为:$2$,则对应正则表达式中的第二个(.*?)所匹配的内容,即(0),若模板为$1$$2$,则把2个(.*?)所匹配的内容拼接起来,即(d116c405a75e406db7e74eaee5e02d8d0)。
匹配数字:
正则表达式匹配数据的最终结果可以看做一个数组,匹配数字即可看做是数组的第几个元素。当为 0 时,随机返回匹配的数据。当为 1 时,表示返回匹配结果数组的第一个元素。当为负数(-1,-2,-100都可以)时,表示返回全部元素,并且同时会返回一个元素总数的变量,在引用时:通过${sessionId_g1}的方式来取第1个匹配的内容,${sessionId_g2}来取第2个匹配的内容。
缺省值:
匹配失败时的默认值。通常用于后续的逻辑判断,建议使用一些特殊含义的,比如0,NULL,ERROR等。
正则测试,添加后置处理器Debug PostProcessor,
正则结果查看,添加查看结果树,在Debug
PostProcessor查看变量值,以下就是返回的变量值