Jmeter+ant生成HTML测试报告
软件准备
- JDK: 1.8.0_181
- Jmeter: apache-jmeter-4.0
- Ant:apache-ant-1.10.5-bin
- Jenkins : Jenkins 2.190.2
注意:如果Jenkins是2.17版本,jdk的版本是1.7,如果你是在官网上下载最新的Jenkins版本,需要1.8的jdk,否则可能启动Jenkins失败。
JDK\Jmeter\Ant安装
jdk、jmeter安装可以参考教程,这里不详述。
JDK 1.8.0 安装教程
https://jingyan.baidu.com/article/ce09321b85e8d62bff858f93.html
Jmeter 4.0 安装教程
https://www.jianshu.com/p/d92519f5f725
最好安装在磁盘根目录下,方便后面使用

apache-ant-1.10.5-bin 安装教程
解压压缩包到C盘根目录

配置ant的环境变量
ANT_HOME D:\apache-ant-1.10.1
Path C:\apache-ant-1.10.5\bin
CLASSPATH ;%ANT_HOME%\lib



Jmeter与ant配置
将D:\apache-jmeter-4.0\extras文件夹下的ant-jmeter-1.1.1.jar这个jar包复制到D:\apache-ant-1.10.5\lib文件夹下


打开jmeter\bin目录下的 jmeter.properties文件,将 其中内容 :jmeter.save.saveservice.output_format=csv 改成 jmeter.save.saveservice.output_format=xml,记得去掉前面的“#”


从D:\apache-jmeter-4.0\extras 目录下复制文件:build.xml到 C:\apache-ant-1.10.5\bin 目录下


把代码粘贴到build.xml文档里
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <project name="ant-jmeter-test" default="run" basedir="."> 4 5 <tstamp> 6 <format property="time" pattern="yyyyMMddhhmm" /> 7 </tstamp> 8 <property name="basedirectory" value="D:\apache-jmeter-4.0\extras" /> 9 <!-- 需要改成自己本地的 Jmeter 目录--> 10 <property name="jmeter.home" value="D:\apache-jmeter-4.0" /> 11 <!-- jmeter生成jtl格式的结果报告的路径--> 12 <property name="jmeter.result.jtl.dir" value="C:\Users\Administrator\.jenkins\workspace\jtl" /> 13 <!-- jmeter生成html格式的结果报告的路径--> 14 <property name="jmeter.result.html.dir" value="C:\Users\Administrator\.jenkins\workspace\html" /> 15 <!-- Name of test (without .jmx) --> 16 <property name="test" value="Test"/> 17 <!-- 生成的报告的前缀--> 18 <property name="ReportName" value="TestReport" /> 19 <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/HC_API_report.jtl" /> 20 <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/HC_API_report.html" /> 21 22 <path id="xslt.classpath"> 23 <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/> 24 <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/> 25 </path> 26 27 <target name="run"> 28 <antcall target="test" /> 29 <antcall target="report" /> 30 </target> 31 32 <target name="test"> 33 <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" /> 34 35 <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}"> 36 <!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本--> 37 <testplans dir="D:\apache-jmeter-4.0\loadTest" includes="*.jmx" /> 38 </jmeter> 39 </target> 40 41 <target name="report"> 42 <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp> 43 <xslt classpathref="xslt.classpath" 44 force="true" 45 in="${jmeter.result.jtlName}" 46 out="${jmeter.result.htmlName}" 47 style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl"> 48 <param name="dateReport" expression="${report.datestamp}"/> 49 </xslt> 50 <copy todir="${jmeter.result.html.dir}"> 51 <fileset dir="${jmeter.home}/extras"> 52 <include name="collapse.png" /> 53 <include name="expand.png" /> 54 </fileset> 55 </copy> 56 </target> 57 58 </project>
根据代码里的提示做符合自己当前需要测试所存放jtl\html报告路径、执行哪些脚本等等
进入CMD,切换到C:\apache-ant-1.10.5\bin目录,执行ant




等等
Jenkins安装
安装包下载
官网下载(https://jenkins.io/download/),jenkins.war格式的文件

Jenkins安装
找到 jenkins.war 所在路径
下载之后,启动Jenkins就很简单了,在命令行里面进入到Jenkins所在的目录下,然后执行 java -jar jenkins.war启动即可,这种方式在linux、mac、Windows下面全部都好使。
一般放到C盘根目录方便找

2.2、打开CMD,运行java -jar jenkins.war --httpPort=8888

Jenkins配置邮件发送
使用admin用户登录,在Jenkins系统管理中,找到全局设置,在全局设置里面有Jenkins Location,下面有个系统管理员邮件地址,把这个写成刚才创建admin用户时输入的邮箱地址。

然后继续往下找,再找到邮件通知,再点邮件通知下面的高级,这个才是配置发邮件的地方。
Jenkins配置
浏览器输入http://localhost:8080/jenkins
tomcat默认端口是8080,如果被占用可以在配置文件自行更改端口号,如果第一次配置jenkins安装默认推荐的插件即可

很简单

进入如下界面,等待其自动完成即可

设置管理员账号密码
admin/密码 (要记住密码)

Jenkins配置
配置邮件发送
点击 Manage Jenkins

点击 Configure System

填写 Extended E-mail Notification

填写【邮件通知】

然后点击【保存】
Jenkins的使用,核心就是创建一个个的构建任务
创建一个任务

构建一个自由风格的项目

点击【构建触发器】

选择触发构建时间的设置
构建触发器可以根据自己的需求选择,由图看到有四种类型:
(1)可使用脚本触发远程构建;
(2)其他job构建完成后触发当前job执行构建;
(3)定时周期性构建;
(4)hookplugin检测到源码的push操作就触发构建;
(5)定时检查代码分支是否有变化,如果有变化则执行一次构建。
我的目的是做接口测试自动化,每天定时跑任务并监控API功能是否正常,所以选择Build periodically(定期构建)。日程表一共五个参数:
从左到右分别代表:分 时 天 月 星期
第一个参数代表的是分钟minute,取值0~59;
第二个参数代表的是小时hour,取值0~23;
第三个参数代表的是天day,取值1~31;
第四个参数代表的是月month,取值1~12;
第五个参数代表的是星期week,取值0~7,0和7都代表星期天。
0 7 * * 1,3,5 表示每周一、周三、周五的7点00分执行一次,*代表所有。

设置【构建环境】

配置-构建后【发送邮件】



代码
1 Default Content : 2 <!DOCTYPE html> 3 <html> 4 <head> 5 <meta charset="UTF-8"> 6 <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title> 7 </head> 8 9 <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" 10 offset="0"> 11 <table width="95%" cellpadding="0" cellspacing="0" 12 style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"> 13 <tr> 14 <td>(本邮件是程序自动下发的,请勿回复!)</td> 15 </tr> 16 <tr> 17 <td><h2> 18 <font color="#0000FF">构建结果 - ${BUILD_STATUS}</font> 19 </h2></td> 20 </tr> 21 <tr> 22 <td><br /> 23 <b><font color="#0B610B">构建信息</font></b> 24 <hr size="2" width="100%" align="center" /></td> 25 </tr> 26 <tr> 27 <td> 28 <ul> 29 <li>项目名称 : ${PROJECT_NAME}</li> 30 <li>构建编号 : 第${BUILD_NUMBER}次构建</li> 31 <li>触发原因: ${CAUSE}</li> 32 <li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li> 33 <li>构建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li> 34 <li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li> 35 <li>项目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li> 36 </ul> 37 </td> 38 </tr> 39 <tr> 40 <td><b><font color="#0B610B">Changes Since Last 41 Successful Build:</font></b> 42 <hr size="2" width="100%" align="center" /></td> 43 </tr> 44 <tr> 45 <td> 46 <ul> 47 <li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li> 48 </ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat=" %p"} 49 </td> 50 </tr> 51 <tr> 52 <td><b>Failed Test Results</b> 53 <hr size="2" width="100%" align="center" /></td> 54 </tr> 55 <tr> 56 <td><pre 57 style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre> 58 <br /></td> 59 </tr> 60 <tr> 61 <td><b><font color="#0B610B">构建日志 (最后 100行):</font></b> 62 <hr size="2" width="100%" align="center" /></td> 63 </tr> 64 <!-- <tr> 65 <td>Test Logs (if test has ran): <a 66 href="${PROJECT_URL}ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip">${PROJECT_URL}/ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip</a> 67 <br /> 68 <br /> 69 </td> 70 </tr> --> 71 <tr> 72 <td><pre><textarea cols="80" rows="30" readonly="readonly" 73 style="font-family: Courier New">${BUILD_LOG, maxLines=100}<pre></textarea> 74 </td> 75 </tr> 76 </table> 77 </body> 78 </html>

设置发送邮件触发器

开始构建
点击【build now】开始构建





Linux服务器运行
build.xml
<?xml version="1.0" encoding="utf-8"?>
<project name="pc" default="all" basedir="/data/API-smoke/Api-smoke-Test/">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<!-- 需要改成自己本地的 Jmeter 目录-->
<property name="jmeter.home" value="/opt/apache-jmeter-5.4.1" />
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="/data/report/CONNECT/API/jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="/data/report/CONNECT/API/report" />
<!-- 生成的报告的前缀 -->
<property name="ReportName" value="TestReport" />
<property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />
<property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${test}${time}.jtl" />
<!-- 接收测试报告的邮箱 -->
<property name="mail_from" value="binzi_chen@163.com" />
<property name="mail_to" value="binzichen@126.com" />
<!-- 电脑地址 -->
<!-- <property name="ComputerName" value="jkqsh-l0285" />-->
<target name="all">
<antcall target="test" />
<antcall target="report" />
<antcall target="send" />
</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="/data/API-smoke/Api-smoke-Test/Scripts/CONNECT" />
</jmeter>
</target>
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
</path>
<target name="report">
<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="${time}"/>
</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-JMeter+ant进行接口自动化测试并生成HTML测试报告 - 一步一脚印丶 - 博客园 (cnblogs.com)

浙公网安备 33010602011771号