最近工作需要在公司使用jmeter实现接口自动化测试,我就选取了jmeter+ant+jenkins,搭建环境过程如下
本地环境:win7 64位 云桌面系统
1,本地电脑上JDK安装,网上教程很多,这里不再记录
2,本地电脑上Apache jmeter下载与安装
地址:http://jmeter.apache.org/
这里我选择下载的是4.0版本的,下载到D盘
下载下来之后解压,这只jmeter的环境变量
变量名:JMETER_HOME
变量值:D:\apache-jmeter-4.0
变量名:CLASSPATH
变量值:
%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib/logkit-2.0.jar;
变量名:Path
变量值:D:\apache-ant\bin;
命令行中输入jmeter -v 出现以下便是配置好了
3,下载及配置ant
下载地址:http://ant.apache.org/
将下载的ant解压放到jmeter一块,我都是放在D盘根目录下
先将D:\apache-jmeter-4.0\extras\extra文件夹下的ant-jmeter-1.1.1.jar 包放到D:\apache-ant\lib 目录下
配置ant的环境变量
变量名:ANT_HOME
变量值:D:\apache-ant
变量名:CLASSPATH
变量值:D:\apache-ant\lib
变量名:Path
变量值:D:\apache-ant\bin
命令行输入ant -v
4,配置 jmeter+ant
在D:\apache-ant目录下新建一个JmeterTest的文件夹,这个文件夹我们以后可以将jmeter的 .jmx脚本放到这里
在D:\apache-ant\JmeterTest新建一个D:\apache-ant\JmeterTest\resultLog文件夹,这个文件我们可以存放报告
在D:\apache-ant\JmeterTest\resultLog文件下配置html文件夹放置生成的html格式的报告,配置一个jtl文件夹放置jtl格式的报告
在D:\apache-ant\JmeterTest新建一个build.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<project name="JmeterTest" default="all" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<!-- 需要改成自己本地的 Jmeter 目录-->
<property name="jmeter.home" value="D:\apache-jmeter-4.0" />
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="D:\apache-ant\JmeterTest\resultLog\jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="D:\apache-ant\JmeterTest\resultLog\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" />
<!-- 接收测试报告的邮箱 -->
<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="D:\apache-ant\JmeterTest" includes="*.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
<property name="jmeter.save.saveservice.output_format" value="xml"/>
<property name="jmeter.save.saveservice.assertion_results" value="all"/>
<property name="jmeter.save.saveservice.bytes" value="true"/>
<property name="file_format.testlog" value="${format}"/>
<property name="jmeter.save.saveservice.response_data.on_error" value="${funcMode}"/>
</jmeter>
</target>
<!--生成报告-->
<target name="report">
<xslt
in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlName}"
style="${jmeter.home}/extras/jmeter-results-detail-report_21.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.xml文件内容的生成报到的部分:它的作用就是把生成的.jtl数据文件转换为.html格式的报告
这里我们还要把 D:\apache-jmeter-4.0\bin目录下的jmeter.properties修改如下,去掉注释,这样设置生成的格式是CSV格式
测试一下,打开jmeter添加线程组,线程属性先不设置,添加HTTP请求,服务器名称或IP一栏中输入www.baidu.com
添加监听器-查看结果树,先运行一下,查看结果,我们设置的请求是成功的
保存到我们刚设置好的D:\apache-ant\JmeterTest文件夹下,命令行进入该文件夹下,输入ant,查看结果
build 成功,我们到D:\apache-ant\JmeterTest\resultLog\html目录下有html格式的报告,打开查看报告
min time 、max time 都是NaN
将D:\apache-jmeter-4.0\lib目录下的xalan-2.7.2.jar、serializer-2.7.2.jar两个包拷贝到D:\apache-ant\lib目录下,再次运行ant,查看结果
这下min time 、max time 显示内容了
5,配置jenkins+ant了
我在本地搭建好jmeter+ant之后便直接在远程的Jenkins上配置,没有在jenkins上配置jmeter与ant,结果报错
Building in workspace /root/.jenkins/workspace/jmeter
ERROR: Unable to find build script at D:\Test\apache-ant\JmeterTest\build.xml
[htmlpublisher] Archiving HTML reports...
[htmlpublisher] Archiving at PROJECT level D:\Test\apache-ant\JmeterTest\resultLog\html to /root/.jenkins/jobs/jmeter/htmlreports/Report
ERROR: Specified HTML directory 'D:\Test\apache-ant\JmeterTest\resultLog\html' does not exist.
Finished: FAILURE
后来才知道脚本是需要在远端的jenkins服务器上跑的,所以需要在jenkins的服务器上也需要配置,而且jenkins配置的内容都是服务器的地址文件,所以报错是必然的(当然一开始我是不知道的)