2019.11.27

今天开始搭建集成环境

需要ant+jenkins

先安装ant:

官网下载地址:https://ant.apache.org/bindownload.cgi

ant 获取java版本 ant javac 指定jdk版本_xml

 

 

 之后跳转到压缩包下载页面

ant 获取java版本 ant javac 指定jdk版本_xml_02

 

 

 

解压之后,在Windows中配置环境变量

ant 获取java版本 ant javac 指定jdk版本_html_03

 

ant 获取java版本 ant javac 指定jdk版本_ant 获取java版本_04

 

 

 

进入cmd命令行窗口,
执行如下命令:
ant -version,显示版本说明配置成功了

ant 获取java版本 ant javac 指定jdk版本_apache_05

 

没有jdk的需要安装jdk:

2.1、下载安装包(我使用的是jdk1.8版本,自行下载)

2.2、配置环境变量

      JAVA_HOME 为 C:\Program Files (x86)\Java\jdk1.8.0_171 (注意:java我是默认装的C盘)

  CLASSPATH为  .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;

  PATH为  %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

2.3、安装验证

在命令窗口中输入java -version 回车,能出现java版本则说明配置成功

ant 获取java版本 ant javac 指定jdk版本_apache_06

 

 

 接下来介绍jmeter与ant的整合:

Ant配置Jmeter:用ant构建命令来调动执行jmeter接口测试,并生成测试报告:

1)配置库文件

1.将 jmeter的extras目录中ant-jmeter-1.1.1.jar包拷贝至ant安装目录下的lib目录中

这一步操作使Ant运行时能够找到"org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"这个类,从而成功触发JMeter脚本

 2)配置jmeter.propertise文档

2.修改Jmeter的bin目录下jmeter.properties文件的配置:jmeter.save.saveservice.output_format=xml

这一步操作使Jmeter报告输出文件格式为xml

 

ant 获取java版本 ant javac 指定jdk版本_xml_07

大概在488行

 

 

 3)配置ant的编译文件build.xml

新建的txt文件,并将此文件改名为build.xml,修改文档里的内容

ant 获取java版本 ant javac 指定jdk版本_apache_08

 

 

ant 获取java版本 ant javac 指定jdk版本_xml_09

 

 

 

<?xml version="1.0" encoding="UTF-8"?>  
   
<project name="基线" default="run" basedir=".">  
       
    <tstamp>  
        <format property="time" pattern="yyyyMMddhhmm" />  
    </tstamp>  
    <property name="basedirectory" value="D:\SoftWare\apache-jmeter-5.1.1\extras" />  
    <!-- 需要改成自己本地的 Jmeter 目录-->   
    <property name="jmeter.home" value="D:\SoftWare\apache-jmeter-5.1.1" />  
    <!-- jmeter生成jtl格式的结果报告的路径-->  
    <property name="jmeter.result.jtl.dir" value="D:\SoftWare\apache-jmeter-5.1.1\bin\test\jmeter_report\jtl" />  
    <!-- jmeter生成html格式的结果报告的路径--> 
    <property name="jmeter.result.html.dir" value="D:\SoftWare\apache-jmeter-5.1.1\bin\test\jmeter_report\html" />  
    <!-- Name of test (without .jmx) --> 
    <property name="test" value="Test"/>  
    <!-- 生成的报告的前缀-->   
    <property name="ReportName" value="TestReport" />  
    <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${time}.jtl" />  
    <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${time}.html" />  
       
    <path id="xslt.classpath">  
        <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>  
        <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>  
    </path>  
       
    <target name="run">  
        <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="D:\SoftWare\apache-jmeter-5.1.1\bin\test" includes="基线.jmx" />  
        </jmeter>  
    </target>  
           
    <target name="report">  
        <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>  
        <xslt classpathref="xslt.classpath" 
              force="true" 
              in="${jmeter.result.jtlName}" 
              out="${jmeter.result.htmlName}" 
              style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">  
              <param name="dateReport" expression="${report.datestamp}"/>  
        </xslt>  
        <copy todir="${jmeter.result.html.dir}">  
            <fileset dir="${jmeter.home}/extras">  
                <include name="collapse.png" />  
                <include name="expand.png" />  
            </fileset>  
        </copy>  
    </target>  
       
</project>

 

用Ant执行jmeter脚本

ant 获取java版本 ant javac 指定jdk版本_html_10

 

 

ant 获取java版本 ant javac 指定jdk版本_ant 获取java版本_11

 

 

ant 获取java版本 ant javac 指定jdk版本_apache_12

 

 之后执行jmeter脚本,执行脚本是在ant的bin目录下执行:

ant 获取java版本 ant javac 指定jdk版本_apache_13

 

进入命令行界面, 输入命令ant敲回车,运行结束会有build successful的提示

ant 获取java版本 ant javac 指定jdk版本_apache_14

 

 

ant工具主要是根据build.xml文件来进行工作的,官方给出的默认文件在Jmeter的安装目录下extras文件夹中。

构建时,ant执行的是该目录下Test.jmx脚本,执行完毕后把输出的报告Test.jtl文件转化为Test.html文件

说明:

build.xml中style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl"指的是测试报告采用的样式。读者可以在jmeter安装目录下extras文件夹里看到前缀类似jmeter-results-report的文件,不妨挨个替换进style的值,执行完测试脚本后看一下输出的测试报告样式。

 


 

 2-15记录:

参考博客:

执行ant后出现的报错:

ant 获取java版本 ant javac 指定jdk版本_ant 获取java版本_15

 

 解决办法:

1.在配置java环境时一般都将D:/jdk6/bin目录直接加入环境变量就可以了,这对java编译环境已经可以满足要求。但ant要用到tools.jar,而该文件在D:/jdk6/lib目录下,ant怎么才能找到该文件呢。经过摸索,原来问题出在JAVA_HOME这个变量名字上(在这之前都是直接设置,不用JAVA_HOME)。右击我的电脑->高级->新建用户变量:名字输入JAVA_HOME,值输入D:/jdk6。其他配置都不用改变,问题即可解决。

2.将“C:/Program Files/Java/jdk1.6.0_16/lib”目录下的tools.jar文件拷贝到“C:/Program Files/Java/jre6/lib”目录下,重新运行命令ant,运行正常,问题解决。

这样就不会有找不到jar包的报错了

但是执行脚本的时候又报错了:

ant 获取java版本 ant javac 指定jdk版本_xml_16

解决办法:

说明build.xml文件中的内容可能不规范

这种异常是XML没有以<?xml version="1.0" encoding="UTF-8"?> 开头,也就是说第一个字符必须是<?xml......

需要 规范的XML格式:

前面不能空格。

 

2-16今天又换了一个build.xml

执行后不报前面的错了,又有新问题了:

报错信息:

ant 获取java版本 ant javac 指定jdk版本_html_17

 

用记事本打开xml文件,另存为 编码 选择 UTF-8,保存替换掉之前的文件,解决问题

继续报错:

ant 获取java版本 ant javac 指定jdk版本_ant 获取java版本_18

 

 

 

ant 获取java版本 ant javac 指定jdk版本_html_19

 

 

 

经过以上重重报错,终于成功了,看看成功的界面:

ant 获取java版本 ant javac 指定jdk版本_apache_14

 然后在创建html的目录查看报告:

 

ant 获取java版本 ant javac 指定jdk版本_xml_21

 

 

ant 获取java版本 ant javac 指定jdk版本_html_22

 靠谱参考文档:

https://www.jianshu.com/p/92a04e8eb29b

build.xml文件:

<?xml version="1.0" encoding="UTF-8"?>  
   
<project name="ant" default="run" basedir=".">  
       
    <tstamp>  
        <format property="time" pattern="yyyyMMddhhmm" />  
    </tstamp>  
    <property name="basedirectory" value="D:\SoftWare\apache-jmeter-5.1.1\extras" />  
    <!-- 需要改成自己本地的 Jmeter 目录-->   
    <property name="jmeter.home" value="D:\SoftWare\apache-jmeter-5.1.1" />  
    <!-- jmeter生成jtl格式的结果报告的路径-->  
    <property name="jmeter.result.jtl.dir" value="D:\SoftWare\apache-jmeter-5.1.1\bin\test\jmeter_report\jtl" />  
    <!-- jmeter生成html格式的结果报告的路径--> 
    <property name="jmeter.result.html.dir" value="D:\SoftWare\apache-jmeter-5.1.1\bin\test\jmeter_report\html" />  
    <!-- Name of test (without .jmx) --> 
    <property name="test" value="Test"/>  
    <!-- 生成的报告的前缀-->   
    <property name="ReportName" value="TestReport" />  
    <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${time}.jtl" />  
    <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${time}.html" />  
       
    <path id="xslt.classpath">  
        <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>  
        <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>  
    </path>  
       
    <target name="run">  
        <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="D:\SoftWare\apache-jmeter-5.1.1\bin\test" includes="ant.jmx" />  
        </jmeter>  
    </target>  
           
    <target name="report">  
        <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>  
        <xslt classpathref="xslt.classpath" 
              force="true" 
              in="${jmeter.result.jtlName}" 
              out="${jmeter.result.htmlName}" 
              style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">  
              <param name="dateReport" expression="${report.datestamp}"/>  
        </xslt>  
        <copy todir="${jmeter.result.html.dir}">  
            <fileset dir="${jmeter.home}/extras">  
                <include name="collapse.png" />  
                <include name="expand.png" />  
            </fileset>  
        </copy>  
    </target>  
       
</project>

 

由于上面的报告太简约,所以以下介绍详细的报告:

1.下载优化模板 jmeter-results-shanhe-me.xsl,拷贝到jmeter的extras目录中

下载地址:jmeter.results.shanhe.me.xsl

ant 获取java版本 ant javac 指定jdk版本_apache_23

 

 2.设置测试输出报告要输出的内容:同样在jmeter.properties中,设置需要输出的内容为true,并去掉前面的注释符号#,这里全部设置成true→保存

修改jmeter.properties:

ant 获取java版本 ant javac 指定jdk版本_xml_24

 

 

ant 获取java版本 ant javac 指定jdk版本_apache_25

 

 

3.设置build文件的报告模板为优化后的模板jmeter-results-shanhe-me.xsl

ant 获取java版本 ant javac 指定jdk版本_xml_26

 

4.再次用ant构建测试,查看优化后的测试报告

ant 获取java版本 ant javac 指定jdk版本_xml_27

 

在这里可以看到报告中的request和response两项没有数据。修改jmeter/bin目录下jmeter.properties文件如下部分,我这里都修改成true,这样执行完脚本后就会保存这些结果到.jtl文件里面:

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
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