Jenkins+JMeter+Ant实现自动化测试构建

上一篇博客讲了自己在进行Jenkins构建自动化测试时遇到的一些坑和解决方法,为了更好地让自己熟悉自动化测试构建过程,在这里开篇博客做个记录。

先说一下我一开始被安排的这个任务需求:

在Jenkins上配置一个自动化测试项目,要求该项目每天定时去跑一遍重要接口,当然这些接口是放在一个jmx文件中的。如果其中的某个或多个接口出现了问题,第一时间以邮件或短信(前提是有短信发送接口,这里需要服务端配合)的方式发送出来。

背景条件:Jenkins部署在了linux服务器上,该服务器上没有安装JMeter和Ant。

我是第一次接触Jenkins的,同事也不是很熟悉,所以在网上看了不少资料,也走了不少的弯路,接下来是我这一路摸索解决的过程。

一、搭建JMeter和Ant环境

1、在本地下载JMeter和Ant的压缩包,上传到服务器后,解压安装包:

unzip apache-jmeter-5.3.zip
unzip apache-ant-1.10.7-bin.zip

2、在~/.bashrc文件中配置JMeter和Ant的环境变量:

//进入bashrc文件的编辑模式
vi ~/.bashrc

//添加JMeter的环境变量配置,注意要改成你本地的JMeter存放路径和版本
export JMETER_HOME=.../apache-jmeter-5.2.1
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH
export PATH=$JMETER_HOME/bin:$PATH:$HOME/bin
//添加Ant的环境变量配置,注意要改成你本地的Ant存放路径和版本
export ANT_HOME=.../apache-ant-1.10.7
export PATH=$PATH:$ANT_HOME/bin
export PATH=$PATH:.../apache-ant-1.10.7/bin

//退出编辑,先点击Esc键,输入“:wq”,点击Enter键
:wq

//刷新bashrc文件
source ~/.bashrc

其实还是蛮简单的,不过要注意的是一定在~/.bashrc文件中配置环境变量,不然会有其他问题,具体可以看我前一篇关于填坑记录的博客。

3、配置完成后,使用jmeter和ant命令,验证一下是否正常安装了JMeter和Ant:

当看到上面的显示时,说明已经成功安装了JMeter 5.2.1 版本。

同理,当看到上面的显示时,说明已经成功安装了Ant 1.10.7版本。

4、在Ant文件的bin目录下,新建一个build.xml文件,文件内容如下:

<?xml version="1.0" encoding="utf8"?>

<project name="ant-jmeter-test" default="run" basedir=".">
    <tstamp>
        <format property="time" pattern="yyyyMMddHHmm" />
    </tstamp>
    <!-- 需要改成自己本地的jmeter目录-->  
    <property name="jmeter.home" value="/home/apache-jmeter-5.2.1" />
    <!-- jmeter生成的jtl格式的结果报告的路径--> 
    <property name="jmeter.result.jtl.dir" value="/home/apache-jmeter-5.2.1/JMeterTest/resultLog/jtl" />
    <!-- jmeter生成的html格式的结果报告的路径-->
    <property name="jmeter.result.html.dir" value="/home/apache-jmeter-5.2.1/JMeterTest/resultLog/html" />
    <!-- ʺ生成的报告的前缀-->  
    <property name="ReportName" value="result" />
    <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}.jtl" />
    <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}.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}" jmeterlogfile="/home/apache-jmeter-5.2.1/jmeter.log">
            <!-- 声明要运行的脚本"*.jmx"指包含此目录下的所有jmeter脚本-->
            <testplans dir="/home/apache-jmeter-5.2.1/bin/script" 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-2.7.2.jar"/>
    </path>

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

要注意的是,这些地方必须改成你们自己的文件路径,否则会报错:

    <!-- 需要改成自己本地的jmeter目录-->  
    <property name="jmeter.home" value="/home/apache-jmeter-5.2.1" />
    <!-- jmeter生成的jtl格式的结果报告的路径--> 
    <property name="jmeter.result.jtl.dir" value="/home/apache-jmeter-5.2.1/JMeterTest/resultLog/jtl" />
    <!-- jmeter生成的html格式的结果报告的路径-->
    <property name="jmeter.result.html.dir" value="/home/apache-jmeter-5.2.1/JMeterTest/resultLog/html" />

在上面我们可以看到,我把jtl文件、html最终放在对应的文件夹中,如果说你们本身没有那个路径的话,记得一定要先新建好对应的文件夹和路径。

另外要注意的是,我们要运行的jmx文件存放的位置,下面的代码就是用来设置这个的:

<!-- 声明要运行的脚本"*.jmx"指包含此目录下的所有jmeter脚本-->
<testplans dir="/home/apache-jmeter-5.2.1/bin/script" includes="*.jmx" />

5、在jmeter的extras文件夹中找到“ant-jmeter-1.1.1.jar”放入ant的lib文件夹中;

6、由于jmeter默认输出格式是csv,这时需要修改输出格式为“xml”,在jmeter的bin目录下找到配置文件jmeter.properties,搜索“jmeter.save.saveservice.output_format=csv”,把它修改成“jmeter.save.saveservice.output_format=xml”。

7、运行如下命令行,看是否能正常生成jtl文件和html文件:

// 进入ant文件的bin目录
cd /home/apache-ant-1.10.7/bin

//运行ant命令,执行build.xml文件
ant

如下图所示,说明在linux服务器上已经正常配置且可以正常生成jtl文件和html格式的测试报告。

二、Jenkins——系统管理

1、首先打开浏览器,输入正确的网址,登录到Jenkins工作台,可以看到左边有一排功能菜单,如下图所示:

2、因为我们要使用到Jenkins的邮件通知服务,我们需要在“系统管理-插件管理”中下载相关的插件,且在“系统管理-系统配置”中进行关于发送邮件的配置:

      邮件通知插件下载

       1.点击“系统管理”,点击右侧列表中显示的“管理插件”:

      

       2.在插件管理界面的右上角搜索框搜索插件“Email Extension”,这个插件是为了更方便地对邮件通知进行配置,具体可以见它的解释(这个插件是Jenkins电子邮件发行商的替代品。它允许配置电子邮件通知的每一个方面:当发送电子邮件时,谁应该接收它以及电子邮件所说的内容)。下载完成后,可以在已安装的插件中找到它,如下图所示:

      邮件通知系统配置

       1.重新进入Jenkins工作台,点击“系统管理”,点击右侧列表中显示的“系统配置”:

       2.在系统配置界面中找到“Jenkins Location”,配置好相关参数,如下图所示: 

  • 输入Jenkins URL ——Jenkins工作台对应的网址
  • 系统管理员邮件地址——发送邮件的邮箱号码

        3.找到“Extended E-mail Notification”,这个叫做邮件通知扩展,可以对邮件的内容格式、标题等信息进行配置,如下图所示:

         从上面可以看到,我将使用QQ邮箱进行邮件发送,所以SMTP server我填的是“smtp.qq.com”,默认用户邮箱后缀填的是“@qq.com”。邮件内容类型我选择的是“HTML(text/html)”,这主要是考虑到我需要在邮件里设置一些文字格式和排列样式等,所以使用普通的文字类型无法满足要求。另外,这里如果你想使用其他的邮箱,比如网易邮箱啥的,可以自行百度一下SMTP server的填写,另外一定要记得填写正确的邮箱后缀(网易的是“@163.com”)。另外默认内容里面我特地加了一句,是为方便到时候查看测试邮件通知是否会成功,内容是否显示正确。

       除此之外,可以看到“Default user E-mail suffix”右下方有个“高级”的按钮,点击后就可以看到下图的相关配置项,勾选“Use SMTP Authentication”,然后填写“User Name”为发送人的邮箱号,填写“Password”为发送人的QQ邮箱授权码,这里一定一定要注意了,不是填邮箱密码。至于授权码怎么来的,大家可以参考这个链接:https://jingyan.baidu.com/article/fedf0737af2b4035ac8977ea.html

         4.找到“邮件通知”,并进行如下图的配置,SMTP服务器什么的都与前面“Extened E-mail Notification”一致,注意SMTP端口必须是465(QQ邮箱的),字符集这里填入的是“UTF-8”,防止出现乱码:

       最后测试一下这个邮件通知服务是否成功。先勾选“通过发送测试邮件测试配置”,并在“Test e-mail recipient”中填写一个可正常收件的收件人邮箱,点击“Test Configuration”,如下图所示:

        配置无误的话,是会正常收到邮件,说明系统管理中关于邮件通知的配置完成。

三、Jenkins——新建任务并查看

1、在Jenkins工作台的功能菜单中找到并点击“新建任务”,会进入一个新建任务的界面。这里我是新建了一个自由风格的软件项目,名称是“test-JMeterTest”,因为我已经建好了,所以也是会提示"***已存在",如下图所示:

2、建好了之后,在工作台的右边可以找到对应的项目了,如下图所示:

四、Jenkins——项目配置

1、点击对应的项目,进入项目主页,可以看到左侧同样有一排项目的功能菜单,如下图所示,点击“配置”,进入配置界面:

2、配置里面分为六大步骤:General(通用)、源码管理、构建触发器、构建环境、构建、构建后操作,接下来我们一个一个看。

      1.General(通用)

        在通用设置中,我们可以进行一些基础的设置,比如:

  • Change date pattern for the BUILD_TIMESTAMP (build timestamp) variable:顾名思义就是“更改BUILD_TIMESTAMP(BUILD TIMESTAMP)变量的日期模式”

这里我们勾选了改变日期模式时,要求给一个模式值。如果你不知道怎么填的话,可以点击右侧的那个“?”看一下提示。这里提示中给我们举了个例子:yyyyMMddHHmmss,写过代码的同学肯定就知道,如果我这么设置的话,那么得到的时间就会是类似于20200526220341这样一个格式,也就相当于2020年5月26号22点03分41秒。

  • Discard old builds:丢弃旧的构建,就是说可以对构建记录进行保存时间和保存最大个数的设置。每次进行新的构建或者时间推移时,会根据这两个设置,把不符合条件的构建记录给删除,这也是为了避免太多或者说没必要保留的构建记录占用了服务器内存。这里勾选“Discard old builds”后,设置“Days to keep builds”为“1”,“Max # of builds to keep”为“20”,也就是说构建记录最多保留一天,只保留最后构建的20条记录。

      2.源码管理

       这块因为我这边是没有配置的,所以不多做介绍,如果要构建的项目代码目前是被版本控制工具(SVN或Git)管理的话,那么需要在这里进行配置。

     3.构建触发器

      前面提到了要求每天定时去跑这个项目,那我不可能每天守着那个时间,手动去构建呀。怎么办?此时就需要配置一下构建触发器。但是构建触发器有好几种,这里只说下面两种,如下图所示,我勾选了“Build periodically”,设置“Schedule”为“H 8 * * *”:

        对于“Schedule”的具体配置,大家可以就有疑问了,为甚要这么配置呢?,其实还是挺容易的理解的。它的格式为“* * * * *”,也就是五个*组成,每个*的有不同的解释如下:

  • 第一个*表示分钟,取值0~59
  • 第二个*表示小时,取值0~23
  • 第三个*表示一个月的第几天,取值1~31
  • 第四个*表示第几月,取值1~12
  • 第五个*表示一周中的第几天,取值0~7,其中0和7代表的都是周日

     大家可能还发现了另外一个定时轮询的构建器“Poll SCM”,它与“Build periodically”都是定时轮询,连配置项都是“Schedule”,那为什么选择“Build periodically”而不是“Poll SCM”呢?

     说到这里要注意了,如果是要对项目定时轮询且没有配置源码管理工具时选择“Build periodically”,反之优先选择“Poll SCM”,一定要记住。

     4.构建环境

       这一块我是没有什么需要配置的,所以跳过。

     5.构建

     (1)点击“增加构建步骤”按钮,点击下拉列表中的“执行shell”,新增一个shell命令执行步骤,如下图所示:

这里因为jtl文件所在文件夹每次生成jtl文件前必须是一个空文件夹,所以这里我会先执行一个shell命令去删除jtl文件夹中的全部文件,防止报错。

      (2)点击“增加构建步骤”按钮,点击下拉列表中的“Invoke Ant”,配置好Ant的版本及Build File,如下图所示:

这里的“Ant Version”是我安装在linux服务中的ant版本,“Build File”输入框中填入前面新增的那个build.xml文件的路径。

    6.构建后操作

    (1)点击“增加构建后操作步骤”,点击列表中的“Publish Performance test result report”并进行配置。如果找不到“Publish Performance test result report”,那么先要去插件管理那边下载插件“Performance Plugin”,下载完成后,再对它进行如下图的配置:

      (2)同理,点击“增加构建后操作步骤”,点击列表中的“Publish HTML reports”,如果找不到的话,那么先要去插件管理那边下载插件“HTML Publisher”。下载完成后,再对它进行如下图的配置:

  • HTML directory to archive——输入jmeter生成的html格式的结果报告的路径
  • Index page[s]——输入jmeter生成的html格式的结果报告的名称及后缀
  • Report title——输入自定义报告标题

     (3)点击“增加构建后操作步骤”按钮,点击列表中“Editable Email Notification”,编辑邮件通知的配置,首先我们可看到如下图所示:

     (4)点击右下角的“Advanced Settings...”,在Triggers里面点击“新增”按钮,新增了一个接收人列表“Recipient List”。另外为了测试方便,我选择“Always”发送邮件的方式,如下图所示:

      (5)点击“高级”按钮,可设置更多的信息,如下图所示:

  • Recipient List——接收人列表,这里可以输入一个或多个接收人邮箱,如果是多个接收人,可以用“;”隔开去输入
  • Content Type——内容类型,这里因为我是用一个html格式去显示邮件内容,所以选择“HTML(html/text)”。
  • Subject——项目名称
  • Content——邮件内容

这里附上我的邮件内容模板:

<!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">  
         <tr>
            本邮件由Jenkins系统自动发出,无需回复!<br/>            
            以下为 ${PROJECT_NAME } 项目构建信息</br> 
            <td>
                <h3>
                     <font color="#CC0000">构建结果 - ${BUILD_STATUS}</font>
                </h3>
             </td>   
        </tr>
    <div>
	<table width="95%" cellpadding="0" cellspacing="0" 
        style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"> 
		<tr>
			<th><br />
				<h2>构建信息</h2> 
			</th>
		</tr>
        <tr>  
            <td>  
                <ul>  
                   <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}HTML_20Report">${PROJECT_URL}HTML_20Report</a></li>
                    <li>图表展示: <a href="${BUILD_URL}performance">${BUILD_URL}performance</a></li>
                </ul>  
            </td> 
        </tr>  
	</table> 
	</div>
  </body>  
</html>

如此我们的Jenkins构建就完成,点击构建按钮,将收到一个邮件通知,这里附上我构建成功后的结果显示界面:

可以看到结果中显示了“HTML Report”和“Performance Trend”,这些就是我们进行构建后的前两个操作生成的。

接着我们来看一下邮件显示:

一切好像没有什么问题了,但是我就发现了两个缺点:

a.这个测试结果看起来不够直观,要想查看详细内容,每次还得点链接进去才能看,能不能直接把更详细的测试结果以表格形式展示出来呢?

b.用Ant去运行总觉得不够灵活,要运行的jmx文件是在build.xml中设置的。如果我需要修改,还得远程连接服务器,找到build文件去修改,有没有更好的方法呢?

答案当然是有的,包括怎样实现短信发送,这里先卖个关子,看我下篇博客咯~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章