项目做接口自动化,选用的方案为Jenkins + Jmeter + Ant + Email;本篇文档是对实施的总结
优化点是:默认生成两份报告
邮件效果图:
第一种报告:
第二种报告:
环境准备:
CentOS7
JDK1.8
ant:下载到服务器上,配置好环境变量
vim /etc/profile
export ANT_HOME=/data/apache-ant-1.10.5 export PATH=$ANT_HOME/bin:$PATH
Jmeter配置
参考:
1.下载Jmeter放在Jenkins服务器对应目录,注意修改项目build.xml
2.下载jmeter.results.shanhe.me.xsl到Jmeter/extras/
3.修改jmeter.properties
1 jmeter.save.saveservice.data_type=true 2 jmeter.save.saveservice.label=true 3 jmeter.save.saveservice.response_code=true 4 # response_data is not currently supported for CSV output 5 jmeter.save.saveservice.response_data=true 6 # Save ResponseData for failed samples 7 jmeter.save.saveservice.response_data.on_error=false 8 jmeter.save.saveservice.response_message=true 9 jmeter.save.saveservice.successful=true 10 jmeter.save.saveservice.thread_name=true 11 jmeter.save.saveservice.time=true 12 jmeter.save.saveservice.subresults=true 13 jmeter.save.saveservice.assertions=true 14 jmeter.save.saveservice.latency=true 15 jmeter.save.saveservice.connect_time=true 16 jmeter.save.saveservice.samplerData=true 17 jmeter.save.saveservice.responseHeaders=true 18 jmeter.save.saveservice.requestHeaders=true 19 jmeter.save.saveservice.encoding=false 20 jmeter.save.saveservice.bytes=true 21 jmeter.save.saveservice.url=true 22 jmeter.save.saveservice.filename=true 23 jmeter.save.saveservice.hostname=true 24 jmeter.save.saveservice.thread_counts=true 25 jmeter.save.saveservice.sample_count=true 26 jmeter.save.saveservice.idle_time=true
Jenkins的安装配置
1 wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo 2 rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key 3 yum install jenkins
官方地址:https://pkg.jenkins.io/redhat-stable/
参考:
Jenkins+Jmeter+Ant自动化集成及邮件正文以html输出
因权限问题,我将Jenkins用户更改为root,随便端口更改为8081,Jenkins的主目录则未做改变。
JENKINS_HOME="/var/lib/jenkins"
JENKINS_USER="root" JENKINS_PORT="8081"
需要的Jenkins插件:
Email Extension Template Plugin
Jenkins系统设置设置Email信息
系统管理员邮件地址一定要设置,否则会导致邮件发不出去。
配置Extended E-mail Notification
注意: 密码一般应为对应邮箱服务器的授权密码
Jenkins自带的邮件通知也挺好用的!
Jenkins中配置Jmeter工程
构建一个自由风格的软件项目
项目配置如下:
Jmeter脚本直接丢在Jenkins服务器上,此处保持路径一致即可,如使用SVN/GIT请另行配置
Jmeter脚本与build.xml文件放一个目录
我的build.xml:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project name="ant-jmeter-test" default="run" basedir="."> 3 <!-- 需要改成自己本地的 Jmeter 目录--> 4 <property name="jmeter.home" value="/data/apache-jmeter-4.0" /> 5 <!-- jmeter生成jtl格式的结果报告的路径--> 6 <property name="jmeter.result.jtl.dir" value="/data/apiTest" /> 7 <!-- jmeter生成html格式的结果报告的路径--> 8 <property name="jmeter.result.html.dir" value="/data/apiTest" /> 9 <!-- 生成的报告的前缀--> 10 <property name="ReportName" value="passengerApiReport" /> 11 <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}.jtl" /> 12 <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}.html" /> 13 <property name="jmeter.result.htmlInfo" value="${jmeter.result.html.dir}/${ReportName}Info.html" /> 14 15 <target name="run"> 16 <antcall target="test" /> 17 <antcall target="report" /> 18 </target> 19 20 <target name="test"> 21 <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" /> 22 <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}"> 23 <!-- 声明要运行的脚本"*.jmx"指包含此目录下的所有jmeter脚本--> 24 <testplans dir="/data/apiTest" includes="*.jmx" /> 25 <property name="jmeter.save.saveservice.output_format" value="xml"/> 26 </jmeter> 27 </target> 28 29 <path id="xslt.classpath"> 30 <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/> 31 <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/> 32 </path> 33 34 35 <target name="report"> 36 <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp> 37 <xslt 38 classpathref="xslt.classpath" 39 force="true" 40 in="${jmeter.result.jtlName}" 41 out="${jmeter.result.htmlName}" 42 style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl"> 43 <param name="dateReport" expression="${report.datestamp}" /> 44 </xslt> 45 <xslt 46 classpathref="xslt.classpath" 47 force="true" 48 in="${jmeter.result.jtlName}" 49 out="${jmeter.result.htmlInfo}" 50 style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl"> 51 <param name="dateReport" expression="${report.datestamp}" /> 52 </xslt> 53 <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 --> 54 <copy todir="${jmeter.result.html.dir}"> 55 <fileset dir="${jmeter.home}/extras"> 56 <include name="collapse.png" /> 57 <include name="expand.png" /> 58 </fileset> 59 </copy> 60 </target> 61 </project>
每天08:50进行接口测试
构建方式为进入对应路径,执行ant
cd /data/apiTest /data/apache-ant-1.10.5/bin/ant
邮件模板
我的邮件模板:
1 <!DOCTYPE html> 2 <html> 3 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" offset="0"> 10 <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"> 11 <tr> 12 <td>(本邮件是程序自动下发的,请勿回复!)</td> 13 </tr> 14 <tr> 15 <td> 16 <h2> <font color="#0000FF">XXXXX接口测试结果 - 以附件报告为准(请使用浏览器打开)</font> </h2></td> 17 </tr> 18 <tr> 19 <td> 20 <br /> <b><font color="#0B610B">构建信息</font></b> 21 <hr size="2" width="100%" align="center" /> 22 </td> 23 </tr> 24 <tr> 25 <td> 26 <ul> 27 <li>项目名称 : ${PROJECT_NAME}</li> 28 <li>构建编号 : 第${BUILD_NUMBER}次构建</li> 29 <li>触发原因: ${CAUSE}</li> 30 <li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li> 31 <li>构建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li> 32 <li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li> 33 <li>项目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li> 34 </ul> 35 </td> 36 </tr> 37 <tr> 38 <td><b><font color="#0B610B">Changes Since Last Successful Build:</font></b> 39 <hr size="2" width="100%" align="center" /> 40 </td> 41 </tr> 42 <tr> 43 <td> 44 <ul> 45 <li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li> 46 </tr> 47 <tr> 48 <td><b>Failed Test Results</b> 49 <hr size="2" width="100%" align="center" /> 50 </td> 51 </tr> 52 <tr> 53 <td><pre style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre> 54 <br /> 55 </td> 56 </tr> 57 <tr> 58 <td><b><font color="#0B610B">构建日志 (最后 100行):</font></b> 59 <hr size="2" width="100%" align="center" /> 60 </td> 61 </tr> 62 <!-- <tr> <td>Test Logs (if test has ran): <a href="${PROJECT_URL}ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip">${PROJECT_URL}/ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip</a> <br /> <br /> </td> </tr> --> 63 <tr> 64 <td> 65 <textarea cols="80" rows="30" readonly="readonly" style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea> 66 </td> 67 </tr> 68 </table> 69 </body> 70 71 </html>