序:首先要说下为什么要用jinkens+ant+jmeter这一套来构建接口测试框架,首先是因为喜欢jmeter,那么问题来了,为什么喜欢jmeter呢,是因为jmeter写接口省心、操作简单可通过纯UI页面完成接口Case,更神奇的是,如果测web的话还可以借助badboy录制脚本导入jmeter。本着less is more的观念,对接口测试持续集成进行操作,于是有了搭建这一套环境的想法。后来百度后发现了jinkens+ant+jmeter果然行的通而且有挺多教程,就开始学习起来,但实行起来问题不少且不能直接行的通,于是总结了搭建过程中遇到的难点写了此篇文章,若对以后有此需求的同学能提供一丢丢的帮助,就很开心了啦。
*———— 割 割 割,割掉小丁丁 , 废话不多少,开始正文:—————–
设备Mac mini / macOS Serria 10.12.2
全部软件 /配置文件下载地址:https://pan.baidu.com/s/1c4BL8a
*前提:搭建过程依赖Java环境,确保已先配置,不会的具体百度吧~
1、搭建环境-jmeter
1-1、下载,打开http://jmeter.apache.org/,点击Download Releases->选择Binaries->apache-jmeter-*.zip进行下载,这里下载的是apache-jmeter-3.1.zip,下载后解压并重名文件夹为jmeter,然后移动到自定义目录,本地配置的是 /Users/longchen/work/jmeter(本文默认软件都是在/Users/longchen/work目录下,按照实际情况自定义即可)
1-2、插件安装,解压JMeterPlugins-Extras-1.3.0.zip、JMeterPlugins-Standard-1.3.0.zip,将解压的文件夹中对应的ext目录下的文件拷贝到/Users/longchen/work/jmeter/lib/ext目录下
1-3、配置环境变量,打开terminal输入open ~/.bash_profile
,新建JMETER_HOME=/Users/longchen/work/jmeter
,把$PATH:$JMETER_HOME/bin:
追加到PATH,保存后terminal 中输入source ~/.bash_profile
,立即生效新添加的配置。
1-4、检验是否配置成功,打开terminal 输入 jmeter -v
(jmeter和 -v 之间有空格),获得jmeter版本则表示配置成功。
1-5、准备测试用例*.jmx,保存成功移动到目录/Users/longchen/work/test
2、搭建环境-ant
2-1、下载,打开http://ant.apache.org/,点击Download->Binary Distributions->,选择一个版本进行下载,这里下载的是apache-ant-1.10.1-bin.zip,下载后解压并重名文件夹为ant,然后移动到自定义目录,这里定义的是 /Users/longchen/work/ant
2-2、配置环境变量,打开terminal输入open ~/.bash_profile
,建立ANT_HOME=/Users/longchen/work/ant
,添加$PATH:$ANT_HOME/bin:
到PATH配置,保存后terminal 中输入 source ~/.bash_profile
,立即生效新添加的配置。
2-3、检验是否配置成功,打开terminal 输入 ant -version
(ant和 -version之间有空格),获得ant版本则表示配置成功。
2-4、本地调试使用ant构建运行jmeter,并且生成jtl、Html报告
a). jmeter默认保存的是.csv格式的文件,所以我们先要设置一下/Users/longchen/work/jmeter/bin/jmeter.properties,修改jmeter.properties文件, jmeter.save.saveservice.output_format=xml;
b).进入jmeter的目录,把/Users/longchen/work/jmeter/extras/ant-jmeter-1.1.1.jar拷贝到/Users/longchen/work/ant/lib目录下
c). 打开terminal,切换到/Users/longchen/work/jmeter/extras目录,输入”ant -file build.xml -Dtest=Test
” . 查看\apache-jmeter-2.13\extras目录下是否出现Test.jtl、Test.html文件,若有,则构建成功。
注意:Test.jmx是默认存在的Sample脚本文件。若构建失败,请分析terminal中打印的日志消息,定位问题。
2-5、jmeter默认报告展示的信息比较少,如果出错了,不方便定位问题,通过查询得知.jtl格式转换为.html格式时,修改style可获得更详细的信息,这里用的是jmeter.results.shanhe.me.xsl。
a).先下载jmeter.results.shanhe.me.xsl,可从本文开始的url下载
b). 把下载的文件放到/Users/longchen/work/jmeter/extras/目录下
c).修改jmeter.properties所需参数为true
> 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
2-6、编辑ant所需的build.xml文件,保存后移动到/Users/longchen/work/test,目录根据实际情况修改即可
<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="run" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<property environment="env"/>
<property name="ReportName" value="接口测试详情报告" />
<property name="ReportName1" value="接口测试总览" />
<!-- 需要改成本地的 Jmeter 目录-->
<property name="jmeter.home" value="/Users/longchen/work/jmeter" />
<!-- jmeter生成jtl、html格式的结果报告的路径,需要修改成自己的路径-->
<property name="jmeter.result.jtl.dir" value="/Users/longchen/work/test/report/${env.BUILD_ID}/jtl" />
<property name="jmeter.result.html.dir" value="/Users/longchen/work/test/report/${env.BUILD_ID}/html" />
<!-- 生成的报告的前缀-->
<property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}[#${env.BUILD_ID}]${time}.jtl" />
<property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}[#${env.BUILD_ID}]${time}.html" />
<property name="jmeter.result.htmlName.summary" value="${jmeter.result.html.dir}/${ReportName1}[#${env.BUILD_ID}]${time}.html" />
<target name="run">
<echo message="start..."/>
<antcall target="clean" />
<antcall target="test" />
<antcall target="report" />
</target>
<target name="clean">
<!-- 记录buildId-->
<mkdir dir="/Users/longchen/work/jmeter/test/temp/temp_id/${env.BUILD_ID}" />
<!-- 需要改成本地的接口测试结果-输出目录-->
<mkdir dir="/Users/longchen/work/test/report/${env.BUILD_ID}" />
<mkdir dir="/Users/longchen/work/test/report/${env.BUILD_ID}/jtl" />
<mkdir dir="/Users/longchen/work/test/report/${env.BUILD_ID}/html" />
</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="/Users/longchen/work/test/" includes="*.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>
</target>
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan-2.7.2.jar"/>
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
</path>
<target name="report">
<xslt in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlName}"
style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl" />
<xslt
classpathref="xslt.classpath"
force="true"
in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlName.summary}"
style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" >
<param name="showData" expression="${show-data}"/>
<param name="titleReport" expression="${ReportName1}[#${env.BUILD_ID}]${time}.html"/>
<param name="dateReport" expression="${time}"/>
</xslt>
<!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
</project>
3、搭建环境-Tomcat
3-1、下载,打开http://tomcat.apache.org/,下载tomcat,这里选择的8.5.11版本,下载后解压并重名文件夹为Tomcat,然后移动到目录:/Library/Tomcat (Tomcat个人习惯放置到/Library目录,此处没有放置到work目录,哈哈)
3-2、启动Tomcat,打开terminal输入:sh /Library/Tomcat/bin/startup.sh,输入http://localhost:8080/,展示Tomcat主页则表示Tomcat搭建成功
4、搭建环境-Jinkens
4-1、下载,打开https://jenkins.io/index.html,点击Download Jenkins->选择*.war进行下载,这里下载的是LTS release版本2.32.2.war
4-2、下载成功后把jenkins.war文件(*.war是tomcat可识别的工程)移动到目录:/Library/Tomcat/webapps/Jenkins.war
4-3、关闭Tomcat并重新启动,依次输入sh /Library/Tomcat/bin/shutdown.sh、
sh /Library/Tomcat/bin/startup.sh,输入http://localhost:8080/jenkins/,展示进入Jenkins页面则表示Jinkens搭建成功
注意 : jenkins配置成功后,jenkins.war文件不能立即删除,可以停止Tomcat服务,然后删除jenkins.war后再次启动即可,如果直接删除会把生成的/Library/Tomcat/webapps/Jenkins文件夹也一起删除的
4-4、配置Jenkins,启动后按照安装引导,设置用户名和密码,选择安装插件,可以默认安装即可,也可以都不选择(选择none),然后等引导完成后进入系统设置->管理插件
,增加实际需要的插件。本文安装引导时选择了none,设置引导完成后单独安装的。需要安装的插件包含:Ant Plugin、Email Extension Plugin、Performance plugin
4-5、进入系统设置->Global Tool Configuration
,配置JDK和ant,如下图
4-6、进入系统管理->系统设置
,按照实际需求配置邮箱,此处有一定点要特别注意,系统管理员地址处要填写用户名,否则不能发送成功。
通过发送测试邮件测试配置调试下,可以发送并成功收到即可。但默认邮件通知功能不多,建议用Extended E-mail Notification插件,配置信息同默认邮件通知即可。
5、环境基本准备Okay,开始正式进行~
5-1、查看/Users/longchen/work/test,确保准备好所有文件:
- build.xml是已经准备好的
- mvfile.sh是自定义的shell脚本,为优化测试报告准备的(可从本文开始的url下载,另外脚本中路径需要适当修改哈)
- 新创建report文件夹
- testbaidu.jmx是已经准备好的测试用例
- temp文件夹是shell脚本运行过后生成的,可忽略
5-2、进入jinkens,新建一个项目,如下图,填写名称后,选择构建一个自由风格的软件项目,进入下一步
项目名称选择->高级设置->使用自定义的工作空间,此处填写本地设置的目录
5-3、构建触发器
5-4、增加构建步骤->invoke ant
5-5、增加构建步骤->Excute shell,执行自定义的shell脚本
5-6、增加构建后操作步骤->archive the artifacts,用户存档的文件填写**/temp/temp_report/html/*.html
5-7、增加构建后操作步骤->Publish performance test result report,选择Add a new report->Jmeter,进入下一步,
Reprot files填写**/temp/temp_report/jtl/*.jtl
5-8、增加构建后操作步骤->Editable Email notification,选择Advance Settings, 编辑Triggers
5-9,此时所有工作完成了,进入项目,点击立即构建查看结果吧
查看接口测试总览:
查看详细报告:
————— done —————
后记:
初始搭建时,shell脚本中通过计算/Users/longchen/work/test/report目录中最大值来确定最新一次报告测试结果,这个结果再传递jinkens发送邮件,但是这样存在一个性能问题,若测试结果太多时有性能问题。
最新优化获取报告方式 :
build.xml每次创建一个buildId目录,然后shell脚本获取buildId并复制/Users/longchen/work/test/report/buildId/下的html和jtl到指定文件夹,最后再传递jinkens发送邮件,这样可以避免性能问题,哈哈哈。