Jenkins+Ant+JMeter集成

Posted zhengna

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jenkins+Ant+JMeter集成相关的知识,希望对你有一定的参考价值。

Tomcat是jenkins运行的容器,jenkins实际上是依赖于Tomcat才能启动的。Jenkins可以调度ant的脚本。

Ant和maven类似,maven是执行pom文件,ant是执行build文件。

Jenkins强大之处就是有很多插件。

一.Jenkins安装

1.Tomcat下载,解压。D:\\software\\apache-tomcat-8.0.28\\webapps目录下的东西无用可删除。

技术图片

2.官网(https://jenkins.io/download/)下载jenkins.war,并将其拷贝到D:\\software\\apache-tomcat-8.0.28\\webapps目录下。

技术图片

3.双击bin目录下的startup.bat启动Tomcat。

技术图片

启动后在%TOMCAT_HOME%\\webapps目录下可以看到war包已经自动解压。

技术图片

同时在C:\\Users\\Administrator目录下多了一个.jenkins文件夹。

技术图片

可以通过在浏览器输入:http://localhost(或者本机ip):8080/jenkins方式访问。

管理员初始密码在C:\\Users\\Administrator\\.jenkins\\secrets\\initialAdminPassword中。

可以在管理员-配置中修改密码。

技术图片

可以通过修改%TOMCAT_HOME%\\conf\\server.xml文件,修改默认端口。修改后需要重启Tomcat。

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

安装Performance Plugin插件。

离线安装。先官网(http://updates.jenkins-ci.org/download/plugins/performance/)下载,再将其拷贝到%JENKINS_HOME%\\plugin目录下,重启tomcat。没成功?!

技术图片

在线安装。

系统管理-插件管理-Available-找到Performance-点击install without restart。
安装成功之后可在Installed中找到。

技术图片

二.建立Slave节点(如果单机测试,此处可以忽略)

我们默认安装的Jenkins为master模式,当有大量任务时,分布式架构会提高效率。Slave节点即为分布式的节点。Jenkins的分布式任务不需要在Slave节点上也部署一套Jenkins环境,只需要建立master与slave之间的连接,由master发出指令让slave节点执行即可。

1.首页-系统管理-节点管理-新建节点-输入节点名称,确认。

技术图片

2.填写节点的具体信息。

Jenkins新建节点,启动方式没有“通过Java Web启动代理”选项怎么办?

技术图片

3.Slave连接Master。

如下图,小红叉代表节点没有连接上。

技术图片

点击JmeterNode进入如下页面,告诉我们有2种连接方式。任选一种即可。下面我们选择第2种。

技术图片

先点击下载agent.jar,再在命令行输入命令回车。

技术图片

显示如下信息表示连接成功。

技术图片

小红叉消失。

技术图片

三.JMeter任务配置

上篇博客实例二我们已经集成了Ant+JMeter,运行Jmeter简化成了执行一个.bat的批处理文件,在此我们只需要用Jenkins调用这个批处理文件即可。

我们需要先把build.xml和run.bat做点小小的改动。

技术图片
<?xml version="1.0"?>
<project name="ant-jmeter" default="all">
    <description>
        Jmeter+Ant+Jenkins <!--文件描述,可选择项-->
    </description>
    
    <!--定义变量并赋值,能够减少配置工作量,后面会用到-->
    <!--定义JMeter的工作目录,与%JMETER_HOME%指向同一个目录-->
    <property name="jmeter.home" value="D:\\software\\apache-jmeter-5.1"/>
    
    <!--定义JMeter脚本存放目录-->
    <property name="script.dir" value="D:\\jmeterTest\\script"/>
    
    <!--定义JMeter的测试结果存放目录-->
    <property name="jmeter.result.dir" value="D:\\jmeterTest\\resultLog"/>
    
    <!--定义Jenkins的工作目录,将来用来存放测试结果-->
    <property name="jmeter.jenkins" value="D:\\jenkinsWorkshop\\workspace\\PerformanceTest"/>
    
    <!--定义测试报告Title-->
    <property name="report.title" value="Performance Test Summary Report"/>

    <!--定义测试结果名称-->
    <property name="jmeter.result.name" value="Test"/>
    
    <!--测试报告中是否显示失败事务,n为不显示-->
    <property name="show-data" value="n"/>
    
    <!--定义样式版本,有更新时只需要修改此处即可,其他调用处不用更改-->
    <property name="format" value="2.1"/>
        
    <condition property="style_version" value="">
        <equals arg1="$format" arg2="2.0"/>
    </condition>

    <condition property="style_version" value="_21">
        <equals arg1="$format" arg2="2.1"/>
    </condition>
    
    <condition property="funcMode">
        <equals arg1="$show-data" arg2="y"/>
    </condition>
    
    <condition property="funcMode" value="false">
      <not>
        <equals arg1="$show-data" arg2="y"/>
      </not>
    </condition>

    <!--定义依赖包目录-->
    <path id="jmeter.classpath">
        <fileset dir="$jmeter.home\\extras">
          <include name="ant-jmeter*.jar"/>
        </fileset>
    </path>

    <!--定义任务,即测试活动,依赖于ant-jmeter.jar包-->
    <taskdef
        name="jmeter"
        classpathref="jmeter.classpath"
        classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/>
    
    <!--定义任务,run运行脚本,report生成报告,copy-report复制结果-->
    <target name="all" depends="run,report,copy-report"/>

    <!--定义run任务-->
    <target name="run">
        <!--显示上面定义的$show-data取值-->
        <echo>funcMode = $funcMode</echo>
        <!--删除前一次的测试报告,html格式的,上面有定义$jmeter.result.name变量的值-->
        <!--delete file="$jmeter.result.dir/$jmeter.result.name.html"/-->
        <!--删除前一次的测试报告,Html格式的,上面有定义$jmeter.result.name变量的值-->
        <!--delete file="$jmeter.result.dir/$jmeter.result.name.jtl"/-->
        
        <jmeter
            jmeterhome="$jmeter.home"
            jmeterproperties="$jmeter.home/bin/jmeter.properties"
            resultlog="$jmeter.result.dir/$jmeter.result.name.jtl">

            <!-- 指定测试脚本。"*.jmx"指包含此目录下的所有jmeter脚本 -->
            <testplans dir="$script.dir" includes="*.jmx" />
            
            <!--指定测试结果输出格式,在此指定的是xml,也可以指定成文本格式及CSV格式-->
            <!--先暂时指定成xml格式,后续会变换成文本格式-->
            <property name="jmeter.save.saveservice.output_format" value="xml"/>
            <property name="jmeter.save.saveservice.samplerData" value="true"/>
            <!--是否记录错误信息,上面已经定义了$funcMode=n-->
            <property name="jmeter.save.saveservice.response_data.on_error" value="$funcMode"/>
        </jmeter>
    </target>

    <!--定义依赖包目录-->
    <property name="lib.dir" value="$jmeter.home/lib"/>

    <!-- 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>

    <!--定义report任务,此任务依赖于xslt-report,copy-html,copy-images这3个任务-->
    <target name="report" depends="xslt-report,copy-html,copy-images">
        <echo>Report generated at $report.datestamp</echo>
    </target>

    <!--xslt-report是使用xslt来把xml文件转换成Html格式来显示-->
    <!--_message_xalan 被xslt-report依赖,由它生成报告-->
    <target name="xslt-report" depends="_message_xalan">
        <tstamp><format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/></tstamp>
        <!--in:将测试结果作为输入-->
        <!--style:xslt定义的模板文件地址-->
        <xslt
            classpathref="xslt.classpath"
            force="true"    
            in="$jmeter.result.dir/$jmeter.result.name.jtl"
            out="$jmeter.result.dir/$jmeter.result.name.html"
            style="$jmeter.home/extras/jmeter-results-detail-report$style_version.xsl">
            <param name="showData" expression="$show-data"/>
            <param name="titleReport" expression="$report.title"/>
            <param name="dateReport" expression="$report.datestamp"/>
        </xslt>
    </target>

    <!--copy-html复制结果到  目录,放在专门目录便于管理-->
    <target name="copy-html">
        <copy file="$jmeter.result.dir/$jmeter.result.name.html" tofile="$jmeter.jenkins/$jmeter.result.name.html"/>
        <copy file="$jmeter.result.dir/$jmeter.result.name.jtl" tofile="$jmeter.jenkins/$jmeter.result.name.jtl"/>
    </target>
    
    <!--copy-images用来cpoy图片,xslt模板中的图片由copy-images任务copy到报告目录-->
    <target name="copy-images" depends="verify-images" unless="samepath">
        <!--生成Html报告时需要Copy图标到报告目录,expand.png展开图标,collapse.png收起图标-->
        <copy file="$jmeter.home/extras/expand.png" tofile="$jmeter.result.dir/expand.png"/>
        <copy file="$jmeter.home/extras/collapse.png" tofile="$jmeter.result.dir/collapse.png"/>
    </target>
    
    <!--copy-report-->
    <target name="copy-report">
        <copydir dest="$jmeter.jenkins" src="$jmeter.result.dir">
            <include name="*.png"/>
        </copydir>
    </target>

    <target name="verify-images">
        <condition property="samepath">
                <equals arg1="$jmeter.result.dir" arg2="$jmeter.home/extras/" />
        </condition>
    </target>
    
    <!--检查依赖-->
    <condition property="xalan.present">
          <and>
              <!-- No need to check all jars; just check a few -->
            <available classpathref="xslt.classpath" classname="org.apache.xalan.processor.TransformerFactoryImpl"/>
            <available classpathref="xslt.classpath" classname="org.apache.xml.serializer.ExtendedContentHandler"/>
          </and>
    </condition>

    <target name="_message_xalan" unless="xalan.present">
        <echo>Cannot find all xalan and/or serialiser jars</echo>
        <echo>The XSLT formatting may not work correctly.</echo>
        <echo>Check you have xalan and serializer jars in $lib.dir</echo>
    </target>

    <!--仅仅打印前面定义的变量的值,检查是否如你所愿,在定义变量时做调试用,可以去掉-->
    <echo>jmeter.home = $jmeter.home</echo>
</project>
build.xml
技术图片
%ANT_HOME%\\bin\\ant -f D:\\jmeterTest\\build.xml
run.bat

1.新建任务。

技术图片

技术图片

2.配置任务。

技术图片

3.构建测试。

上面的1-4步骤是构建任务使Jenkins能够通过Ant调度Jmeter来进行性能测试执行。

第5步骤“构建后操作”即为配置使Jenkins显示测试结果。

4.查看报告。

点击“立即构建”。

技术图片

 构建过程中可以看到进度条。构建失败可以点击Console Output查看日志。

技术图片

构建成功可以点击performance report查看报告。

技术图片

 

以上是关于Jenkins+Ant+JMeter集成的主要内容,如果未能解决你的问题,请参考以下文章

Ant+Jmeter+Jenkins集成

jmeter+ant+jenkins集成

Jenkins01:linux+jenkins+ant+jmeter集成

jmeter + ant + jenkins 自动化集成环境搭建

Jenkins+Ant+JMeter集成

Jenkins+Jmeter+Ant持续集成