这是本人第一次在Jenkins下搭建接口自动化测试,也是一步一步摸索成形,继而满足基本使用要求。
一、前期准备
1.下载jdk,配置环境变量
export JAVA_HOME=/brd_devops/jdk1.8.0_161
export JRE_HOME=$JAVA_HOME/jre
export CLASS_PATH=$JAVA_HOME/lib:./
export PATH=$PATH:$JAVA_HOME/bin
export TESSDATA_PREFIX="/autotest/swatv2"
export ANT_HOME=/brd_devops/apache-ant-1.10.5
export PATH=$PATH:$ANT_HOME/bin
2.下载jmeter,配置环境变量
export JMETER_HOME=/apiTest/apache-jmeter-5.5
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/logkit-2.0.jar:$CLASSPATH
export PATH=$JMETER_HOME/bin:$PATH
3.下载ant,配置环境变量
export ANT_HOME=/brd_devops/apache-ant-1.10.5
export PATH=$PATH:$ANT_HOME/bin
二、jmeter个性化配置
1.找到extras/build.xml,添加代码
<!-- Force suitable defaults -->
<property name="jmeter.save.saveservice.response_data" value="true"/>
<property name="jmeter.save.saveservice.samplerData" value="true"/>
<property name="jmeter.save.saveservice.responseHeaders" value="true"/>
<property name="jmeter.save.saveservice.requestHeaders" value="true"/>
<property name="jmeter.save.saveservice.encoding" value="true"/>
<property name="jmeter.save.saveservice.url" value="true"/>
<property name="jmeter.save.saveservice.filename" value="true"/>
<property name="jmeter.save.saveservice.hostname" value="true"/>
<property name="jmeter.save.saveservice.thread_counts" value="true"/>
<property name="jmeter.save.saveservice.sample_count" value="true"/>
<property name="jmeter.save.saveservice.idle_time" value="true"/>
<!-- 如下为原有代码,添加如上代码即可 -->
<property name="jmeter.save.saveservice.output_format" value="xml"/>
<property name="jmeter.save.saveservice.assertion_results" value="all"/>
<property name="jmeter.save.saveservice.bytes" value="true"/>
<property name="file_format.testlog" value="${format}"/>
<property name="jmeter.save.saveservice.response_data.on_error" value="${funcMode}"/>
2.下载http://shanhe.me/download.php?file=jmeter.results.shanhe.me.xsl,并上传至jmeter/extras下,再次配置extras/build.xml
<target name="report" depends="_message_xalan"><xsltclasspathref="xslt.classpath"force="true"in="${testpath}/${test}.jtl"out="${testpath}/${test}.html"//style="${basedir}/jmeter-results-detail-report${style_version}.xsl"> 将左侧代码更新为如下代码,即更换xsl文件style="${basedir}/jmeter-results-shanhe-me.xsl"> //jmeter-results-shanhe-me.xsl为该文件,若提示未找到,改名即可<param name="showData" expression="${show-data}"/></xslt>
</target>
3.将extra目录下的ant-jmeter-1.1.1.jar拷贝到ant/lib下
4.验证之前的配置是否成功
[root@localhost ~]# cd /apiTest/apache-jmeter-5.5/
[root@localhost apache-jmeter-5.5]# cd extras/
[root@localhost extras]# ls
addons.txt build.xml expand.png jmeter-results-report_21.xsl proxycert.cmd schematic.cmd schematic.xsl Test.jmx
addons.xml collapse.png GrafanaJMeterTemplate.json jmeter-results-shanhe-me.xsl proxycert.sh schematic.sh startup.bsh Test.jtl
ant-jmeter-1.1.1.jar execcode.bsh jmeter-results-detail-report_21.xsl printvars.bsh remote.bsh schematic.xml Test.html
[root@localhost extras]# ant
Buildfile: /apiTest/apache-jmeter-5.5/extras/build.xml
run:
[echo] funcMode = false
[delete] Deleting: /apiTest/apache-jmeter-5.5/extras/Test.html
[jmeter] Executing test plan: /apiTest/apache-jmeter-5.5/extras/Test.jmx ==> /apiTest/apache-jmeter-5.5/extras/Test.jtl
[jmeter] Creating summariser <summary>
[jmeter] Created the tree successfully using /apiTest/apache-jmeter-5.5/extras/Test.jmx
[jmeter] Starting standalone test @ August 12, 2022 10:14:09 AM CST (1660270449166)
[jmeter] Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
[jmeter] summary = 30 in 00:00:03 = 9.6/s Avg: 224 Min: 100 Max: 351 Err: 2 (6.67%)
[jmeter] Tidying up ... @ August 12, 2022 10:14:13 AM CST (1660270453465)
[jmeter] ... end of run
_message_xalan:
xslt-report:
[xslt] Processing /apiTest/apache-jmeter-5.5/extras/Test.jtl to /apiTest/apache-jmeter-5.5/extras/Test.html
[xslt] Loading stylesheet /apiTest/apache-jmeter-5.5/extras/jmeter-results-shanhe-me.xsl
verify-images:
copy-images:
report:
[echo] Report generated at 2022/08/12 10:14
all:
BUILD SUCCESSFUL
// BUILD SUCCESSFUL即为成功
Total time: 14 seconds
5.运行过后会生成Test.html文件,打开效果如下,可显示请求/响应详细内容,并且可查看断言错误详细信息

三、完成Jenkins自动化构建
1.将已调试的jmx脚本拷到Linux下,建议单独创建目录以便独立操作
//如下为参考目录示例,具体目录按实际需求
[root@localhost ~]# cd /apiTest/jmx/Test_Plan-Bdv_new
[root@localhost Test_Plan-Bdv_new]# ls
build.xml Test_Plan-Bdv_new.jmx
2.在jmx脚本对应目录下创建build.xml文件,用来ant执行脚本,可以直接复制jmeter/extras中的build.xml文件,配置build.xml
//找到如下字段,修改配置</description><property name="testpath" value="/apiTest/jmx/Test_Plan-Bdv_new"/> //测试脚本路径<property name="respath" value="/apiTest/report"/> //测试结果存放地址<property name="jmeter.home" value="/apiTest/apache-jmeter-5.5"/> //jmeter引用地址<property name="report.title" value="Load Test Results"/> //还不晓得,可能是报告标题?<property name="xsldir" value="/apiTest/apache-jmeter-5.5/extras"/> //用来转换测试结果为html的文件存放的地址,即二、2中的文件<!-- Name of test (without .jmx) --><property name="test" value="${jmx}"/> //所执行测试的脚本名称,这里写成变量,以便后续脚本变多可灵活使用//-----------------再往下----------------------<!-- Use xalan copy from JMeter lib directory to ensure consistent processing with Java 1.4+ --><path id="xslt.classpath"><fileset dir="${lib.dir}" includes="xalan*.jar"/><fileset dir="${lib.dir}" includes="serializer*.jar"/></path><target name="report" depends="xslt-report,copy-images"><echo>Report generated at ${report.datestamp}</echo></target><target name="xslt-report" depends="_message_xalan"><tstamp><format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/></tstamp><xsltclasspathref="xslt.classpath"force="true"in="${respath}/${test}.jtl"out="${respath}/${test}.html"style="${xsldir}/jmeter-results-shanhe-me.xsl"> //这里需要修改成xsldir<param name="showData" expression="${show-data}"/><param name="titleReport" expression="${report.title}"/><param name="dateReport" expression="${report.datestamp}"/></xslt></target>
3.在对应目录下执行ant测试,验证是否成功
[root@localhost Test_Plan-Bdv_new]# ant -Djmx=Test_Plan-Bdv_new //<property name="test" value="${jmx}"/
/* 如上命令参考:ant -f build.xml -Dparam1=value1 -Dparam2=value2
/* 在build.xml文件中: <property name=build.param1 value=${param1} />
Buildfile: /apiTest/jmx/Test_Plan-Bdv_new/build.xml
run:
[echo] funcMode = false
[delete] Deleting: /apiTest/report/Test_Plan-Bdv_new.html
[jmeter] Executing test plan: /apiTest/jmx/Test_Plan-Bdv_new/Test_Plan-Bdv_new.jmx ==> /apiTest/report/Test_Plan-Bdv_new.jtl
[jmeter] Creating summariser <summary>
[jmeter] Created the tree successfully using /apiTest/jmx/Test_Plan-Bdv_new/Test_Plan-Bdv_new.jmx
[jmeter] Starting standalone test @ August 12, 2022 10:57:10 AM CST (1660273030712)
[jmeter] Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
[jmeter] summary = 77 in 00:00:05 = 14.1/s Avg: 37 Min: 2 Max: 326 Err: 0 (0.00%)
[jmeter] Tidying up ... @ August 12, 2022 10:57:16 AM CST (1660273036526)
[jmeter] ... end of run
_message_xalan:
xslt-report:
[xslt] Processing /apiTest/report/Test_Plan-Bdv_new.jtl to /apiTest/report/Test_Plan-Bdv_new.html
[xslt] Loading stylesheet /apiTest/apache-jmeter-5.5/extras/jmeter-results-shanhe-me.xsl
verify-images:
copy-images:
report:
[echo] Report generated at 2022/08/12 10:57
all:
BUILD SUCCESSFUL
Total time: 14 seconds
4.在Jenkins上构建脚本
a.创建自由项目(自行百度如何创建项目)
b.buildEnvironment配置ant

c.addBuildStep,选择Execute Shell

d.在Jenkins上直接生成报告,Post-build Actions,选择Publish HTML reports,配置如下

四、结果展示

写在最后
当前已实现Jenkins+jmeter+ant自动化接口测试并生成测试报告,但仍有优化空间
1.测试报告结果留存问题当前没有解决,因为当前配置为每次生成测试报告都需要目录为空,否则会报错
2.报错发送邮件,内容包含错误信息,也没有展示,看看是否可以实现
3.测试报告不能像jmeter中控制器那样收缩伸展,没有明显的界定,看起来没有条理,较难判断这个HTTP请求的测试目的,这是一个重点优化类