• Jmeter+Ant+Jenkins搭建持续集成的接口测试(推荐 Mark)


     

    转自:http://my.oschina.net/hellotest/blog/516079

    一、Jmeter+ant

    1、首先我们默认Jmeter脚本已经录制好了,并测试通过,存在(查询模块.jmx)脚本 

    2、将 JMeter所在目录下extras子目录里的ant-JMeter-1.1.1.jar复制到Ant所在目录lib子目录之下,这样Ant运行时才能找 到"org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"这个类,从而成功触发JMeter脚本      

    3、jmeter默认保存的是.csv格式的文件,所以我们先要设置一下bin/jmeter.properties文件内容,保存

        jmeter.save.saveservice.output_format=xml

    4、主要逻辑思路:运行D:jemeterTestscript下面的.jmx脚本,生成.jtl文件放入 

          D:jemeterTest esultLogjtl文件中,ant在将相应的文件转换为对应的html文件放入D:jemeterTest esultLoghtml中

       build.xml文件中的内容如下: 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?xml version="1.0" encoding="utf-8"?>
    <project name="JmeterTest" default="all" basedir=".">
        <tstamp>
            <format property="time" pattern="yyyyMMddhhmm" />
        </tstamp>
        <!-- 需要改成自己本地的 Jmeter 目录-->
        <property name="jmeter.home" value="D:softapache-jmeter-2.9" />
        <!-- jmeter生成jtl格式的结果报告的路径-->
        <property name="jmeter.result.jtl.dir" value="D:jemeterTest esultLogjtl" />
        <!-- jmeter生成html格式的结果报告的路径-->
        <property name="jmeter.result.html.dir" value="D:jemeterTest esultLoghtml" />
        <!-- 生成的报告的前缀 -->
        <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" />
        <!-- 接收测试报告的邮箱 -->
        <property name="mail_to" value="LIUCHAO448@pingan.com.cn" />
        <!-- 电脑地址 -->
        <property name="ComputerName" value="jkqsh-l0285" />
        <target name="all">
            <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:jemeterTestscript" includes="*.jmx" />
            </jmeter>
        </target>
        <target name="report">
            <xslt in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_90Line.xsl" />
            <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->
            <copy todir="${jmeter.result.html.dir}">
                <fileset dir="${jmeter.home}/extras">
                    <include name="collapse.png" />
                    <include name="expand.png" />
                </fileset>
            </copy>
        </target>
        <!-- 发送邮件 -->
    </project>

            

            切换到D:jemeterTest目录下,输入ant查看运行结果

            

             

             运行前

                    

            运行后

                

            浏览器打开HTML文件,显示正确

                 

               

    二、Jmeter+ant+Jenkins

            1、下载Jenkins安装

            2、命令行切换到jenkins.war的根目录,输入 java -jar jenkins.war

                    

            3、浏览器输入地址http://localhost:8080/显示界面,安装成功

             

                4、新建一个任务并配置

                

             

            5、配置参数

                    

              旧的构建保存了你在一次构建中的所有临时文件,如果构建没有保留的必要,就勾选丢弃旧的构建,同时设置保持构建天使和保持构建的最大个数两个参数。

              注意:三个设置必须同时设置,否则无效

            6、设置定时运行间隔,这里,设置间隔时间为15分钟运行一次

                        

            7、设置invoke ant,完成后点击保存

                            

            8、点击立即构建,就可以调用ant,执行打包过程。在这里,也就是执行生成测试报告的步骤

             

                    

        

    三、Tomcat配置虚拟目录

        在tomcat文件夹的conf/Catalina/localhost(对于Tomcat6版本及其以上,需要自己创建catalina和localhost这两个文件夹)下新建一个xml文件。

        内容为:

    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="UTF-8"?> 
    <Context 
        docBase="换成你的路径" 
        reloadable="true"
    </Context>

        文件名改成你自己的譬如http://localhost:8080/infces ,文件名就为infces.xml

        其他配置:

        打开 Tomcat/conf/web.xml 文件,找到:

        <init-param>

        <param-name>listings</param-name>

        <param-value>false</param-value>

        </init-param>

        把false设成true保存,重启Tomcat,让tomcat支持文件列表显示

        输入地址:http://localhost:8080/infces/

        显示如下:

    前期条件:存在Jmeter聚合测试报告TestReport201510100244.jtl

        1、Ant安装

                     下载ant地址

                     配置环境变量

                     

                     命令行窗口输入ant

                     

                    安装成功

       2、将Jmeter保存的xml格式的聚合报告TestReport201510100244.jtl,放到相应的文件夹中

                文件夹目录结构:

                D:jemeterTest

                

        3、编辑build.xml文件

            

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?xml version="1.0" encoding="utf-8"?>
    <project name="JmeterTest" default="all" basedir=".">
        <!-- 需要改成自己本地的 Jmeter 目录-->
        <property name="jmeter.home" value="D:softapache-jmeter-2.9" />
        <!-- jmeter生成jtl格式的结果报告的路径-->
        <property name="jmeter.result.jtl.dir" value="D:jemeterTest esultLogjtl" />
        <!-- jmeter生成html格式的结果报告的路径-->
        <property name="jmeter.result.html.dir" value="D:jemeterTest esultLoghtml" />
        <!-- jtl文件-->
        <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/TestReport201510100244.jtl" />
        <!-- 生成HTML文件 -->
        <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/TestReport201510100244.html" />
        <target name="all">
            <antcall target="report" />
        </target>
        <target name="report">
            <xslt in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}">
            <!-- Jmeter自带的XSLT样式表在目录extras下面-->style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" /&gt;</xslt>
        </target>
    </project>

    4、切换到D:jemeterTest目录下,输入ant查看运行结果在D:jemeterTest esultLoghtml目录下生成TestReport201510100244.html文件

        

                

                

    5、打开TestReport201510100244.html文件

            

    6、发现Min Time和Max Time尽然没有显示出来显示的Nan

                这个问题比较奇葩,我的初步定为思路如下

                1)首先我先看一下Jmeter自带的XSLT样式表问题

                      将TestReport201510100244.jtl文件的第二行加入

                        <?xml-stylesheet type="text/xsl" href="D:/soft/apache-jmeter-2.9/extras/jmeter-results-detail-report_21.xsl"?>

                        用浏览器打开显示正常,初步排除了XSLT样式表问题

                                

                        

            2)编写java程序,用程序去调取jmeter-results-detail-report_21.xsl,运行,发现报错,提示

                    致命错误: "无法编译样式表", 

          从网上找到了解决方案,要下载一个xalan.jar,serializer.jar包放到项目中即可解决这个问题

            3)将这两个jar包入ant的lib再次切换到D:jemeterTest目录下,输入ant查看运行结果,在D:jemeterTest esultLoghtml目录下生成TestReport201510100244.html文件,使用浏览器查看,OK,显示了!

                

    7、拓展显示功能

            我们发现在界面上没有显示,90%line,这个性能指标项,在这里我们需要修改XSLT样式表,jmeter-results-detail-report_21.xsl增加部分内容后的文件如下:

            

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <!--.......................其他内容略....................................-->
    <!-- New add 90% line -->
    <xsl:variable name="allLineTime">
        <xsl:call-template name="line">
            <xsl:with-param name="nodes" select="/testResults/*/@t" />
            <xsl:with-param name="postion" select="$allPostion" />
        </xsl:call-template>
    </xsl:variable>
    <!--.......................其他内容略....................................-->
    <!-- New add 90% line -->
    <xsl:template name="line">
        <xsl:param name="nodes" select="/.." />
        <xsl:param name="postion" select="/.." />
        <xsl:choose>
            <xsl:when test="not($nodes)">LNaN</xsl:when>
            <xsl:otherwise>
                <xsl:for-each select="$nodes">
                    <xsl:sort data-type="number" order="descending" />
                    <xsl:if test="position() =$postion">
                        <xsl:value-of select="number(.)" />
                    </xsl:if>
                </xsl:for-each>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    <!--.......................其他内容略....................................-->

     

     

            注:90%Line逻辑(网上找的释疑)

                    一组数由小到大进行排列,找到他的第90%个数(假如是10),那么这个数组中有90%的数将小于等于120

                    用在性能测试的响应时间也将非常有意义,也就是90%用户响应时间不会超过12 

        1)修改build.xml文件中的内容style="${jmeter.home}/extras/jmeter-results-detail-report_90Line.xsl" 然后切换到D:jemeterTest目录下,输入ant查看运行结果,在 

               D:jemeterTest esultLoghtml目录下生成TestReport201510100244.html文件,成功了!

     

                 

    准备工作:

    1.java的运行环境正常,及运行java -version、javac -version能正常输出java版本;

    2.ant的运行环境正常,使用ant需要配置环境变量,编辑/etc/profile,在结尾处添加:

    export ANT_HOME="/export/servers/ant"

     

    export PATH="/export/servers/ant/bin":$PATH

    保存退出后,执行命令source /etc/profile使环境变量即可生效。

    3.将JMeter所在目录下extras子目录里的ant-JMeter- 1.1.1.jar复制到Ant所在目录lib子目录之下,这样Ant运行时才能找 到"org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"这个类,从而成功触发JMeter脚本

    配置build.xml:

    将本猿编写的jmetertool.tar.gz上传到服务器并解压,编辑其中的build.xml:

     

    Xml代码  收藏代码
    1. <project name="autotest" default="all" basedir=".">     
    2.         <!-- 需要改成自己本地的 Jmeter 目录-->  
    3.         <property name="jmeter.home" value="/export/servers/jmeter"/>  
    4.         <!-- jmeter生成jtl格式的结果报告的路径-->  
    5.         <property name="jmeter.result.jtl.dir" value="${basedir}/jtl" />  
    6.         <!-- jmeter生成html格式的结果报告的路径-->  
    7.         <property name="jmeter.result.html.dir" value="${basedir}/html" />  
    8.         <!-- jmeter生成csv格式的结果报告的路径-->  
    9.         <property name="jmeter.result.csv.dir" value="${basedir}/csv" />  
    10.         <!-- 编译后class文件目录 -->  
    11.         <property name="classes" value="${basedir}/classes"/>  
    12.         <!-- 生成的报告的前缀-->  
    13.         <property name="ReportName" value="TestTomNgx"/>  
    14.         <!-- 参数-->  
    15.         <property name="threads1" value="5" />  
    16.         <property name="threads2" value="5" />  

     修改其中的jmeter目录一定要修改成你本地所在的目录,根据需要修改ReportName以及线程数。

     

     

    Xml代码  收藏代码
    1. <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl"><testplans dir="${basedir}" includes="test.jmx"/>  

     上传被测的jmx文件到当前目录,并修改build.xml中的jmx文件名。

     

    为了能够动态修改压测的线程数,我们使用vi命令打开被测的jmx文件:

     

    Xml代码  收藏代码
    1. <stringProp name="ThreadGroup.num_threads">${__P(request.threads1)}</stringProp>  

     将线程数设置项改为该参数,名字与build.xml中的对应即可。

     

     

    Xml代码  收藏代码
    1. <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl">  
    2.                 <testplans dir="${basedir}" includes="testbaidu.jmx"/>  
    3.                 <property name="jmeter.save.saveservice.output_format" value="csv"/>  
    4.              <property name="jmeter.save.saveservice.response_message" value="false" />  
    5.                 <jvmarg value="-Xincgc"/>  
    6.                 <jvmarg value="-Xms1024m"/>  
    7.                 <jvmarg value="-Xmx1024m"/>  
    8.                 <property name="request.threads1" value="${threads1}"/>  
    9.                 <property name="request.threads2" value="${threads2}"/>  

    参数 ${threads1}、${threads2}当前默认值是5个线程,可自行修改。

     

    开始压测:

    做完上面的工作,运行命令ant或者ant -Dthreads=8 -Dthreads=3即可,会自动启动jmeter进行压测,jmeter运行完毕后,会自动执行将生成的jtl文件分析为csv文件的工作,执行完毕后会有类似如下输出:



     同时当前目录会自动创建jtl、html、csv三个文件夹:



     

    查看结果:

    那么问题来了,我们怎么查看压测的结果呢?很简单,在当前机器上配置一个tomcat,将当前的目录(我的是/export/servers/jmeter/script)配置为tomcat的虚拟目录,在tomcat的web.xml中找到

    <init-param>
                <param-name>listings</param-name>
                <param-value>true</param-value>
    </init-param>

    设置为true以开启目录浏览功能。好了,我们访问该tomcat即可,http://ip:port/html。



     每执行一次测试,都会自动建立一个文件夹,点进相应的文件夹,有几个接口就会html,点击相应的html我们就可以看到图表方式的TPS、响应时间等。



     

     

    批量定时运行:

    使用linux的crontab命令即可,crontab -e 每行添加一条ant命令例如:

    30 1 11 * * ant -Dthreads1=8 Dthreads2=6

    30 2 11 * * ant -Dthreads1=16 Dthreads2=12

    或者使用at命令也很方便,从此再也不用因为加班到很晚而得罪老婆大人了,第二天早上来打开浏览器看结果就行。

     

    如果需要多机负载的话,在<jmeter jmeterhome="${jmeter.home}" runremote="true" resultlog="${jmeter.result.jtl.dir}/${ReportNam

    e}${time}.jtl">

    然后修改jmeter/bin目录下的jmeter.propties即可

  • 相关阅读:
    Linux IPC udp/ip socket 编程
    Linux IPC tcp/ip socket 编程
    Linux IPC BSD socket编程基础
    Linux IPC POSIX 信号量
    Linux IPC POSIX 消息队列
    Linux IPC POSIX 共享内存
    Linux IPC System V 信号量
    Linux IPC System V 消息队列
    Linux IPC System V 共享内存
    ipcs, ipcrm
  • 原文地址:https://www.cnblogs.com/zhengah/p/5231036.html
Copyright © 2020-2023  润新知