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)