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版本进行下载
    在这里插入图片描述

  2. 下载后的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
    
  3. 将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
    
  4. 重新加载环境变量

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

    java -version
    

在这里插入图片描述

二、安装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
    

    在这里插入图片描述

三、安装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,成功会出现如下信息

    在这里插入图片描述

四、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命令

    img

​ 提示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路径

      在这里插入图片描述

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

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

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

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

    在这里插入图片描述

2.Jenkins配置

插件安装:

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

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

    添加环境变量ANT_HOMEJAVA_HOME

    在这里插入图片描述

全局工具配置

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

在这里插入图片描述

3.项目配置

  1. 点击新建任务,选择构建一个自由风格的软件项目

    在这里插入图片描述

  2. 添加构建操作
    1. 增加构建操作,选择Execute system Groovy script在在命令行输入

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

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

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

      在这里插入图片描述

  3. 构建后操作
    • 增加构建后操作,选择Publish HTML reports

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

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

      在这里插入图片描述

  4. 构建定时任务

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

    在这里插入图片描述

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

字段含义

实例说明
每隔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
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大梦zy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值