Linux环境下搭建Jenkins+Jmeter+Ant持续集成测试平台

Linux环境下搭建Jenkins+Jmeter+Ant持续集成测试平台

一、JDK安装

  1. 下载jdk18(最新版的jenkins后续不支持jdk8,所以下载jdk18):https://www.oracle.com/cn/java/technologies/javase/downloads/#java8,选择对应的linux版本进行下载
    image-20220725095747308.png
  1. 下载后的tar包,通过rz/scp或者ftp传输工具(xftp/FileZilla)传输到目标linux服务器,解压后移动到目标目录,我这里是保存到/usr/tools/

    # 解压
    tar -zxvf jdk-18_linux-x64_bin.tar.gz
    # 解压后的文件移动到指定目录
    mv ./jdk-18.0.1.1 /usr/tools
    
  2. 将jdk添加到环境变量

    # 打开环境变量配置文件
    vim /etc/profile
    

    在文件末尾添加java环境变量

    #java env
    JAVA_HOME=/usr/tools/jdk-18.0.1.1(你的jdk目录)
    CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    PATH=$PATH:$JAVA_HOME/bin:
    export JAVA_HOME
    export CLASSPATH
    export PATH
    
  3. 重新加载环境变量

    source /etc/profile
    
  4. 验证jdk是否安装成功

    java -version
    
image-20220725101628643.png

二、安装jmeter

  1. 下载jmeter包:https://jmeter.apache.org/download_jmeter.cgi,下载后上传到服务器、解压后移动到指定目录,步骤和jdk安装一样,这里我安装到/usr/tools

  2. vim /etc/profile配置环境变量

    在文件末尾添加jmeter环境配置

    #jmeter env
    JMETER_HOME=/usr/tools/apache-jmeter-5.5
    CLASSPATH=.:$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/log4j-core-2.11.0.jar
    PATH=$PATH:$JAVA_HOME/bin:$JMETER_HOME/bin:$ANT_HOME/bin
    export JMETER_HOME 
    export CLASSPATH
    export PATH
    
  3. 重新加载环境变量

    source /etc/profile
    
  4. 验证是否安装成功

    jmeter -v
    
image-20220725103311215.png

三、安装ant

  1. 下载ant,下载地址:https://ant.apache.org/bindownload.cgi

  2. 下载包上传到服务器,解压后移动到指定目录

    tar -zxvf /etc/apache-ant-1.10.9-bin.tar
    mv /etc/apache-ant-1.10.9-bin.tar /usr/tools
    
  3. vim /etc/profile修改环境配置

     export ANT_HOME=/home/test/apache-ant-1.10.9
     export PATH=$PATH:$ANT_HOME/bin
    
  4. 重新加载环境变量

    source /etc/profile
    
  5. 检查是否安装成功,输入ant -v,成功会出现如下信息

image-20220725104838664.png

四、Jmeter+Ant配置

  1. 文件配置

    • jmeter需要生成报告,就需要下载jmeter.results.shanhe.me.xsl,下载地址为:New XSL stylesheet for JMeter command line results report | shanhe.me
    • “jmeter.results.shanhe.me.xsl” 文件放到jmeter安装目录的 extras 目录下
    • 将jmeter的extras目录下的ant-jmeter-1.1.1.jar文件,拷贝到Ant安装目录的lib目录下
    • 将jmeter的lib目录下,把serializer-2.7.2.jar、xalan-2.7.2.jar文件复制到ant的lib目录下
  2. 创建ant工作目录以及报告存放目录

    创建工作目录我这里选择的/usr/jmeter_test,在目录下创建script、result和data文件夹,其中script存放jmeter脚本文件和build.xml文件,result下新建jtl和html文件存放jmeter报告,data存放csv配置的数据文件

  3. 本地下载的jmeter插件要同步到linux上的jmeter,否则运行会失败

  4. build文件存放在script目录中,我这里对build.xml做了点个性化配置

    <?xml version="1.0" encoding="utf-8"?>
    <project name="ant-jmeter" default="all">
        <description>
            Jmeter+Ant+Jenkins <!--文件描述,可选择项-->
        </description>
        
        <!--定义变量并赋值,能够减少配置工作量,后面会用到-->
        <!--定义JMeter的工作目录,与%JMETER_HOME%指向同一个目录-->
        <property name="jmeter.home" value="/usr/tools/apache-jmeter-5.5"/>
        
        <!--定义JMeter脚本存放目录-->
        <property name="script.dir" value="/usr/JmeterScript/wgh/Script"/>
        
        <!--定义JMeter的测试结果存放目录-->
        <property name="jmeter.result.dir" value="/usr/JmeterScript/wgh/result"/>
        
        <!--定义测试报告Title-->
        <property name="jmeter.result.title" value="WGH_interface 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="_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,即生成报告-->
        <target name="all" depends="run,report"/>
    
        <!--定义run任务-->
        <target name="run">
            <!--显示上面定义的${show-data}取值-->
            <echo>funcMode = ${funcMode}</echo>
            <!--删除前一次的测试报告,Html格式的,上面有定义${jmeter.result.name}变量的值-->
            <delete file="${jmeter.result.dir}/html/${jmeter.result.name}.html"/>
            <!--删除前一次的测试报告,Html格式的,上面有定义${jmeter.result.name}变量的值-->
            <delete file="${jmeter.result.dir}/jtl/${jmeter.result.name}.jtl"/>
            
            <jmeter
                jmeterhome="${jmeter.home}"
                jmeterproperties="${jmeter.home}/bin/jmeter.properties"
                
                resultlog="${jmeter.result.dir}/jtl/${jmeter.result.name}.jtl">
    
                <!-- 指定测试脚本。"*.jmx"指包含此目录下的所有jmeter脚本 -->
                <testplans dir="${script.dir}" includes="*.jmx" />
                
                <!--指定测试结果输出格式,在此指定的是xml,也可以指定成文本格式及CSV格式-->
                <!--先暂时指定成xml格式,后续会变换成文本格式-->
                <property name="jmeter.save.saveservice.output_format" value="xml"/>
                <!--是否记录错误信息,上面已经定义了${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-images这2个任务-->
        <target name="report" depends="xslt-report,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">
    
        <echo>生成接口自动化测试报告</echo>
            <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}/jtl/${jmeter.result.name}.jtl"
                out="${jmeter.result.dir}/html/${jmeter.result.name}.html"
                style="${jmeter.home}/extras/jmeter-results-detail-report${style_version}.xsl">
             <!-- style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl -->
                <param name="showData" expression="${show-data}"/>
                <param name="titleReport" expression="${report.title}"/>
                <param name="dateReport" expression="${report.datestamp}"/>
            </xslt>
        </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}/html/expand.png"/>
            <copy file="${jmeter.home}/extras/collapse.png" tofile="${jmeter.result.dir}/html/collapse.png"/>
        </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>
    <path id="lib_classpath">
     <fileset dir="${basedir}/">
         <include name="mail*.jar" />
         <include name="activation*.jar" />
        <include name="commons-email*.jar" />
         <include name="ant-contrib*.jar" />
     </fileset>
    </path>
        <!--仅仅打印前面定义的变量的值,检查是否如你所愿,在定义变量时做调试用,可以去掉-->
             <!--target name="mail">
            <for list="hanxm@thunisoft.com" param="tmp" >
                <sequential>
                  <echo>message @{tmp}</echo> 
                    <mail mailhost="smtp.thunisoft.com" mailport="25" ssl="false" subject="ant mail" messagemimetype="text/html" user="zhangjn" password="xxxx"  tolist="@{tmp}">
                        <from address="zhangjn@thunisoft.com" />
                        <fileset dir="${jmeter.result.html.dir}">
                            <include name="*.html" />
                           <include name="*.png" />
                          </fileset>
                       <message>支持多人同时发邮件!!&lt;br /&gt;&lt;br /&gt;</message>
                    </mail>
               </sequential>
             </for>
         </target-->
     
     <echo>jmeter.home = ${jmeter.home}</echo>
     
    </project>
    
  5. 修改jmeter.properties文件如下部分,都改成true,让报告输出的内容更详细

    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=false
    # 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=false
    jmeter.save.saveservice.responseHeaders=false
    jmeter.save.saveservice.requestHeaders=false
    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=false
    jmeter.save.saveservice.hostname=false
    jmeter.save.saveservice.thread_counts=true
    jmeter.save.saveservice.sample_count=false
    jmeter.save.saveservice.idle_time=true
    

    这俩个也ctrl F找出来改下

    jmeter.save.saveservice.output_format=xml (csv改为xml)

    server.rmi.ssl.disable=true (false改为true)

  6. 测试运行

    在以上步骤都完成后,进入script目录,直接运行ant命令

    [图片上传失败...(image-43ba7f-1658731744869)]

    提示BUILD SUCCESSFUL,即运行成功

    可下载html查看html形式的测试报告,也可以通过jtl在jmeter里用查看结果树查看

五、Jenkins安装与配置

1.Jenkins安装

jenkins有多种安装方式,我这里使用的是rpm安装

  1. 下载jenkins的rpm包

    下载地址:https://jenkins.io/zh/download/或者https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/

  2. 安装rpm包及配置

    • 安装:

      rpm -ivh jenkins-2.358-1.1.noarch.rpm
      
    • 配置

      vim /etc/sysconfig/jenkins 修改端口号,8080有可能被占用
      JENKINS_PORT=“8090”

      vim /usr/lib/systemd/system/jenkins.service同步修改里面的端口号

      vi /etc/init.d/jenkins 编辑Jenkins配置文件,添加jdk的Java路径

image-20220725111257597.png

重新配置的端口可能没有开放,这里需要开放端口

# 开启防火墙
systemctl start firewalld
# 开放指定端口
firewall-cmd --permanent --zone=public --add-port=8090/tcp
# 重启防火墙
Firewalls-cmd --reload
netstat -ntlp   //查看当前所有tcp端口·
netstat -ntulp |grep 8090   //查看所有8090端口使用情况·
  1. 启动

    # 重新加载配置
    systemctl daemon-reload 
    # 启动
    systemctl start jenkins
    # 查看jenkins状态
    systemctl status jenkins.service 
    

    安装好之后,打开浏览器,输入http://服务器IP:8090/,进入jenkins页面

image-20220725112608489.png

2.Jenkins配置

插件安装:

点击系统管理->插件管理,在可选插件依次安装Ant PluginHTML Publisher pluginGroovyEmail Extension

系统设置

  • 点击系统管理->系统设置,进入到这个页面,编辑全局属性

    添加环境变量ANT_HOMEJAVA_HOME

image-20220725132126340.png

全局工具配置

找到Ant,添加ant的名字,和ANT_HOME路径

[图片上传失败...(image-f9622f-1658731744869)]

3.项目配置

  1. 点击新建任务,选择构建一个自由风格的软件项目
1658731571341.jpg
  1. 添加构建操作
    1. 增加构建操作,选择Execute system Groovy script在在命令行输入

      System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "script-src 'unsafe-inline'")
      

      这个命令是用于处理测试报告样式无法加载问题的

    2. 再增加加构建操作,Invoke Ant选择ant版本,需要运行的节点填写你build.xml文件中的节点,BuildFile就选择脚本目录下面的build.xml的路径

image-20220725133745727.png
  1. 构建后操作
    • 增加构建后操作,选择Publish HTML reports

    • HTML directory to archive,填写包含存放路径

    • Index page[s],填写报告名字,如果有多个报告,可以填写*.html

image-20220725134343387.png
  1. 构建定时任务

    点击构建触发器->定时构建

image-20220725135358024.png

定时任务构建规则:

*     匹配范围内所有值
M-N   匹配M~N范围内所有值
M-N/X 或者 */X   在指定M~N范围内或整个有效区间内每隔X构建一次 
A,B,...,Z        匹配多个值
1658731901003.jpg

实例说明

每隔5分钟构建一次
H/5 * * * *

每两小时构建一次
H H/2 * * *

每天中午12点定时构建一次
H 12 * * *

每天下午18点定时构建一次
H 18 * * *

在每个小时的前半个小时内的每10分钟
H(0-29)/10 * * * *

每两小时45分钟,从上午9:45开始,每天下午3:45结束
45 9-16/2 * * 1-5

每两小时一次,每个工作日上午9点到下午5点(也许是上午10:38,下午12:38,下午2:38,下午4:38)
H H(9-16)/2 * * 1-5
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容