ant之jmeter的build.xml

2019-08-23  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读