美文网首页
ant之jmeter的build.xml

ant之jmeter的build.xml

作者: 好大一只鹏 | 来源:发表于2019-08-23 14:51 被阅读0次

    详解ant命令

    这个命令是ant run -f build.xml -D=${time} -DscriptName=${scriptName}
    

    build.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <project name="test_jmeter" default="all" basedir=".">
        <property environment="env"/>
        <!-- <tstamp> -->
            <!-- <format property="Ditetime" pattern="yyyyMMddHHmm" /> -->
        <!-- </tstamp> -->
        <!-- 需要改成自己本地的 Jmeter 目录-->
        <!-- property name="jmeter.home" value="${env.JMETER_HOME}" /-->
        <condition property="jmeter.home" value="${JMETER_HOME}" else="/opt/apache-jmeter-5.1.1">
            <isset property="JMETER_HOME" />
        </condition>
        <property name="lib.dir" value="${jmeter.home}\lib" />
    
        <!-- jmeter生成html格式的结果报告的路径-->
        <property name="jmeter.history.dir" value="${basedir}\TestHistory" />
        <property name="jmeter.result.Report.dir" value="${basedir}\LoadTestReport" />
            <!-- 表示设置的一些参数-->
        <condition property="time" value="${time}" else="123456789">
            <isset property="time" />
        </condition>
        
        <condition property="scriptName" value="${scriptName}" else="0809.jmx">
            <isset property="scriptName" />
        </condition>
    
        <target name="show-test-properties">
            <echo>JMETER_HOME               : ${jmeter.home}</echo>
            <echo>TEST_PATH             : ${test.plan.path}</echo>
            <echo>THREADGROUP_COUNT         : ${threadgroup.count}</echo>
            <echo>THREADGROUP_RAMPUP            : ${threadgroup.rampup}</echo>
            <echo>THREADGROUP_DURATION      : ${threadgroup.duration}</echo>
        </target>
    
        
        <!--表示run的这个命令需要进行的操作,这个xml声名了两个操作,一个是exec标签的执行shell脚本的操作,一个是删除的操作 -->
        <target name="run" depends="show-test-properties">
            <antcall target="delete" />
            <antcall target="JtlMerge" />
        </target>
    
        <!-- 操作1 这里声名了一个执行shell的操作-->
        <target name="JtlMerge">
            <echo>deploy clean axis service</echo>
            <exec executable="${basedir}/PerformanceTesting.sh" failonerror="true">
           <!--arg value标签表示需要传入的参数,在这里表示给shell脚本传入这俩个参数-->
                <arg value="${time}"/>
                <arg value="${scriptName}"/>
            </exec>
            <copy todir="${jmeter.history.dir}">
                <fileset dir="${jmeter.result.Report.dir}">
                    <include name="*${time}*.zip" />
                </fileset>
            </copy>
        </target>
        
        <target name ="delete">
            <delete includeEmptyDirs="true">
                <fileset dir="${jmeter.result.Report.dir}" includes="*.*"/>
            </delete>
        </target>
    </project>
    
    其中:
    <condition property="time" value="${time}" else="123456789">
            <isset property="time" />
        </condition>
        
        <condition property="scriptName" value="${scriptName}" else="0809.jmx">
            <isset property="scriptName" />
        </condition>
    表示声名参数 time 和scriptName 然后在下面引用使用
    
    1.jmeter 命令行执行命令传递参数(shell)
    当通过JMeter属性的方法调用变量时,需要修改变量的传入方式。普通的定义变量是:${threadsUsers}的形式。
    
    但是本方法是通过添加JMeter的属性,属性和参数是不同的,因此在调用中采用${__P(threadsUsers)}的形式进行调用。(注意是两个下划线)
    
    这样就可以完成通过命令行的参数,来达到更改脚本中变量的效果了!
    例如:此命令
    /opt/jmeter/apache-jmeter-3.2/bin/jmeter.sh -n -t $scriptName -Jprotocol=$protocol -JserverUrl=$serverUrl -JdurationTime=$durationTime -JconcurrentNumber=$concurrentNumber -l jtl/HLY-loadTest-$time.jtl -e -o LoadTestReport/HLY-loadTest-$time
    其中的参数我们是从build.xml中传递过来的。
    但是也要引用:
    time=$1
    scriptName=$2
    protocol=$3
    serverUrl=$4
    durationTime=$5
    concurrentNumber=$6
    
    2.windows批处理的命令参数传递和linux下稍微不同
    引用参数使用%参数name%
    jmeter -n -t %TestAPI%.jmx -JthreadsUsers=%threadsUsers% -JDuration=%Duration% -l result_output\%TestAPI%.jtl
    
    参考链接:https://www.cnblogs.com/kill0001000/p/8078686.html
             https://www.cnblogs.com/python-xiakaibi/p/10117425.html
    
    3.传递参数-J 和-G的区别
         1、格式:-J变量名=值  -G变量名=值
    
         2、相同之处:设置jmeter属性,例如线程数、循环次数、ramp up-time等
    
         3、不同之处:-J是设置本地jmeter属性;-G是设置server的jmeter属性(只有设置了远程机,开启了远程服务,才需要用到-G)
    

    jtl文件转HTML的报告以及非GUI模式下的命令

    ./jmeter -g baidu_requests_results.jtl -e -o /home/tester/apache-jmeter-3.0/resultReport
    ./jmeter.sh -n -t test.jmx -l test.jtl -e -o test
    -n :  非GUI模式启用命令行
    -t :指定脚本位置
    -l : 指定结果文件路径生成的jtl文件
    -j : 指定日志文件路径
    -g : 指定已存在的测试结果文件
    -e :测试结果后,生成测试报告
    -o : 指定测试报告的存放位置
    -o 指定的文件及文件夹,必须 不存在 ,否则执行会失败
    

    jmeter脚本的并发处理

    1.首先在build.xml文件里面声名一个操作。
    <target name="test">
            <parallel threadCount="10">      
             <antcall target="run_jmeter">
                <param name="Inputparam" value="Script0"/>
             </antcall>
             
             <antcall target="run_jmeter">
                <param name="Inputparam" value="Script1"/>
             </antcall>
             
             <antcall target="run_jmeter">
                <param name="Inputparam" value="Script2"/>
             </antcall>
    * parallel是Ant内置任务,用于并行执行嵌套任务, 但不保证线程安全,每个任务都将在其自己的线程中运行。
    * 这里声名了10个线程
    

    删除文件的配置

    <target name ="delete">
            <delete includeEmptyDirs="true">
                <fileset dir="${jmeter.result.html.dir}" includes="**/*"/>
                <fileset dir="${jmeter.result.jtl.dir}" includes="*Script*"/>
            </delete>
        </target>
    * delete是Ant内置任务,用于删除单个文件,一个指定目录的所有文件及其子目录,或者一到多个[资源集合](http://blog.csdn.net/asty9000/article/details/79131324)指定的文件。
    * fileset从字面上看是不包括目录的,但是在使用嵌套的文件集元素时可以通过将includeEmptyDirs属性设置为true,来删除空目录。
    

    并发后合并Jtl文件

    image.png

    相关文章

      网友评论

          本文标题:ant之jmeter的build.xml

          本文链接:https://www.haomeiwen.com/subject/yvxtectx.html