zoukankan      html  css  js  c++  java
  • Jenkins+Ant+Git+Jmeter接口自动化

     一、服务器分别安装JDK、Jenkins、Ant、Git、Jmeter

    1、JDK安装参考:https://www.cnblogs.com/xiaoxitest/p/6168045.html

    2、Jenkins安装参考:https://www.cnblogs.com/xiaoxitest/p/11947309.html

    3、Ant安装参考:https://www.cnblogs.com/xiaoxitest/p/11947205.html

    4、Git安装参考:https://www.cnblogs.com/xiaoxitest/p/10106302.html

    5、Jmeter安装参考:https://www.cnblogs.com/xiaoxitest/p/6208940.html

    二、Ant配置

    1、将jmeter的extras目录下ant-jmeter-1.1.1.jar文件拷贝到ant的lib目录下

    2、创建存放测试报告目录:/opt/apache-jmeter-5.1.1/report/html 和 /opt/apache-jmeter-5.1.1/report/jtl

    3、由于默认的报告内容不够丰富,下载style文件:jmeter.results.shanhe.me.xsl,把下载的文件放到jmeter的extras目录下

    4、修改jmeter.properties文件如下部分,这样执行完脚本后就会保存这些结果到.jtl文件里面:

    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
    # Only available with HttpClient4
    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
    # Only available with HttpClient4
    #jmeter.save.saveservice.sent_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

    5、创建build.xml文件:vim /opt/apache-jmeter-5.1.1/report/build.xml

    内容如下,根据自己的路径修改:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 
     3 <project name="ant-jmeter-test" default="run" basedir=".">
     4     <tstamp>
     5         <format property="time" pattern="yyyy-MM-dd_HHmm" />
     6     </tstamp>
     7     <!-- 需要改成自己本地的 Jmeter 目录-->  
     8     <property name="jmeter.home" value="/opt/apache-jmeter-5.1.1" />
     9     <!-- jmeter生成jtl格式的结果报告的路径--> 
    10     <property name="jmeter.result.jtl.dir" value="/opt/apache-jmeter-5.1.1/report/jtl" />
    11<!-- jmeter生成html格式的结果报告的路径-->
    12     <property name="jmeter.result.html.dir" value="/opt/apache-jmeter-5.1.1/report/html" />
    13     <!-- 生成的报告-->  
    14     <property name="ReportName" value="TestReport" />
    15     <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
    16     <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />
    17     
    18     <target name="run">
    19         <antcall target="test" />
    20         <antcall target="report" />
    21     </target>
    22     
    23     <target name="test">
    24         <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
    25         <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
    26              <!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本-->
    27             <testplans dir="/opt/apache-jmeter-5.1.1/test" includes="*.jmx" />
    28             <property name="jmeter.save.saveservice.output_format" value="xml"/>
    29         </jmeter>
    30     </target>
    31     
    32     <path id="xslt.classpath">
    33         <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
    34         <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
    35     </path> 
    36     
    37     <target name="report">
    38         <tstamp><format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/></tstamp>
    39         <xslt 
    40               classpathref="xslt.classpath"
    41               force="true"
    42               in="${jmeter.result.jtlName}"
    43               out="${jmeter.result.htmlName}"
    44               style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
    45 
    46               
    47               <param name="dateReport" expression="${report.datestamp}"/>
    48         </xslt>
    49                 <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 --> 
    50         <copy todir="${jmeter.result.html.dir}">
    51             <fileset dir="${jmeter.home}/extras">
    52                 <include name="collapse.png" />
    53                 <include name="expand.png" />
    54             </fileset>
    55         </copy>
    56     </target>
    57 </project>

     三、jenkins配置

    下载插件 HTML Publisher Plugin
    下载插件 email extension plugin(可选)、performance plugin

     1、新建job

    2、选择构建记录要保留的天数或个数

     3、配置多套测试环境

     4、配置Git,从Git拉取最新脚本

     5、定时构建,当前设置为:每周一至周五,早上10点至下午18点,每隔1小时构建一次

     6、为方便查看,这里选择把将时间戳添加到控制台输出

     7、在/opt/apache-jmeter-5.1.1/test目录下创建3个不同的shell脚本文件,分别为test1,test2和test3,目的是更改jmeter脚本文件中用户定义的变量启用和禁用来切换环境,根据自己设置的名称填写

    vim /opt/apache-jmeter-5.1.1/test/test1

    sed -i 's/testname="用户定义的变量-test1" enabled="false"/testname="用户定义的变量-test1" enabled="true"/g' /opt/apache-jmeter-5.1.1/test/test.jmx
    sed -i 's/testname="用户定义的变量-test2" enabled="true"/testname="用户定义的变量-test2" enabled="false"/g' /opt/apache-jmeter-5.1.1/test/test.jmx
    sed -i 's/testname="用户定义的变量-test3" enabled="true"/testname="用户定义的变量-test3" enabled="false"/g' /opt/apache-jmeter-5.1.1/test/test.jmx

    vim /opt/apache-jmeter-5.1.1/test/test2

    sed -i 's/testname="用户定义的变量-test1" enabled="true"/testname="用户定义的变量-test1" enabled="false"/g' /opt/apache-jmeter-5.1.1/test/test.jmx
    sed -i 's/testname="用户定义的变量-test2" enabled="false"/testname="用户定义的变量-test2" enabled="true"/g' /opt/apache-jmeter-5.1.1/test/test.jmx
    sed -i 's/testname="用户定义的变量-test3" enabled="true"/testname="用户定义的变量-test3" enabled="false"/g' /opt/apache-jmeter-5.1.1/test/test.jmx

    vim /opt/apache-jmeter-5.1.1/test/test3

    sed -i 's/testname="用户定义的变量-test1" enabled="true"/testname="用户定义的变量-test1" enabled="false"/g' /opt/apache-jmeter-5.1.1/test/test.jmx
    sed -i 's/testname="用户定义的变量-test2" enabled="true"/testname="用户定义的变量-test2" enabled="false"/g' /opt/apache-jmeter-5.1.1/test/test.jmx
    sed -i 's/testname="用户定义的变量-test3" enabled="false"/testname="用户定义的变量-test3" enabled="true"/g' /opt/apache-jmeter-5.1.1/test/test.jmx

    8、新建两个shell文件,删除旧的报告,只保留最新的10个

    vim /opt/apache-jmeter-5.1.1/report/rm_html

    #!/bin/bash
    #保留文件数
    ReservedNum=10
    FileDir=/opt/apache-jmeter-5.1.1/report
    
    FileNum=$(ls -l  $FileDir/*.html |grep ^- |wc -l)
    
    while(( FileNum > ReservedNum))
    do
        OldFile=$(ls -rt  $FileDir/*.html| head -1)
        echo  "Delete File:" $OldFile
        rm -f $OldFile
        let "FileNum--"
    done

    vim /opt/apache-jmeter-5.1.1/report/rm_jtl

    #!/bin/bash
    #保留文件数
    ReservedNum=10
    FileDir=/opt/apache-jmeter-5.1.1/report
    
    FileNum=$(ls -l  $FileDir/*.jtl |grep ^- |wc -l)
    
    while(( FileNum > ReservedNum))
    do
        OldFile=$(ls -rt  $FileDir/*.html| head -1)
        echo  "Delete File:" $OldFile
        rm -f $OldFile
        let "FileNum--"
    done

    9、增加构建步骤,执行shell,删除旧的测试报告和根据选择的环境,执行不同的shell脚本

    10、增加构建步骤,Execute system Groovy script(报告显示非HTML格式时配置该选项)

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

    11、增加构建步骤,invoke Ant,选择自己配置的ant和build.xml文件路径

    12、新建钉钉通知脚本(根据自己路径替换curl和text内容)

    vim notify.sh

     

    #!/bin/bash
    
    curl 'https://oapi.dingtalk.com/robot/send?access_token=6bb1b219edd2ad72b02596d73cc22b331044f30b3e6edfc832bdbfb49831e67b' 
    -H 'Content-Type: application/json' 
    -d '{
    "msgtype": "markdown",
    "markdown": {
    "title":"构建失败",
    "text": "#### 接口运行失败
    
     > 项目:单体药店
    
     > 环境:线上
    
     > ##### [点击查看](https://jenkins-ep.test.ybm100.com/job/SAAS-automation/job/saas-dt
    -prod/HTML_20Report/) 
    "
    },
    "at": {
    "atMobiles": [
    "152xxxx"
    ],
    "isAtAll": true
    }
    }

    13、增加构建步骤,再次选择执行shell,我们断言执行结果的jtl文件,如果存在断言失败,就发送通知到钉钉(为了方便查看错误报告,我们拷贝当前的错误报告重命名为Error.html)

    内容如下,根据自己路径填写:

    file=$(ls -t /opt/apache-jmeter-5.1.1/report/jtl/*.jtl | head -1)
    file2=$(ls -t /opt/apache-jmeter-5.1.1/report/html/*.html | head -1)
    cp -rf $file /opt/apache-jmeter-5.1.1/report/jtl/TestReport.jtl
    if grep -qE "<failure>true</failure>"  $file ;then
      echo "接口运行失败,发送通知到钉钉!"
      cp -rf $file2 /opt/apache-jmeter-5.1.1/report/html/Error.html
      sh /opt/apache-jmeter-5.1.1/report/notify.sh  
      
    else
      echo "接口执行成功"
      exit 0
    fi

    14、增加构建后操作,用来查看测试报告

    15、增加构建后操作,添加钉钉通知器配置

    步骤13是接口运行失败时接收报告的通知,但是有可能还没执行到步骤13就已经出错了,因此我们再次添加钉钉通知器配置,仅在构建失败时发送通知。

    四、报告通知

    1、接口运行失败,收到通知

    2、构建失败,发送通知

    五、生成多个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" /> <!-- 生成第二个报告--> <property name="detail" value="_detail" /> <property name="jmeter.result.jtlNamedetail" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" /> <property name="jmeter.result.htmlNamedetail" value="${jmeter.result.html.dir}/${ReportName}${time}${detail}.html" />

    另在原先报告下新增一个xslt标签

    <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-detail-report_21.xsl">
                  <param name="dateReport" expression="${report.datestamp}"/>
            </xslt>
    
            <xslt 
                  classpathref="xslt.classpath"
                  force="true"
                  in="${jmeter.result.jtlNamedetail}"
                  out="${jmeter.result.htmlNamedetail}"
                  style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
                 <param name="dateReport" expression="${report.datestamp}"/>
            </xslt>

    运行成功后会生成两个html报告

     第一个汇总报告

    第二个详细报告

     

    附:钉钉access token查看

    进入钉钉群,选择添加机器人-自定义-添加-复制Webhook链接(钉钉通知只填写access_token=后面部分)-安全设置(选择自定义关键字:构建)-完成

  • 相关阅读:
    tensorflow几个常见错误
    15、TDM模型
    算法97:成绩排名---动态规划
    推荐阅读论文
    Reservoir Sampling 蓄水池采样算法
    14、RALM: 实时 look-alike 算法在推荐系统中的应用
    NLP传统基础(3)---潜在语义分析LSA主题模型---SVD得到降维矩阵
    【SqlServer】SqlServer中的计算列
    【SQL】数据库中的五种约束
    【.NET】SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM之间
  • 原文地址:https://www.cnblogs.com/xiaoxitest/p/11944440.html
Copyright © 2011-2022 走看看