Jmeter,一款开源的性能测试工具,提供比较详细的用户手册、API文档,与Loadrunner用法相似,也支持脚本录制。这里以知旅行淘宝下单请求与响应为例,介绍一下jmeter如何做性能测试。
启动Jmeter:
启动jmeter,Mac下允许JMETER_HOME/bin/jmeter.sh脚本,windows下运行JMETER_HOME/bin/jmeter.bat脚本。
添加线程组:
添加测试线程组,选择测试计划(右键)_添加_Threads_线程组,如图
线程组配置,根据实际需求设置线程数、线程拉起时间、测试计划执行时间,其中线程执行之间有三种可选:
在执行之前我们需要先调试接口,所以先将线程属性都设置为1
配置请求:
选中添加的线程组_添加_Sampler_HTTP请求,如图
设置http请求,填写服务器名称or IP、端口号、响应超时时间、协议类型、请求方式,如图
完整的连接172.16.10.157:8081/sc-taobao-war/taobao/callback.html
如果http请求是请求体,需要添加http信息头管理器,选中线程组_添加_配置元件_http信息头管理器,如图
信息头管理器配置如图,点击添加按钮,然后添加信息头中内容的名称和值。
添加完信息头管理器,就可以配置http请求,如图选择Body Data,然后就可以输入请求体的内容。
本例子选择的是直接添加参数发送的方式,可根据接口文档直接添加参数名称和值,如图,淘宝给出的接口文档
在Jmeter添加对应的参数,如图
配置好各项参数,在执行之前需要添加监听,不然查看不到执行结果。
添加监听器
Jmeter有多个监听器供选择,选中线程组_添加_监听器_,客户端/服务端的请求响应,最常见的监听器是察看结果树、聚合报告(图形结果对性能测试的结果有一定影响)。
添加完监听之后,我们就可以尝试执行请求了。
执行之后点击察看结果树,察看执行结果
此时取样器结果显示的应答码是200,应答信息是OK,所以结果判断是成功的。我们继续看请求和响应数据,如图
响应数据是300,表明这个请求失败了,但是结果树显示却是成功。如何让结果树显示我们需要的正确结果了?这时我们需要用到另一样东西,响应断言。
响应断言:
选中线程组_添加_断言_响应断言
选择添加,然后输入需要判断成功的响应数据;再次执行请求,察看结果树。
当响应数据正确时,如图
此时表示结果能正确显示,同时该接口也调试成功。
本例中的参数值是固定值,也可以使用函数或者参数化,如例子中的时间可以用时间函数${__time(yyyy-MM-dd HH:mm:ss,)} 2016-10-25 17:28:16 来显示当前时间。
参数化设定:
Jmeter参数化有多种方法,这里介绍一种比较使用的方法,采用文件读取方式,选中线程组_添加_配置元件_CSV Data Set Config,如图
CSV Data Set Config参数化配置,以行为单位读取参数化文件,比参数化函数_CSVRead()和_StringFromFile()更方便使用,具体配置如图
Filename: 参数项文件,可以采用绝对路径和相对路径;
File Encoding: 文件的编译方法,可以为UTF-8或者是GB2312等,需要与参数化文件的
编码方式一致
Variable Names:文件中各列所表叔的参数项,如:mobile,name,num,各项之间用逗
号隔开,参数项名称应与HTTP请求中的参数项保持一致。
Delimiter: 参数分隔符,如文件中使用的是逗号分隔符则填写逗号;如使用TAB键,则
填写\t
Allow quoted data?:是否允许引用数据,设置为flase,避免引起乱码;
Recycle on EOF?:当读取到文件尾处,是否从头读取,可以为true或者flase;
Stop thread on EOF?:当Recycle on EOF?一项为false时起效;true=当读取到文件结尾,停
止进程
Sharing mode:共享组,方便起见,选择“ALL threads”。
CSV文件内容如图
HTTP请求参数配置如图
聚合报告:
性能测试结果最主要的结论来源就是聚合报告。
#Samples:请求总数,表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
Average:平均响应时间
Median:中位数,也就是 50% 用户的响应时间
90% Line:90% 用户的响应时间
Min:最小响应时间
Max:最大响应时间
Error%:本次测试中出现错误的请求的数量/请求的总数
Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec