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,来删除空目录。