JMeter+Jenkins+ANT搭建配置教程

 阅读约 22 分钟

ANT安装及JMeter配置

1.下载ANT

2.解压到D盘根目录

3.配置环境变量

CLASSPATH
%JMETER_HOME%\\lib\\ext\\ApacheJMeter_core.jar;%JMETER_HOME%\\lib\\jorphan.jar;%JMETER_HOME%\\lib\\logkit-1.2.jar;D:\apache-ant-1.10.5\lib
Path
D:apache-ant-1.10.5bin

4.把D:\apache-jmeter-5.1.1\extras中的ant-jmeter-1.1.1.jar复制到D:\apache-ant-1.10.5\lib中

5.把附1中内容添加到apache-jmeter-5.1.1\bin\jmeter.properties文件中

6.把需要测试的jmx文件和build.xml(见文章末尾)放在同一文件夹中

build.xml中使用了jmeter.results.shanhe.me.xsl文件,点此下载后放到D:\apache-jmeter-5.1.1\extras中

7.测试一下看,打开命令行切换到demo文件夹下,输入ant或ant run执行,正常运行后结果如下:

打开/demo/report/html中刚生成的报告看一下

Jenkins安装及配置

Jenkins安装

1.进入Jenkins官网下载地址下载最新的版本
2.安装时记得保存管理员码,或者新建自己的用户
3.选择安装推荐的插件,同时我推荐几个自己用到的插件,可以在
http://localhost:8080/pluginManager/available中搜索安装

Locale plugin,HTML Publisher,Performance Plugin,Build Timestamp

4.进入系统管理-系统设置,配置Jenkins各项设置

设置Jenkins为中文(需安装Locale plugin)

配置邮件,这里有两处需要配置
用qq邮箱的千万注意,用的不是qq密码,而是邮箱里单独获取的授权码

勾选以后可以测试一下邮箱配置正确没有

系统管理-全局工具设置里面配置ANT

5.新建任务

勾选一下使用自定义工作空间,这个地址和你在build.xml里生成报告的路径统一下,因为邮件发送附件用的是相对目录

添加ANT


添加后续动作

这里的路径和build.xml里的html报告路径一致

这个路径和build.xml里的jtl报告路径一致

添加邮箱提醒


邮件模板内容见文章末尾
${BUILD_TIMESTAMP}是变量,需要安装Build Timestamp插件并在系统设置中按下图配置以保证和生成的报告时间戳相同

错误总结

1.

The <jmeter> type doesn't support nested text data ("       ").

网上回答:
可能是因为编码问题,在复制粘贴的过程中,产生了一些不可见的乱码。 解决办法是将build.xml文件复制粘贴到vim editor中,并删除其中的乱码,保存后,再次运行 ant,可以解决问题

2.

taskdef class org.programmerplanet.ant.taskdefs.jmeter.JMeterTask cannot be found

把D:apache-jmeter-5.1.1extras中的ant-jmeter-1.1.1.jar复制到D:apache-ant-1.10.5lib中

附录

1.jmeter.properties

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
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=false
jmeter.save.saveservice.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
jmeter.save.saveservice.output_format=xml

2.build.xml
复制使用时记得把下面的jmeter版本号替换成自己的,否则目录不对会报错

<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="run" basedir=".">
    <tstamp>
        <format property="time" pattern="yyyyMMddhhmm" />
    </tstamp>
    <!-- 需要改成自己本地的 Jmeter 目录-->  
    <property name="jmeter.home" value="D:\apache-jmeter-5.1.1" />
    <!-- jmeter生成jtl格式的结果报告的路径--> 
    <property name="jmeter.result.jtl.dir" value="D:\apache-jmeter-5.1.1\demo\report\jtl" />
    <!-- jmeter生成html格式的结果报告的路径-->
    <property name="jmeter.result.html.dir" value="D:\apache-jmeter-5.1.1\demo\report\html" />
    <!-- 生成的报告的前缀-->  
    <property name="ReportName" value="TestReport" />
    <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
    <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />
    
    <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="D:\apache-jmeter-5.1.1\demo" includes="*.jmx" />

            <property name="jmeter.save.saveservice.output_format" value="xml"/>

        </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">
       <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.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>


3.邮件模板

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head>

<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
<table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
    <tr>
        <td>(本邮件由程序自动下发,请勿回复!)</td>
    </tr>
    <tr>
        <td>
            <h2><font color="#FF0000">构建结果 - ${BUILD_STATUS}</font></h2>
        </td>
    </tr>
    <tr>
        <td><br />
            <b><font color="#0B610B">构建信息</font></b>
            <hr size="2" width="100%" align="center" />
        </td>
    </tr>
    <tr>   SVN_URL
        <td>
            <ul>
                <li>项目名称:${PROJECT_NAME}</li>
                <li>SVN路径:${SVN_URL}</li>                    
                <li>构建编号:${BUILD_NUMBER}</li>                    
                <li>SVN版本:${SVN_REVISION}</li>
                <li>触发原因:${CAUSE}</li>   
                <li>构建日志:<a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
                <li>测试报告:<a href="D:/apache-jmeter-5.1.1/demo/report/html/TestReport${BUILD_TIMESTAMP}.html">
                  D:/apache-jmeter-5.1.1/demo/report/html/TestReport${BUILD_TIMESTAMP}.html</a><br/><hr/></li>
            </ul>
        </td>
    </tr>
    <tr>
        <td>
            <b><font color="#0B610B">变更信息:</font></b>
           <hr size="2" width="100%" align="center" />
        </td>
    </tr>
    <tr>
        <td>
            <ul>
                <li>上次构建成功后变化 :  ${CHANGES_SINCE_LAST_SUCCESS}</a></li>
            </ul>    
        </td>
    </tr>
<tr>
        <td>
            <ul>
                <li>上次构建不稳定后变化 :  ${CHANGES_SINCE_LAST_UNSTABLE}</a></li>
            </ul>    
        </td>
    </tr>
    <tr>
        <td>
            <ul>
                <li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li>
            </ul>    
        </td>
    </tr>
    <tr>
        <td>
            <ul>
                <li>变更集:${JELLY_SCRIPT,template="html"}</a></li>
            </ul>    
        </td>
    </tr>
    
    <tr>
        <td>
            <b><font color="#0B610B">Failed Test Results</font></b>
            <hr size="2" width="100%" align="center" />
        </td>
    </tr>
    <tr>
        <td>
            <pre style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre>
            <br />
        </td>
    </tr>

    <tr>
        <td>
            <b><font color="#0B610B">构建日志 (最后 100行):</font></b>
            <hr size="2" width="100%" align="center" />
        </td>
    </tr>
     <tr>
        <td>Test Logs (if test has ran): 
           <a href="${space}\${PROJECT_NAME}\builds\${BUILD_NUMBER}\log">${space}\${PROJECT_NAME}\builds\${BUILD_NUMBER}\log</a>
            <br />
        <br />
        </td>
    </tr> 
    
    <tr>
        <td>
            <textarea cols="80" rows="30" readonly="readonly" style="font-family: Courier New">${BUILD_LOG, maxLines=100,escapeHtml=true}</textarea>
        </td>
    </tr>
    <hr size="2" width="100%" align="center" />

</table>

</body>
</html>




阅读 1.2k更新于 3月26日
推荐阅读
TESTERSPACE
用户专栏

测试

2 人关注
8 篇文章
专栏主页
目录