Jenkins+ant+jmeter 搭建接口自动化持续集成环境 框架——完整实用版
利用Jenkins+ant+jmeter实现日常工作接口自动化持续集成。所有环境依赖JDK,所以第一步我们必须先安装配置好JDK环境。JDK下载安装配置教程然后我们开始正式搭建:1.搭建jmeter环境:我本地上已经搭建好,如果不会的可以自行百度一下jmeter的安装教程。有很多,讲解的也很清晰明了。jmeter的下载地址2.搭建ant环境:Ant和maven类似,maven是执行...
利用Jenkins+ant+jmeter实现日常工作接口自动化持续集成。
所有环境依赖JDK,所以第一步我们必须先安装配置好JDK环境。JDK下载安装配置教程
然后我们开始正式搭建:
1.搭建jmeter环境:我本地上已经搭建好,如果不会的可以自行百度一下jmeter的安装教程。有很多,讲解的也很清晰明了。jmeter的下载地址
2.搭建ant环境:Ant和maven类似,maven是执行pom文件,ant是执行build文件。点击下载ant
解压
3.配置ant环境变量:参考百度,这里环境不是重点,不细解,进入命令行模式输入ant -version能够显示版本号说明配置成功
4.搭建Jenkins环境,点击下载jenkins.war
注:这里需要注意一下,Jenkins第一可以依赖容器Tomcat,也可以依赖自带的 Jetty 服务器独立运行。第一种方法:如果您电脑上有配置好的Tomcat环境,将下载的jenkins.war拷贝到apache-tomcat-8.0.28\的webapps目录下,然后进入到Tomcat的bin目录下,点击startup.bat启动Tomcat。在浏览器中输入http://127.0.0.1:8080/jenkins访问。如果端口号被占用,可以通过修改Tomcat的端口号来实现。这里不细讲,有不懂的可以留言或者添加QQ群、微信。第二种方法:我电脑上有Tomcat,但是我这里为了教大家最简单的方法,我说一下第二种。直接使用命令启动。Win+R运行进入cmd模式,cd进入到jenkins.war目录,输入命令java -jar jenkins.war --httpPort=8888,8888可以改成一个没有被占用的你想用的端口号。然后在浏览器中输入http://127.0.0.1:8888进行访问。
5.使用jmeter创建一个测试脚本test01.jmx,具体步骤如下:
①进入jmeter安装目录,例如D:\JMeter\apache-jmeter-5.1.1\下的bin目录下,然后找到jmeter.bat启动jmeter,然后添加线程用户-线程组
②右键线程组,添加取样器-http请求
③http中我们随便写点,比如就写请求百度
④添加察看结果树
⑤点击运行,这时候提示我们是否保存,我们在jmeter安装目录D:\JMeter\apache-jmeter-5.1.1\下创建文件夹temp_test
然后选择将脚本存放到创建的temp_test目录下。
6.将jmeter安装路径下的D:\JMeter\apache-jmeter-5.1.1\extras的ant-jmeter-1.1.1.jar文件拷贝到ant安装目录D:\JD.com\JmeterScript\apache-ant-1.9.14-bin\apache-ant-1.9.14\下的lib下。这样Ant运行时才能找到"org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"这个类,从而成功触发JMeter脚本
7.在temp_test下创建文件夹report
8.将D:\JMeter\apache-jmeter-5.1.1\extras下的build.xml文件拷贝到temp_test中,将build.xml中的内容全部删除后,修改为以下内容(运行.jmx脚本,生成.jtl文件放入C:\Users\songlihui\.jenkins\workspace\xtl_jcyf_接口自动化回归测试/report/jtl文件中,ant在将相应的文件转换为对应的.html文件放入C:\Users\songlihui\.jenkins\workspace\xtl_jcyf_接口自动化回归测试/report/html中)。
<?xml version="1.0" encoding="UTF-8"?>
<project name="jenkins_ant_jmeter20191028" basedir=".">
<tstamp>
<format property="date" pattern="yyyy/MM/dd kk:mm:ss"/>
<!--kk是24小时制,KK是12小时制-->
</tstamp>
<!-- 需要改成自己本地的 Jmeter 目录-->
<property name="jmeter.home" value="D:\JMeter\apache-jmeter-5.1.1" />
<property name="report.title" value="xtl_interface_autoTest"/>
<!-- 需要改成自己的----jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="C:\Users\songlihui\.jenkins\workspace\xtl_jcyf_接口自动化回归测试/report/jtl" />
<!-- 需要改成自己的----jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="C:\Users\songlihui\.jenkins\workspace\xtl_jcyf_接口自动化回归测试/report/html" />
<!-- 生成的报告的前缀-->
<!-- 生成的报告的名称-->
<property name="ReportName" value="DetailsReport" />
<property name="ReportName2" value="SummaryReport" />
<property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}.jtl" />
<property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}.html" />
<property name="jmeter.result.htmlName2" value="${jmeter.result.html.dir}/${ReportName2}.html" />
<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:\JMeter\apache-jmeter-5.1.1\testcases" includes="*.jmx" />
<!--声明生成的jtl文件是xml格式,否则会报错 -->
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>
</target>
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
</path>
<target name="report">
<xslt
classpathref="xslt.classpath"
force="true"
in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlName}"
style="${jmeter.home}/extras/jmeter-results-report_21.xsl">
<param name="titleReport" expression="${report.title}"/>
<param name="dateReport" expression="${date}"/>
</xslt>
<xslt
classpathref="xslt.classpath"
force="true"
in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlName2}"
style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
<param name="titleReport" expression="${report.title}"/>
<param name="dateReport" expression="${date}"/>
</xslt>
<!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
</project>
将里面注释需要改的地方,改成自己本地真实的路径。 这样我们的环境就全部准备好啦~
最后,我们开始配置我们的Jenkins项目环境
1.cd进入到jenkins.war目录,输入命令java -jar jenkins.war --httpPort=8888。端口号8888可以任意改成你想要的,只要是未被其他进程占用的。不过这种启动方式有一个弊端,就是每次启动都需要指定端口号,我们可以通过修改Jenkins安装目录jenkins\jenkins.xml文件修改第41行httpPort为8082(你想要的,未被其他进程占用的),此时如果直接使用命令java -jar jenkins.war,会发现启动的jenkins服务还是用的默认端口8080,并未按修改的jenkins.xml中的端口号进行启动。正确的启动方式是:net start jenkins。。。初次访问http://localhost:8888/,如果发现一直卡在启动界面,提示:Jenkins正在启动,请稍后...
你可以按 Ctrl + C 强制结束启动,然后再次执行上面的命令,发现就会继续启动了,或者可以修改一下配置文件,因为你所在网络可能被限制了,如下:
进入 jenkins 的工作目录,也可以自定义 jenkins 的工作目录,设置 JENKINS_HOME 环境变量,启动 jenkins.war 后将被解压到 JENKINS_HOME 目录下,同时所有 jenkins 的 plugins 和 配置文件等也将被写入到 JENKINS_HOME 所设置的目录下。
打开 hudson.model.UpdateCenter.xml,将 http://updates.jenkins-ci.org/update-center.json 替换成 http://mirror.xmission.com/jenkins/updates/update-center.json,还是不行的话找到 updates 目录下的 default.json 把里面所有的谷歌地址改成百度的,即将 http://www.google.com/ 替换为 http://www.baidu.com/。
待出现如下界面。然后我们进入红色的地址,使用txt文本打开该文件
点击下一步继续,进入插件安装,默认继续到下面页面,开始安装
安装完毕,进入初始化用户名密码页
然后使用注册的用户名密码登录
给任务起一个名字,点击确定
其他的保持默认就好,我们在构建中选择invoke ant,然后选择高级
查看我们的build.xml文件, 找到target name,发现我们的target名叫“run”,将这个填写到targets里
点击保存,返回到如下页面,这时候我们点击左侧列表中的build now
然后我们返回到build.xml文件,查看是不是哪里写的不对,然后发现需要改的地方没有改成自己的。
修改为我们自己创建的路径:
然后最后别忘记保存,我们保存我们最新的对build.xml文件的更改,然后继续返回Jenkins中点击,build now,发现又构建失败了
然后我们点击#2,进去后选择控制台输出,查看一下日志吧
发现哦,原来是build.xml文件中出现了--,
继续打开build.xml文件
去掉后的
然后保存我们对build.xml文件的修改,然后返回Jenkins,我们继续build now
出现问题不要怕,一步一步的找,这次我们发现成功了,变为蓝色了
完事了吗???显然还没有,别忘记我们当时在我们的temp_test下创建了一个report文件夹,这个是做什么用??当然是生成我们的测试报告咯~~,然后我们进入D:\JMeter\apache-jmeter-5.1.1\temp_test\report下的html中赶紧看一下吧。
扩展:
1.生成的报告中展示细节,如请求的URL、参数、header、返回的header、body等等。例如下图
那我们需要怎么做呢?细心的童鞋可能发现了,在我们的build.xml文件中,我们设置生成了两个报告,一个是SummaryReport,另一个是DetailsReport。summary肯定是一个整体的报告情况,而detail不用说,是更详细的详情。这时候我们就需要用到一个文件jmeter.results.shanhe.me.xsl。在jmeter默认下载安装后,这个文件是没有的。需要单独下载,有好多地址的下载都是受限的,这里给大家找一个可以直接下载的博客地址:jmeter.results.shanhe.me.xsl。下载完成后,把这个文件放到jmeter安装目录下的extra下:
修改我们的build.xml文件
然后重新build now构建一下,去生成报告的地方打开DetailsReport.html,可以看到现在的报告中显示了非常详细的详情。
2.我们在查看报告的时候,发现里面的数据是累加的。比如我们执行了1次构建,生成了报告。又执行了一次,打开报告是第一次+第二次构建执行的脚本情况总和。如果我们只需要打开将最新的执行情况展现,需要怎么做呢?继续打开我们的build.xml文件
需要修改的地方我都框出来了
中间部分代码有点多,我贴到下面。
<!--项目初始化设置-->
<target name="init" description="init" >
<!--删除jtl文件夹下生成的所有文件及文件夹包括空目录,但不删除根目录-->
<delete verbose="true" includeemptydirs="true" >
<fileset dir="${jmeter.result.jtl.dir}" >
<include name="**/*" />
</fileset>
</delete>
<!--删除html文件夹下生成的所有文件及文件夹包括空目录,但不删除根目录-->
<delete>
<fileset dir="${jmeter.result.html.dir}">
<include name="**/*"/>
</fileset>
</delete>
<!--<delete dir="${classes.home}"/>
<mkdir dir="${classes.home}"/>-->
</target>
修改好后,保存build.xml,继续构建。这时候在生成报告前,会先将jtl、html两个文件夹下的内容删除,从而每次生成的报告文件中只有最新一次构建,而不是累加叠加。
3.修改发送报告的样式
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
offset="0">
<table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
本邮件由系统自动发出,无需回复!<br/>
各位同事,大家好,以下为${PROJECT_NAME }项目构建信息</br>
<td><font color="#CC0000">构建结果 - ${BUILD_STATUS}</font></td>
</tr>
<tr>
<td><br />
<b><font color="#0B610B">构建信息</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>项目名称 : ${PROJECT_NAME}</li>
<li>构建编号 : 第${BUILD_NUMBER}次构建</li>
<li>触发原因: ${CAUSE}</li>
<li>构建状态: ${BUILD_STATUS}</li>
<li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>构建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
<li>项目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
</ul>
<h4><font color="#0B610B">失败用例</font></h4>
<hr size="2" width="100%" />
$FAILED_TESTS<br/>
<h4><font color="#0B610B">最近提交(#$SVN_REVISION)</font></h4>
<hr size="2" width="100%" />
<ul>
${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="<li>%d [%a] %m</li>"}
</ul>
详细提交: <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a><br/>
</td>
</tr>
</table>
</body>
</html>
4.这时候前几次的构建报告我们就看不到了,如果还希望看到前几次的怎么办呢?
5.所有的工作做完了,我们想每次测试完成,生成报告,并通过邮箱将测试报告发送给领导和同事们?
后续内容会在空余的时间一点点补充,如果感觉博文的分享能给大家带来提升或者难题的解答,欢迎点赞评论。欢迎添加我的微信,相互学习探讨~1305618688,qq交流群:849102042
更多推荐
所有评论(0)