为什么要这么做?
在实际测试场景遇到这样一种情况,开发重构了接口实现逻辑,该接口主要用于查询操作,接口的入参有上千种可能,查询出来的内容很多,需要与原来接口比对,检查是否一致
那此时,单纯用jmeter跑一遍的话,很难直观的看到测试之后的结果,所以就需要这样一种报告来展示,供开发修改
在这里,本地用的jmeter+ant的方式进行产出报告
具体操作步骤如下:
1. 安装配置java环境和Jmeter环境---->这两个比较简单,不再叙述
2.安装Ant及配置
下载地址:https://ant.apache.org/bindownload.cgi
a. 下载后解压到指定位置即可
b. 将jmeter所在目录下的extras子目录里的ant-jmeter-1.1.1.jar复制到ant所在的目录lib子目录之下
配置环境变量:
ANT_HOME F:\apache-Ant
CLASSPATH %ANT_HOME%\lib
Path %ANT_HOME%\bin
命令行输入ant -version,出现版本信息则安装成功
3. 实现原理
通过执行ant命令,来调用build.xml
build文件规定了脚本的调用路径(支持多脚本)、生成报告的模版、生成报告的路径和生成报告的名称
build再通过配置调用jmeter执行脚本生成jtl结果文件,并把结果文件转换为html报告展示
报告的展示内容首先受jmeter用例模版的控制,其次还受jmeter配置中的参数输出项控制
4.实现步骤
a. 把jmeter安装包extras目录下的ant-jmeter-1.1.1.jar转移到ant安装包lib目录下,ant运行时才能找到org.programmerplanet.ant.taskdefs.jmeter.JMeterTask这个类,之后可以触发Jmeter脚本
b.jmeter插件包处理,对于部分版本的jmeter包缺少插件JMeterPlugins-Extras.jar和JMeterPlugins-Standard.jar ,下载后放到jmeter/lib/ext目录下
c. 新建文件夹pc,pc文件夹分别新建buildfile、resultlog、script三个文件夹,buildfile文件夹放入build.xml文件,resultlog里面新建html和jtl文件夹 ,script中放置待测试的jmx脚本
build.xml文件的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="run" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<property name="basedirectory" value="E:\apache-jmeter-5.5\extras" />
<!-- 需要改成自己本地的 Jmeter 目录-->
<property name="jmeter.home" value="E:\apache-jmeter-5.5" />
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="E:\apache-jmeter-5.5\jmeterAutoTest\pc\resultlog\jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="E:\apache-jmeter-5.5\jmeterAutoTest\pc\resultlog\html" />
<!-- Name of test (without .jmx) -->
<property name="test" value="Test"/>
<!-- 生成的报告的前缀-->
<property name="ReportName" value="TestReport" />
<property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${time}.jtl" />
<property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${time}.html" />
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
</path>
<target name="run">
<antcall target="test" />
<antcall target="report" />
</target>
<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本-->
<testplans dir="E:\apache-jmeter-5.5\jmeterAutoTest\pc\script" includes="*.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>
</target>
<target name="report">
<tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>
<xslt classpathref="xslt.classpath"
force="true"
in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlName}"
style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
<param name="dateReport" expression="${report.datestamp}"/>
</xslt>
<xslt classpathref="xslt.classpath"
force="true"
in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlName}"
style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
<param name="dateReport" expression="${report.datestamp}"/>
</xslt>
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
</project>
把其中一些关于路径配置的修改为自己的信息
其中jmeter-results-detail-report_21.xsl是汇总报告的模版
jmeter.results.shanhe.me.xsl是详细报告的模版,该模版需要单独下载,并放到extras目录下
d. 报告展示信息调整
要控制我们展示详细报告的信息,此时我们还要修改jmeter的配置,在生成的jtl结果中显示记录我们需要的数据,修改jmeter.properties,如下:
将jmeter.save.saveservice.output_format=csv改为
jmeter.save.saveservice.output_format=xml并将#去掉
其他修改:
jmeter.save.saveservice.data_type=true
jmeter.save.saveservice.label=true
jmeter.save.saveservice.response_code=true
# response_data is not currently supported for CSV output
jmeter.save.saveservice.response_data=true
# Save ResponseData for failed samples
jmeter.save.saveservice.response_data.on_error=false
jmeter.save.saveservice.response_message=true
jmeter.save.saveservice.successful=true
jmeter.save.saveservice.thread_name=true
jmeter.save.saveservice.time=true
jmeter.save.saveservice.subresults=true
jmeter.save.saveservice.assertions=true
jmeter.save.saveservice.latency=true
# Only available with HttpClient4
jmeter.save.saveservice.connect_time=true
jmeter.save.saveservice.samplerData=true
jmeter.save.saveservice.responseHeaders=true
jmeter.save.saveservice.requestHeaders=true
jmeter.save.saveservice.encoding=true
jmeter.save.saveservice.bytes=true
# Only available with HttpClient4
#jmeter.save.saveservice.sent_bytes=true
jmeter.save.saveservice.url=true
jmeter.save.saveservice.filename=true
jmeter.save.saveservice.hostname=true
jmeter.save.saveservice.thread_counts=true
jmeter.save.saveservice.sample_count=true
jmeter.save.saveservice.idle_time=true
e. 进入到buildfile目录下,打卡dos窗口,执行ant命令即可生成测试报告
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)