首页 > 技术文章 > Jmeter+Ant+Jenkins接口自动化测试(三)_Ant配置及Jenkins持续集成

Bug-Hunter 2017-12-04 15:33 原文

前言:

本来想多分几部分,但是都是抽时间总结的,也就不润色了,直接三板斧,结束。

特别提示:

知识是用来分享的,但是也要尊重作者的权益,转载请注明出处,未经本人允许不可用于商业目的。

Ant构建文件配置

打开build.xml文件,使其处于编辑状态,输入如下内容:

<?xml version="1.0" encoding="UTF-8"?>  

 

<project name="test" default="report" basedir=".">

    <tstamp> 

        <!--format property="time" pattern="yyyyMMddkkmm" /-->

        <format property="date" pattern="yyyy/MM/dd kk:mm:ss"/>

  <!--kk是24小时制,KK是12小时制-->       

    </tstamp>

    <!-- 需要改成自己本地的 Jmeter 目录--> 

    <property name="jmeter.home" value="D:/apache-jmeter-2.13" />

    <property name="report.title" value="Jmeter_接口自动化测试结果"/>   

    <!-- jmeter生成jtl格式的结果报告的路径--> 

    <property name="jmeter.result.jtl.dir" value="D:/Jenkins_WorkSpace/result/jtl" /> 

    <!-- jmeter生成html格式的结果报告的路径--> 

    <property name="jmeter.result.html.dir" value="D:/Jenkins_WorkSpace/result/html" /> 

    <!-- 生成的报告的前缀-->

    <!-- 生成的报告的名称-->    

    <property name="ReportName" value="DetailsReport" />

    <property name="ReportName2" value="SummaryReport" />

    <!--jtl的value值是D:\Jenkins\jmxReport\jtl\TestReport+yyyyMMddhhmm.jtl-->   

    <!--html的value值是D:\Jenkins\jmxReport\html\TestReport+yyyyMMddhhmm.html-->   

    <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}.jtl" /> 

    <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}.html" />

    <property name="jmeter.result.htmlName2" value="${jmeter.result.html.dir}/${ReportName2}.html" />

 

   

        <!-- 工程引用包 -->   

        <property name="lib.home" value="D:/apache-jmeter-2.13/xjar"/>

        <!--jmx文件存放位置-->

        <property name="jmxFile" value="D:/Jenkins_WorkSpace/jmx"/>

        

    <!--项目初始化设置-->

      <target name="init" description="init" >

      <!--删除jtl文件夹下生成的所有文件及文件夹包括空目录,但不删除根目录-->

         <delete verbose="true" includeemptydirs="true" >

            <fileset dir="${jmeter.result.jtl.dir}" >

                  <include name="**/*" />

            </fileset>

         </delete>

         <!--删除html文件夹下生成的所有文件及文件夹包括空目录,但不删除根目录-->

         <delete>

            <fileset dir="${jmeter.result.html.dir}">

                 <include name="**/*"/>

            </fileset>

         </delete>

         <!--<delete dir="${classes.home}"/>

         <mkdir dir="${classes.home}"/>-->

      </target>

     

    <target name="test" depends="init"> 

        <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" /> 

        <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}"> 

            <!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本--> 

            <testplans dir="${jmxFile}" includes="*.jmx" />

            <!--声明生成的jtl文件是xml格式,否则会报错 -->

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

        </jmeter> 

    </target> 

    <path id="xslt.classpath">

        <fileset dir="${lib.home}" includes="xalan*.jar"/>    

        <fileset dir="${lib.home}" includes="serializer*.jar"/>

    </path>

   

    <target name="report" depends="test" >  

   

        <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="titleReport" expression="${report.title}"/>

              <param name="dateReport" expression="${date}"/>             

         </xslt>

         <xslt

              classpathref="xslt.classpath"

              force="true"

              in="${jmeter.result.jtlName}" 

              out="${jmeter.result.htmlName2}"

              style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">

              <param name="titleReport" expression="${report.title}"/>

              <param name="dateReport" expression="${date}"/>             

         </xslt>

        <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 --> 

        <copy todir="${jmeter.result.html.dir}"> 

            <fileset dir="${jmeter.home}/extras"> 

                <include name="collapse.png" /> 

                <include name="expand.png" /> 

            </fileset> 

        </copy> 

    </target>

   

     

      

</project>  

相关配置完成后,可在build.xml所在文件夹下执行cmd,并输入ant验证构建是否成功,如出现下图所示结果代表构建成功:

 

Jenkins配置:

环境配置:

在浏览器中输入http://Jenkins_IP:端口号,登录到Jenkins界面,如下图所示:

 

点击“系统管理”-“Global Tool Configuration”,在该界面中配置Ant路径和Jdk路径(取消自动安装),如下图所示:

 

配置完成后点击“save”进行保存。

插件配置:

保存成功后返回系统配置,点击“插件管理”,安装“Ant Plugin”、“HTML Publisher plugin”、Startup TriggerGroovy plugin和“Performance Plugin”等插件,安装完成后在已安装中可以查到相关插件,如下图所示:(注:在未联网的系统内部署时,可以将其他部署好的Jenkins中plugin文件夹拷贝到未联网系统中)

 

配置完成后点击“Jenkins”跳转到初始化界面。

Job创建

在初始化界面点击“新建”,在跳转后的界面中输入item name,选择“构建一个自由风格的软件项目”,点击“OK”,如下图所示:

 

在调转后界面的构建中添加“Invoke Ant”插件,如下图所示:

 

添加完成后,配置相关参数信息,如下图所示:(注如果Invoke Ant未完全显示,请点击其下方的高级按钮)

 

在构建后操作中添加“Publish HTML reports”,如下图所示:

 

添加完成后,配置相关参数,如下图所示:

 

配置完成后点击“保存”按钮,创建job成功。

解决HTML展示异常

由于Jenkins的一个安全策略,默认会设置为一个非常严格的权限集,以防止Jenkins用户在workspace、/userContent、archived artifacts中受到恶意HTML/JS文件的攻击。因此在“HTML Report”展示HTML报告时候无法正常显示,因此我们要进行一下处理,详细描述可参考网络博客:解决 Jenkins 中无法展示 HTML 样式的问题,这里采用一劳永逸的方式。

继续创建新的job,命名为:“HTML展示脚本”,在配置界面的“构建触发器”中勾选“Build when job nodes start”,不设置任何参数,如下图所示:

 

在“构建”中增加“Execute system Groovy script”,如下图所示:

 

增加完成后,在“Groovy Script”中输入如下脚本:

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")

如下图所示:

 

点击保存按钮,将新建的job进行保存。当下次Jenkins重启后也不用担心HTML的问题了,由于没有研究Jenkins安全策略问题,而且使用的HTML模板使用较多的js等,此处直接放开所有权限了。

自动化测试执行:

本次只采用手动构建方式,具体操作如下:

在job项目界面,点击“立即构建”执行构建操作,执行完成后查看相关执行结果报告,如下图所示:

 

查看结果报告可以点击“HTML Report”,展示结果如下:

概要报告:

 

详细报告:

 

备注:本分享是基于实际工作的经验总结而成,相关插件等资源来自网络,如遇到部署等问题,请先根据部署环境中使用的软件版本进行部署,先关版本亲测未发现问题,希望对读者有所帮助。

 

推荐阅读