• ant jmeter jenkins 实现自动化测试


    编者按:

    1. 本文核心的关键是ant去调用build.xml 执行自动化测试任务。
    2. bulid.xml 文件的内容按照注释修改为你自己服务器相关信息。
    3. 配置完成后一定要手动在服务器上执行一次,确保你配置的没有问题,在去配置jenkins服务。
    4. 我曾经就因为没有手动执行一下,导致卡了很长时间。

    ant 安装及配置

    ant有两个分支版本:1.9x支持的是java5,1.10.x支持的是java8的版本。
    这里我们选择apache-ant-1.10.1-bin.tar.gz的版本。

    cd /usr/local/src
    wget http://mirrors.tuna.tsinghua.edu.cn/apache//ant/binaries/apache-ant-1.10.1-bin.tar.gz
    tar -zxf apache-ant-1.10.1-bin.tar.gz 
    mv apache-ant-1.10.1 /data/app/
    ln -s /data/app/apache-ant-1.10.1 /data/app/ant
    ### 增加环境变量
    cat >>/etc/bashrc<<EOF
    export ANT_HOME=/data/app/ant
    export PATH=$ANT_HOME/bin/:$PATH
    EOF
    source /etc/bashrc
    

    检查

    ant -v 
    Apache Ant(TM) version 1.10.1 compiled on February 2 2017
    Trying the default build file: build.xml
    Buildfile: build.xml does not exist!
    Build failed
    

    安装jmeter

    cd /usr/local/src
    wget http://mirror.bit.edu.cn/apache//jmeter/binaries/apache-jmeter-3.3.tgz
    tar -zxf apache-jmeter-3.3.tgz
    mv apache-jmeter-3.3 /data/app/
    ln -s /data/app/apache-jmeter-3.3 /data/app/jmeter
    ### 配置环境变量
    cat >> /etc/bashrc<<EOF
    export JMETER_HOME=/data/app/jmeter
    export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/logkit-2.0.jar:$CLASSPATH
    export PATH=$JMETER_HOME/bin/:$PATH
    EOF
    

    开始使用前的优化(必须配置)

    • Ant+Jmeter生成的html报告,Min Time 和 Max Time 出现 NaN。
    cp /data/app/jmeter/lib/serializer-2.7.2.jar /data/app/ant/lib/
    cp /data/app/jmeter/lib/xalan-2.7.2.jar  /data/app/ant/lib/
    
    • 运行过程中会报缺少ant-jmater的错,需要提前拷贝包过去。报错如下:
    taskdef class org.programmerplanet.ant.taskdefs.jmeter.JMeterTask cannot be found
     using the classloader AntClassLoader[]
    

    解决办法:

    cp /data/app/jmeter/extras/ant-jmeter-1.1.1.jar /data/app/ant/lib/
    
    • jmeter 使用jenkins运行时缺少一个jmeter-log.log的日志文件,日志文件配置在/data/app/jmeter/bin/log4j2.xml

    解决办法:

    touch /data/app/jmeter/bin/jmeter.log
    
    • 因为要实现jenkins调用ant来自动化生成测试报告,所以ant目录及jmeter目录需要赋值为jenkins属组。
    chown -R jenkins.jenkins /data/app/ant/*
    chown -R jenkins.jenkins /data/app/jmeter/*
    

    编写build.xml文件

    cd /data/app/jmeter/build/
    vim build.xml
    
    <?xml version="1.0" encoding="utf-8"?>
    <project name="Ant-Jmeter-Test" default="all" basedir=".">
        <tstamp>
            <format property="time" pattern="yyyyMMddhhmm" />
        </tstamp>
        <!-- 需要改成自己本地的 Jmeter 目录-->
        <property name="jmeter.home" value="/data/app/jmeter" />
        <!-- jmeter生成jtl格式的结果报告的路径-->
        <property name="jmeter.result.jtl.dir" value="/data/app/jmeter/report/jtl" />
        <!-- jmeter生成html格式的结果报告的路径-->
        <property name="jmeter.result.html.dir" value="/data/app/jmeter/report/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="mail_to" value="niuhengbo@sina.cn" />
        <!-- 电脑地址 -->
        <property name="ComputerName" value="test.niu" />
        <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="/data/db/jenkins/workspace/jm" includes="*.jmx" />
            </jmeter>
        </target>
        <target name="report">
            <!-- <xslt in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" /> -->
            <xslt in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl" />
            <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->
            <copy todir="${jmeter.result.html.dir}">
                <fileset dir="${jmeter.home}/extras">
                    <include name="collapse.png" />
                    <include name="expand.png" />
                </fileset>
            </copy>
        </target>
        <!-- 发送邮件 -->
    </project>
    
    • 上面的build文件,根据自己服务的安装目录修改相应的配置即可(需要修改的地方)。
    • jmeter-results-detail-report_21.xsl 是默认的报告模板由于信息不全,推荐更换成jmeter.results.shanhe.me.xsl下载地址在文章最后。

    jmeter 配置优化

    • jmeter配置文件位置:/data/app/jmeter/bin/jmeter.properties
    • jmeter.save.saveservice.output_format=csv: 将csv更改为xml。

    在文件的末尾增加如何优化配置

    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
    # Report more error info message
    jmeter.save.saveservice.assertion_results_failure_message=true
    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
    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
    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  
    

    检查配置是否成功

    cd /data/app/jmeter/build/
    ant
    
    Buildfile: /data/app/apache-jmeter-3.3/build/build.xml
    
    all:
    
    test:
       [jmeter] Executing test plan: /data/db/jenkins/workspace/jm/test.jmx ==> /data/app/jmeter/report/jtl/TestReport201801250234.jtl
       [jmeter] Creating summariser <summary>
       [jmeter] Created the tree successfully using /data/db/jenkins/workspace/jm/test.jmx
       [jmeter] Starting the test @ Thu Jan 25 14:34:18 CST 2018 (1516862058701)
       [jmeter] Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445
       [jmeter] summary =      4 in 00:00:01 =    6.9/s Avg:    96 Min:    28 Max:   239 Err:     0 (0.00%)
       [jmeter] Tidying up ...    @ Thu Jan 25 14:34:20 CST 2018 (1516862060127)
       [jmeter] ... end of run
    
    report:
         [xslt] Processing /data/app/jmeter/report/jtl/TestReport201801250234.jtl to /data/app/jmeter/report/html/TestReport201801250234.html
         [xslt] Loading stylesheet /data/app/jmeter/extras/jmeter.results.shanhe.me.xsl
    
    BUILD SUCCESSFUL
    Total time: 4 seconds
    

    配置jenkins

    jenkins的安装我就不说了,可以参考以前我写的文章。

    第一步:配置ant路径位置
    位置:全局配置 --> Global Tool Configuration
    ant安装

    java环境安装

    创建一个自由风格的软件项目
    配置自由风格

    将jmeter的测试文件放置在git仓库中。
    Git仓库配置

    增加一个ant构建项目:
    增加ant构建

    配置ant

    执行构建查看输出结果
    执行结果

    参考文档

    jmeter.results.shanhe.me.xsl-下载地址
    接口自动化-步骤、遇到的问题及解决方法
    jmeter学习笔记(一)-jmeter html测试报告

    报错汇总

    taskdef class org.programmerplanet.ant.taskdefs.jmeter.JMeterTask cannot be found
     using the classloader AntClassLoader[]
    

    解决办法

    cp /data/app/jmeter/extras/ant-jmeter-1.1.1.jar /data/app/ant/lib/
    
  • 相关阅读:
    yii2.0缓存的使用
    yii2.0框架where条件的使用
    yii2.0自带验证码使用
    spring中MessageSource的配置使用方法1[转]
    DOM、JDOM、DOM4J的区别
    探秘Java虚拟机——内存管理与垃圾回收
    MySQL开发规范和原则大全
    Java Classloader机制解析
    Junit之测试顺序---FixMethodOrder
    MySQL的btree索引和hash索引的区别
  • 原文地址:https://www.cnblogs.com/biglittleant/p/8426785.html
Copyright © 2020-2023  润新知