这次讲到的自动化测试框架,主要会用到以下3款工具:Jenkins、Jmeter、Ant,首先说下这几款工具各自起什么作用
Jenkins:可对项目设置构建策略,如触发构建、定时构建等,项目构建完成后,可进行构建报告的查看、邮件发送等一系列操作,就是我们常说的持续集成,也叫CI
Jmeter:主要用来编写接口自动化用例
Ant:批量跑指定目录下的Jmeter脚本
了解了这几款工具的作用后,我们开始从头来搭建这套自动化框架,在搭建之前,我们的电脑必须先安装java,因为Jmeter这款工具,是有在java环境下才能运行,Java的安装,我这里就不再赘述了,网上资料也非常的多,笔者安装的是java version "1.8.0_151"版本的
一、Jmeter安装以及环境变量配置
1、下载地址:https://jmeter.apache.org/download_jmeter.cgi,按照下图中操作即可
2、Jmeter安装:安装过程非常简单,将步骤1中下载的压缩包直接解压到指定的目录即可
3、环境变量配置:安装完后,我们需要把Jmeter配置到环变量中,我的jmeter是安装在"D"盘的,那么需要将jmeter的bin目录追加到path中,这样在DOS命令中输入jmeter,就可以直接打开Jmeter,如下所示
这样,Jmeter就安装好了,接下来我们继续讲解Ant的安装
二、Ant安装以及环境变量配置
Ant的安装和Jmeter安装基本类似
1、下载地址:http://ant.apache.org/,按照下图中操作即可
2、Ant安装:将步骤1中下载的压缩包直接解压到指定的目录即可
3、环境变量配置:这里和Jmeter稍许不同,首先我们要新建一个ANT_HOME,然后再将bin目录追加到path中,以我的安装地址为例,我本机ant是安装在"D"盘的,那么在环境变量中先配置ANT-HOME,如下所示
完成后,同样将ant追加到 path变量中
4、检查Ant是否安装成功:进入DOS命令,在命令行中输入ant,如果提示:Buildfile: build.xml does not exist!,则说明安装成功
1、复制Jmeter安装路径中extras目录下的"ant-jmeter-1.1.1.jar"包到ant安装路径下的lib目录下,如图所示
如果不复制这个包到ant下,那么就无法成功触发Jmeter脚本,会报下面的错
2、修改Jmeter默认的文件保存格式:进入Jmeter的安装路径,找到bin目录下的"jmeter.properties"文件,打开该文件,搜索这行代码(jmeter.save.saveservice.output_format=csv)并修改为(jmeter.save.saveservice.output_format=XML),并去掉前面的"#"符号,如下图所示
3、在Jmeter的安装路径下创建以下3个目录build、report_project以及script_project,分别用来存放构建文件、测试报告和自动化测试脚本,目录的层级与bin保持一致,如下所示
在build目录下继续创建一个build.xml文件,该文件的内容可以复制以下代码并修改代码中对应本机的相对路径
<?xml version="1.0" encoding="UTF-8"?> <project name="ant-jmeter-test" default="run" basedir="."> <tstamp> <format property="time" pattern="_yyyy_MMdd_HHmmss" /> </tstamp> <!-- 需要改成自己本地的 Jmeter 目录--> <property name="jmeter.home" value="D:\apache-jmeter-5.1.1" /> <property name="report.title" value="接口测试"/> <!-- jmeter生成jtl格式的结果报告的路径--> <property name="jmeter.result.jtl.dir" value="D:\apache-jmeter-5.1.1\report_project" /> <!-- jmeter生成html格式的结果报告的路径--> <property name="jmeter.result.html.dir" value="D:\apache-jmeter-5.1.1\report_project" /> <property name="detail" value="_detail" /> <!-- 生成的报告的前缀--> <property name="ReportName" value="SmokeReport" /> <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" /> <property name="detail" value="_detail" /> <property name="jmeter.result.jtlNamedetail" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" /> <property name="jmeter.result.htmlNamedetail" value="${jmeter.result.html.dir}/${ReportName}${time}${detail}.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:\apache-jmeter-5.1.1\script_project" includes="*.jmx" /> <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"> <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-detail-report_21.xsl"> <param name="dateReport" expression="${report.datestamp}"/> </xslt> <xslt classpathref="xslt.classpath" force="true" in="${jmeter.result.jtlNamedetail}" out="${jmeter.result.htmlNamedetail}" 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>
build.xml文件创建好了,主要注意修改xml文件中的以下参数值
(1)、本地Jmeter的目录,绝对路径
(2)、jtl格式的结果报告路径
(3)、html格式的结果报告路径
(4)、要运行的jmx文件路径
(5)、使用的报告样式文件,这个我们后面会详解,这里先设置好
如下图所示
OK,文章写到这里,我们这款接口自动化测试框架就已经完成80%了,已经可以实现ant批量执行Jmeter脚本以及测试报告的生成,现在我们可以运行ant命令来看下执行的效果
1、首先打开jmeter,随意编写几个脚本,脚本名称可以命名为test,将脚本存放在之前新建的script_project目录下
2、进入DOS,切换到Jmeter下的build目录,运行Ant命令:ant -f build_smoke_report.xml,最后显示BUILD SUCCESSFUL则表明脚本执行成功,如下所示
3、进入Jmeter下的report_project目录,此时就可以看见执行的报告结果,包含jtl和html两种格式
这时候,我们已经可以成功执行Jmeter脚本并能生成两种类型的测试报告,现在还差最后一步,就是怎么和Jenkins进行结合来执行我们的策略构建了
三、Jenkins的安装以及项目构建配置
1、Jenkins下载:https://www.jenkins.io/(这个地方要注意一下:最好下载最新版的Jenkins,因为笔者在这个地方踩了一个坑,之前太老的版本,插件更新都有问题,ant都没法配置,很浪费了一点时间)
2、Jenkins安装:将下载好的Jenkins包放在本地的任何一个目录(我是在本地D盘建了一个Jenkins目录),然后进入DOS,切换到Jenkins存包的目录,执行以下命令启动Jenkins:java -jar jenkins.war,当出现Jenkins is fully up and running提示时,说明Jenkins启动成功
3、登录Jenkins:登录http://localhost:8080/,就可以进入到Jenins主界面(第一次安装完Jenkins,会让您设置登录账号和密码,这些操作笔者就不详细赘述了)
4、Jenkins配置
(1)、插件配置:进入Jenkins首页面板,依次点击Manage Jenkins------->Manage Plugins--------->Avaiable,在搜索框中输入Ant Plugins、HTML Publisher plugin,查找出来后分别安装这两个插件,如下图步骤所示
插件安装完成后,建议重启Jenkins,让安装的插件生效
(2)、全局工具的配置:进入Jenkins首页面板,依次点击Manage Jenkins------->Global Tool Configuration,找到Ant配置的那一行,如下图所示进行配置
(3)、创建自动化项目:重新回到Jenkins首页面板,点击New Item,项目风格选择"自由风格(freestyle project)" ,如下所示
下面继续依次设置构建策略和构建步骤的操作
构建策略的配置如下所示,首先选择"Build periodically",我这边设置的值表示的意思是"周一至周五,每天的10:30进行定时构建",具体怎么设置,大家去看下Jenkins的相关教程,在此就不做讲解了
构建步骤的配置
A、在“build”中,点击"add build step",选择"Invoke Ant"
B、Ant Version选择"Default",然后点击"Advance"进行高级设置
C、高级设置中填写构建文件地址
好了,到此,我们整个接口自动化框架就全部搭建完成了,我们来试一下,看是否可以构建成功并生成对应的测试报告
1、回到Jenkins首页面板,选择刚才创建的自由风格项目,点击构建
2、查看对应项目的构建日志
3、构建日志中出现build success,说明我们的构建是成功的
4、再回到我们Jenkins日志存放的路径看下是否成功的生成了测试报告
如果你也执行到了这一步,恭喜你,整个接口自动化框架搭建完成,你可以开展你的自动化测试工作了,后面的内容,我们将继续对这款框架进行优化,优化的东西包含以下内容:
1、如何执行多个目录下的测试脚本
2、如何生成多种类型(概要和详细)的测试报告
3、测试报告如何与Jenkins进行集成
4、测试报告如何进行邮件发送