使用Jmeter进行http接口测试
Posted liangww
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Jmeter进行http接口测试相关的知识,希望对你有一定的参考价值。
一、聚合报告
1、90%百分位值为230ms,在发送100笔请求过程中,聚合报告会实时给请求耗时进行由小到大行排序,排序后的第90个请求耗时为230ms,也就是说前90笔请求中耗时最长的是230ms(其余90%百分位,95%百分位道理类似就不占篇赘述了),聚合报告平均值要与百分位值结合来看。
2、经常有的同学直接把聚合报告中的吞吐量当作TPS来看,这种做法是相当不严谨的。那么聚合报告中的吞吐量什么情况下可以看成TPS?从严格意义来讲就是交易成功率为100%;还有一种情况是:交易失败率在你可以接受的范围内(对当前测试整体结果影响不大,到了可以忽略的程度)。
二、html报告
性能测试工具Jmeter由于其体积小、使用方便、学习成本低等原因,在现在的性能测试过程中,使用率越来越高,但其本身也有一定的缺点,比如提供的测试结果可视化做的很一般。不过从3.0版本开始,jmeter引入了Dashboard Report模块,用于生成HTML类型的可视化图形报告(3.0版本的Dashboard Report模块会中文乱码,因此建议使用3.0以上的版本)。
1、利用已有.jtl文件生成报告
之前的博客介绍过如何在linux环境运行jmeter并生成报告,如果已经有经过测试生成的.jtl文件,可以利用该文件直接生成HTML可视化测试报告。
进入jmeter的bin目录下,输入如下命令:
jmeter -g test.jtl -o /path # -g:后跟test.jtl文件所在的路径 # -o:后跟生成的HTML文件存放的路径
PS:如果是在Windows环境命令行运行,必须指定生成的HTML文件存放文件夹,否则会报错;如果是linux环境,如指定路径下不存在该文件夹,会生成对应的文件夹存放报告文件!
2、无.jtl文件生成测试报告
如果还未生成.jtl文件,则可以通过如下命令,一次性完成测试执行和生成HTML可视化报告的操作,进入jmeter的bin目录下,输入如下命令(linux系统和windows系统命令一样)需要注意的是,生成的.jtl文件路径下,不能存在同名的.jtl文件,否则会执行失败。):
jmeter -n -t test.jmx -l test.jtl -e -o /path # -n:以非GUI形式运行Jmeter # -t:source.jmx 脚本路径 # -l:result.jtl 运行结果保存路径(.jtl),此文件必须不存在 # -e:在脚本运行结束后生成html报告 # -o:用于存放html报告的目录
执行完毕后,用浏览器打开生成的文件目录下的index文件,效果展示如下:
其默认提供的度量维度包括:
1、APDEX(Application Performance Index)指数
2、聚合报告:类似于UI上的 「Aggregate Report」
3、Errors报告:展示不同错误类型的数量以及百分比
4、响应时间变化曲线: 展示平均响应时间随时间变化情况,类似于JMeter Plugins在UI上的*jp@gc - Response Times Over Time*
5、数据吞吐量时间曲线:展示每秒数据吞吐量随时间变化的情况,类似于JMeter Plugins在UI上的*jp@gc - Bytes Throughput Over Time*
6、Latency time变化曲线:展示Latency time随时间变化的情况,类似于JMeter Plugins在UI上的*jp@gc - Response Latencies Over Time*
7、每秒点击数曲线:类似于JMeter Plugins在UI上的*jp@gc - Hits per Second*
8、HTTP状态码时间分布曲线:展示响应状态码随时间的分布情况,类似于JMeter Plugins在UI上的*jp@gc - Response Codes per Second*
9、事务吞吐量时间曲线(TPS):展示每秒处理的事务数随时间变化情况,类似于JMeter Plugins在UI上的*jp@gc - Transactions per Second*
10、平均响应时间与每秒请求数的关系图:展示平均响应时间与每秒请求数(可以理解为QPS)的关系
11、Latency time与每秒请求数的关系图:展示Latency time与每秒请求数的关系
12、响应时间百分位图:响应时间的百分位分布图
13、活动线程数变化曲线:展示测试过程中活动线程数随时间变化情况
14、平均响应时间与线程数的关系图:展示平均响应时间与线程数的关系,类似于JMeter Plugins在UI上的*jp@gc - Response Times vs Threads*
15、柱状响应时间分布图:展示落在各个平均响应时间区间的请求数情况
二、图表信息详解
测试报告分为两部分,Dashboard和Charts,下面分开解析。
1、Dashboard(概览仪表盘)
①、Test and Report informations
②、APDEX (应用性能指标)
关于APDEX的相关信息,请参考这里:应用性能指标;英文原文,参考这里:Apdex-Wikipedia
③、Requests Summary
2、Charts(详细信息图表)
PS:由于详细信息图表有点多,这里我挑几个性能测试过程中比较关键的图表解析!
Over Time
①、Response Times Over Time(脚本运行期间的响应时间变化趋势图)
说明:可以根据响应时间和变化和TPS以及模拟的并发数变化,判断性能拐点的范围。
②、
③、Bytes Throughput Over Time(脚本运行期间的吞吐量变化趋势图)
说明:在容量规划、可用性测试和大文件上传下载场景中,吞吐量是很重要的一个监控和分析指标。
④、
Throughput
①、Transactions Per Second(每秒事务数)
说明:每秒事务数,即TPS,是性能测试中很重要的一个指标,它是用来衡量系统处理能力的一个重要指标。
Response Times
①、 Response Time Percentiles(响应时间百分比分布曲线图)
说明:即响应时间在某个范围内的请求在所有请求数中所占的比率,相比于平均响应时间,这个值更适合用来衡量系统的稳定性。
②、
三、模板报告(Jmeter接口测试报告)
Jmeter是压力测试、接口测试工具,Ant是基于Java的构建工具,具有跨平台的作用,jenkins是持续集成工具。将这三者结合起来可以搭建一套接口测试的持续构建环境。
1、安装JDK,配置java环境变量(这里用的是 jdk1.8)
2、安装Jmeter,配置jmeter环境变量 Path F:\\jmeter
3、安装 ANT ,下载地址 http://ant.apache.org/bindownload.cgi,下载后解压到指定位置即可,然后配置ANT环境变量(window中)
ANT_HOME F:\\apache-Ant
CLASSPATH %ANT_HOME%\\lib
Path %ANT_HOME%\\bin
验证安装结果,命令行输入ant -v ,出现版本信息则安装成功
4.创建jmeter接口脚本:(可以使用jmeter录制一个脚本,需要jmx脚本文件)
5、ANT中配置Jmeter
5.1 将jmeter extras目录下的ant-jmeter-1.1.1.jar 文件拷贝到ant安装目录下的lib文件夹中
5.2 配置jmeter.properties
在jmeter安装目录bin目录下jmeter.properties文件中修改jmeter.save.saveservice.output_format=csv 为 jmeter.save.saveservice.output_format=xml,并去掉前面的注释符号#
设置测试输出报告要输出的内容,在jmeter.properties中,将如下内容前面的注释符号#去掉,这里全部设置成true。这样执行完脚本后就会保存这些结果到.jtl文件里面,重启jmeter生效。
5.3创建build.xml,拷贝下面的内容到build.xml, 然后将build.xml放到保存脚本的目录下。
<?xml version="1.0" encoding="UTF-8"?> <project name="ant-jmeter-test" default="run" basedir="."> <tstamp> <format property="time" pattern="yyyyMMddhhmm" /> </tstamp> <!-- 需要改成自己本地的 Jmeter 目录--> <property name="jmeter.home" value="D:\\0Test\\1XN\\jmeter-5.1.1" /> <!-- jmeter生成jtl格式的结果报告的路径--> <property name="jmeter.result.jtl.dir" value="D:\\0Test\\1XN\\jmeter-5.1.1\\report\\jtl" /> <!-- jmeter生成html格式的结果报告的路径--> <property name="jmeter.result.html.dir" value="D:\\0Test\\1XN\\jmeter-5.1.1\\report\\html" /> <!-- 生成的报告的前缀--> <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" /> <property name="ReportName" value="TestReport" /> <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" /> <property name="ReportNameSum" value="TestReportSum" /> <property name="jmeter.result.htmlNameSum" value="${jmeter.result.html.dir}/${ReportNameSum}${time}.html" /> <target name="run"> <antcall target="test" /> <antcall target="report" /> </target> <target name="test"> <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" /> <!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本--> <!-- 再增加<jmeter></jmeter>标签可同时执行多个目录下的脚本--> <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}"> <testplans dir="D:\\0Test\\1XN\\jmeter-5.1.1\\test" includes="*.jmx" /> </jmeter> </target> <target name="report"> <!-- 再增加<xslt></xslt>标签可以同指定不同的模板生成多个报告 --> <xslt in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl" /> <xslt in="${jmeter.result.jtlName}" out="${jmeter.result.htmlNameSum}" style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" /> <!-- 因上面生成报告时,不会将相关的图片也一起拷贝至目标目录,所以需要手动拷贝 --> <copy todir="${jmeter.result.html.dir}"> <fileset dir="${jmeter.home}/extras"> <include name="collapse.png" /> <include name="expand.png" /> </fileset> </copy> </target> </project>
build.xml需按照实际进行如下修改,生成报告路径,ResultReport可以不用创建,如果创建了必须保证文件夹中为空。
6 验证配置,执行构建测试
6.1进入到脚本保存目录在地址栏输入cmd进入命令行,输入ant run ,执行测试,看到build successful 则说明构建测试成功:
6.2 进入保存报告的路径下查看测试结果报告,按build.xml文件中设置的测试报告地址找到html版测试报告,打开看看:测试结果展现了用例数、成功率、用例执行时间等结果参数:
7 测试报告优化:更换模板
用jmeter自带的测试报告得到的测试报告信息并不是很全,可以下载该优化模板 jmeter.results.shanhe.me.xsl,将其拷贝到jmeter的extras目录中,设置build文件的报告模板为优化后的模板:jmeter.results.shanhe.me.xsl。
按步骤6的方式再次用ant构建测试,查看优化后的测试报告
以上是关于使用Jmeter进行http接口测试的主要内容,如果未能解决你的问题,请参考以下文章