JMeter+Ant+SVN+Jenkins自动化持续集成

JMeter 接口测试或者性能测试中,经常要用到 Jenkins 来帮助我们做一些持续集成的工作。这里我们来学习一个简
单的 JMeter+Ant+Jenkins 自动化持续集成测试方案。
一、JMeter 编写和上传测试脚本
1.1 编写测试脚本
在本地 JMeter 中创建线程组,线程组下添加几个调试用的 java 请求和一个 HTTP 请求,其中 HTTP 请求访问的接
口系统服务没有开启,意在发送失败的请求,最后创建一个监听器--查看结果树方便后面查看运行结果。
笔者这里把测试脚本放在了 JMeter 根目录下的 scripts 目录下。


image.png

下面来运行一次看看结果吧。


image.png

从上面的结果可以看出4个请求中有3个是运行成功的,其中一个运行失败。
1.2 SVN 管理测试脚本
代码调试完成后把脚本上传到 SVN ,方便后期获取构建项目。


image.png

笔者把 JMeter 整个目录上传到了 SVN ,路径如下: https://szsvr101:9443/svn/test_yunpan/jmeter_pro ,这
个路径在后期 Jenkins 配置 SVN 步骤中用到。
本地操作到此暂且告一段落,后会有期。
二、安装和配置 Ant
在公司里, Jenkins 一般都是部署在服务器上,接下来在服务器上配置一下 Jenkins 。
2.1 安装 Ant安装 Ant 这里选择下载二进制安装包的方式安装,官网下载安装包地址:https://ant.apache.org/bindownload.cg
i。
下载完成后解压到服务器即可,笔者解压到服务器 C 盘根目录下(偷偷告诉你,这个路径后面的配置步骤用到)。

image.png

2.2 配置 Ant

  1. 安装完成后对 Ant 配置环境变量。


    image.png
  2. 接着,创建一个 Ant 构建文件 build.xml,新建一个 txt 文本文件,然后把文件后缀改成 .xml 就是 XML 文件
    了。构建文件可以放在任何的位置 ,笔者这里把它放在 Ant 根目录下新建的 ant_properties 目录下(这个路
    径后面配置构建步骤用到)。


    image.png
  1. 另外,创建一个 jtl 目录存放运行后生成的 .jtl 结果文件,还要创建一个 html 目录存放 html 格式的报告文
    件。笔者这里在 Ant 根目录下创建一个 reports 目录,然后在该目录下创建 jtl 目录和 html 目录。


    image.png
  1. 接下来用 Notepad++ 打开 build.xml 文件,并且对创建的 jtl 目录和 html 目录进行设置。


    image.png

源文件数据我也贴一下吧。

<?xml version="1.0" encoding="utf-8"?>
<project name="JmeterTest" default="all" basedir=".">
<tstamp>
<format property="time" pattern="yyyy-MM-dd_HH" />
</tstamp>
<!-- 需要改成自己本地的 Jmeter 目录-->
<property name="jmeter.home" value="C:\jenkins\workspace\test_pro" />
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="C:\apache-ant-1.9.4\reports\jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="C:\apache-ant-1.9.4\reports\html" />
<!-- 生成的报告的前缀 -->
<property name="ReportName" value="发布会系统接口自动化测试报告" />
<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="C:\jenkins\workspace\test_pro\scripts" includes="*.jmx" />
</jmeter>
</target>
<target name="report">
<xslt in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}"
style="${jmeter.home}/extras/jmeter-results-report_21.xsl" />
<!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以需要手动拷贝 -->
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="${ReportName}${time}.html" />
</fileset>
</copy>
</target>
</project>

三、安装和配置 Jenkins
3.1 安装 Jenkins
笔者这里安装的 Jenkins 版本为 V2.121.3,不同版本之间系统页面可能存在差异但不影响使用,安装包下载地址:
链接:https://pan.baidu.com/s/1Hf8fbeouCwNMjN6rZtvxvA 密码:logk 。也可以到官网下载,官网下载地址:
https://jenkins.io/download/
安装时注意安装目录不要带空格,要不后面构建项目步骤会出问题,不信你可以试试。
安装完成后在浏览器上输入:http://localhost:8080/ 回车,如果提示解锁 Jenkins 就按照页面提示操作即可。

image.png

接下来会跳到推荐安装插件的页面,到后期操作过程中需要哪些插件我们再有针对性去安装,这里点击 选择插件来安装 。


image.png

先不安装插件,关掉新页面。


image.png

点击开始使用 Jenkins 。


image.png

看到下面的页面说明 Jenkins 已经安装成功了。


image.png

3.2 配置 Jenkins
3.2.1. 在 Jenkins 中配置 Ant
首先要安装 Ant 插件。
在 系统管理 --> 管理插件 中找到 可选插件 ,然后搜索 Ant 插件安装即可。如果第一次进入没有显示任何插件信息
的话点 立即获取 按钮获取,估计要等待一段时间,可以趁机上个洗手间。


image.png

插件安装完成后,接下来对 Ant 的配置进行设置。
点击 系统管理 ,旧版本 Jenkins 进入 系统设置 ,新版本 Jenkins 进入 全局工具配置 ,找到 Ant 安装配置项进行设
置并保存(前面偷偷告诉你的路径下面就用到了)。


image.png

3.2.2. 新建项目
回到 Jenkins 首页,点击 新建任务 创建任务。


image.png

3.3.3. 配置项目
项目创建完成后要进行配置。
3.3.3.1 安装和配置 SVN 选项
后期我们会对测试脚本进行 SVN 配置管理,所以要在 Jenkins 里配置 SVN 相关信息。首先要安装 SVN 插件,安装
方式和 Ant 插件安装类似,在可选插件中搜索 Subversion 即可安装。
安装插件后进入项目配置页面。


image.png

配置 SVN 选项信息。


image.png

设置 SVN 用户账号和密码。


image.png

3.3.3.2 配置构建环境
假如我们每天都想在固定时间对项目进行构建一次来检验项目质量情况,而且这个时间要选大家下班以后,避免其
他人操作影响测试结果。这样的话经常会挑每天凌晨的时间构建,人为去执行构建不太现实,这个时候就可以设置
一些触发构建的条件来帮我们实现。


image.png

以上两个触发机制任意一个满足条件都会触发构建项目。
3.3.3.3 配置构建
在 构建 --> 添加构建步骤 中选择 Invoke Ant 。


image.png

在 高级 中设置 build.xml 文件路径。


image.png

设置完成后点击保存。
四、构建项目
进入项目页面进行构建。


image.png

构建后先不管构建结果情况,因为还有其他信息没有配置完。现在我们要去看 Jenkins 构建项目时从 SVN 上获取的
代码放到服务器哪里?


image.png

熟悉 Jenkins 工作机制的同志应该知道在上面截图的位置,其实 test_pro 目录下的文件就是 JMeter 的安装包文
件,所以在服务器上不需要另外安装 JMeter 了。
4.1 配置 JMeter
复制 JMeter 的 extras 目录的 ant-jmeter-1.1.1.jar 到 Ant 的 lib 目录下。


image.png
image.png

修改 JMeter 的 jmeter.properties 配置文件,用 Notepad++ 打开文件找到
jmeter.save.saveservice.output_format=csv,将 csv 改成 xml。如果之前开启了 JMeter 需要重启 JMeter
才能使修改的配置生效。
4.2 配置 build.xml文件
build.xml 文件在前面已经配置过一次了,因为涉及到后面的操作步骤信息,所以还有一部分信息没有配置完成,
现在继续去完善,如:时间格式、JMeter 安装路径、报告名称、jtl 文件名、html 文件名、脚本存放路径。


image.png

其中把时间加在生成的 jtl 结果文件和 html 报告文件后面是为了避免文件覆盖。
到此为止,需要配置的信息已经完成,现在再次构建项目。


image.png

还是构建失败了,看控制台输出信息意思是在 C:\Program Files\Java\jre1.8.0_161\lib\ 目录下找不到 tools.jar
这个包。
解决办法:将 C:\Program Files\Java\jdk1.8.0_161\lib 目录下的 tools.jar 文件拷贝到 C:\Program
Files\Java\jre1.8.0_161\lib 目录下 。
4.3 处理 Jenkins 乱码问题
拷贝完成后接着构建项目。


image.png

结果一样构建失败了,但这次报的不是之前的错误了,看起来是脚本名称和测试报告名称含有中文导致的错误。
解决办法:添加环境变量。
键 = JAVA_TOOL_OPTIONS
值 = -Dfile.encoding=UTF-8


image.png

添加环境变量后需要重启 Jenkins 服务,在 开始 --> 运行 中输入 services.msc 回车,然后找到 Jenkins 服务重启。


image.png

重启后再来构建项目。


image.png

最终的构建结果还是失败,但中文能显示出来了。另外,从最后的结果看得出脚本是被运行了,但 jtl 文件因名称
存在中文没有被生成。这里笔者在 build.xml 文件中把原来中文报告名称 发布会系统接口自动化测试报告 换成英文
的 fabuhui_Interface_automation_testreport 名称。


image.png

修改保存 build.xml 文件后最后一次运行,这次再构建不成功就放弃了。


image.png

居然成功了!泪流满面啊!看来老天不想让我放弃。另外,Jenkins 乱码的情况非常多,大家遇到不一样的乱码问
题可以多找一下度娘。
最后,哪位同志日后把上面报告名称含有中文的问题解决了欢迎拿出来跟笔者分享一下哈。
五、查看报告文件
构建完成后,我们来查看 jtl 结果文件和 html 报告文件。
jtl 文件。


image.png

html 文件。


image.png

打开 html 文件看看报告内容。


image.png

从结果中可以看到3个 java 请求执行成功,1个 HTTP 请求执行失败。总共4个请求,1个失败,3个成功,成功率为
75%。失败的请求在最下方有失败的详细信息。
六、发送报告到邮箱
上面生成的 jtl 测试结果文件和测试报告 html 文件都是在 Jenkins 服务器上,如果要看一眼报告还要跑到服务器去
找,这个不实际。如果可以在构建项目并生成报告文件后能自动把报告发送到指定邮箱,这样就方便查看运行结果了。下面我们来学
习一下如何在 Jenkins 里面配置发送邮件。
6.1 安装 Email Extension 插件
发送邮件需要安装 Email Extension 插件,安装方式跟前面安装 Ant 一样,在 可选插件 中搜索 Email Extension 找
到插件安装即可。
6.2 配置 Extended E-mail Notification
安装完成后在 Jenkins 首页进入 系统管理 --> 系统设置 ,找到 Extended E-mail Notification 项进行配置。


image.png

接下来对上面每一个选项配置进行说明:
SMTP server: 邮件发送服务器。可以写公司 SMTP 服务器,也可以写网易或者 QQ 的邮箱发送服务器,这里以
QQ 邮箱为例。
Default user email suffix:用户默认邮箱后缀,这个取决你用哪个邮箱,比如网易就用 @163.com,QQ 的就用
@qq.com。
使用 QQ 邮箱 SMTP 服务器需要身份验证,打开高级设置去设置身份,勾选 Use SMTP Authentication 。
User Name:输入你邮件服务器的邮箱。
Password:由于 QQ 邮箱的升级,对于 Password 腾讯要求第三方客户端使用要输入16位授权码,所以我们需要
在 QQ 邮箱中开启16位授权码。具体操作可以看笔者写的另外一篇文章,这里就不重复写一遍了(https://www.jia
nshu.com/p/d444c854e5b3)。
勾选 Use SSL 选项。
SMTP port:端口写465或者587都可以。
Charset:设置成 UTF-8 。Default Content Type:输入 HTML(text/html) 。
其他没有提到的选项默认即可。
6.3 配置 Jenkins Location

image.png

Jenkins URL:别人访问 Jenkins 的地址,如果是远程需要把 localhost 改成 Jenkins 服务器 IP 。
系统管理员邮件地址:这个地址输入你前面配置发送邮件的 QQ 邮箱,两个邮箱地址要保持一致,不然无法发送邮
件,切记!!!
6.4 配置邮件通知服务器
找到邮件通知选项,各项输入内容和前面 Extended E-mail Notification 设置的一致。


image.png

这里你可以点击 Test configuration 按钮进行测试邮件发送配置,前面配置好的 QQ 邮件服务器会给你这里设置的
接收邮箱发一封测试邮件,如下图:


image.png

配置完成后点击应用按钮,最后点击保存按钮即可。
6.5 配置构建后操作
邮件服务器信息配置完成后,接下来对邮件内容进行设置。
在操作之前,先要安装一个 Build Timestamp 插件,该插件可以给我们提供一个构建时间,安装插件方式和前面
一样在 可选插件 中搜索 Build Timestamp 安装即可。
安装完成后回到 Jenkins 首页,进入 系统管理 --> 系统设置 ,在 Build Timestamp 中可以自定义设置时间的格
式,笔者这里设置成跟前面配置 build.xml 文件 time 变量一致: yyyy-MM-dd_HH ,实际的时间如:2018-08-28_11
。在其他地方调用这个构建时间用以下格式:${BUILD_TIMESTAMP} 。


image.png

接下来进入项目的配置页面,在 构建后操作 --> 增加构建后操作步骤 中选择 Editable Email Notification 。


image.png

接着讲解一下需要设置的选项,没有讲到的默认即可。
Project Recipient List:这个项目报告需要发送邮件给哪些人,在这里输入收件人邮箱,多个邮箱以英文状态下
的逗号隔开,或者邮箱之间回车换行让每个邮箱单独一行也可以。
Content Type:可以选择 HTML 或者 Default,因为在 Jenkins 系统设置中默认格式就是 HTML 。
Default Subject: 邮件主题。可以书写成:XXX项目自动化测试通知:PROJECT_NAME - Build #BUILD_NUMBER - BUILD_STATUS ! 这几个参数意思是:PROJECT_NAME 构建项目的名称;# BUILD_NUMBER 构建的号码;BUILD_STATUS 构建
状态,这几个参数会自动读取,按照这种格式书写即可。
Default Content:邮件内容。这部分内容是 HTML 格式,可以根据自己的需要而修改,这里只是给了一个样式,
具体内容如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
offset="0">
<div>
<table width="95%" cellpadding="0" cellspacing="0"
style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
<th align="center" colspan="2"><br />
<h2><p><font size="6" face="arial" >构建信息</font></p></h2>
</th>上面倒数第7,8行是 HTML 报告源文件的路径,配置后会把 HTML 源文件的内容展示在邮件内容里面,路径需要根
据自己的实际情况编写。
Attachments:邮件附件。在这里,发送邮件的同时把 HTML 报告源文件以附件的形式附带发送出去。填写的内
容是文件所处的路径,路径需要根据自己的实际情况填写,笔者这里的路径是:
reports\html\fabuhui_Interface_automation_testreport${BUILD_TIMESTAMP}.html ,可以是相对路径,也可以
是绝对路径。
最后还需要配置什么时候触发发送邮件这个操作,点击 Advanced Settings… 按钮。
点击 Add Trigger 按钮新增一个trigger,然后选择 Always 选项,这样不管构建成功还是失败,都会触发这个发送
邮件的请求。
</tr>
<tr>
<td>
(本邮件为程序自动下发,请勿回复!)<br/><hr/>
项目名称:$PROJECT_NAME<br/><hr/>
构建编号:$BUILD_NUMBER<br/><hr/>
构建状态:$BUILD_STATUS<br/><hr/>
触发原因:${CAUSE}<br/><hr/>
构建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console/</a><br/><hr/>
构建报告:<a href="${BUILD_URL}testReport">${BUILD_URL}testReport/</a><br/><hr/>
变更集:${JELLY_SCRIPT,template="html"}<br/><hr/>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<h2><p><font size="6" face="arial" >测试报告</font></p></h2>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<div>${FILE ,path="C:\\apache-ant-
1.9.4\\reports\\html\\fabuhui_Interface_automation_testreport${BUILD_TIMESTAMP}.html"}</div>
</td>
</tr>
</table>
</div>
</body>
</html>

上面倒数第7,8行是 HTML 报告源文件的路径,配置后会把 HTML 源文件的内容展示在邮件内容里面,路径需要根
据自己的实际情况编写。
Attachments:邮件附件。在这里,发送邮件的同时把 HTML 报告源文件以附件的形式附带发送出去。填写的内
容是文件所处的路径,路径需要根据自己的实际情况填写,笔者这里的路径是:
reports\html\fabuhui_Interface_automation_testreport${BUILD_TIMESTAMP}.html ,可以是相对路径,也可以
是绝对路径。
最后还需要配置什么时候触发发送邮件这个操作,点击 Advanced Settings… 按钮。


image.png

点击 Add Trigger 按钮新增一个trigger,然后选择 Always 选项,这样不管构建成功还是失败,都会触发这个发送
邮件的请求。


image.png

最后,点击应用和保存按钮。
6.6 发送邮件
邮件内容所有选项都设置完成后,我们对项目再进行一次构建。


image.png
image.png

从上面看出项目构建已经成功,接着来看看邮件内容。


image.png
image.png

查看邮箱,邮件已经发送成功,上面两张图片都是邮件的内容。
上面是手动构建项目的,你也可以设置定时构建或者轮询 SCM 的方式自动构建项目,这里就不再演示了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容