想要实现标题所说内容需要安装配置JDK&JRE、Jmeter、Ant、Jenkins,以上工具都可以到各自的官网下载。
#JDK,由于Jenkins.war最高只支持java11,因此本文选择的是JDK11
https://www.oracle.com/cn/java/technologies/javase-downloads.html
#Jmeter,Binares解压即可运行,Source需要自己编译
https://jmeter.apache.org/download_jmeter.cgi
#Ant,1.9最低需要Java5,1.10最低需要Java8
https://ant.apache.org/bindownload.cgi
#Jenkins
https://www.jenkins.io/download/
我们需要安装配置JDK和JRE来为JMeter、Ant、Jenkins提供运行环境。安装JDK只需要一步一步根据提示就可以完成安装,需要注意的地方就是它的安装路径,因为后续需要将其添加到系统变量中。由于JDK11开始不再提供单独安装JRE了,因此需要使用命令提示符(管理员)去生成JRE,先右键左下角Windows图标打开命令提示符(管理员),通过CD命令进入到JDK目录后运行以下命令:
bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre
这时JDK目录中就会有一个jre子目录了,环境变量中只需要配置到这个目录就算完成JRE的安装了。
注意,这里因为我比较懒,所以采用的Jenkins是使用Java去运行的war包,只支持JRE8至11的版本。8到10是JDK和JRE集成在一起,装完JDK就会弹出JRE的安装窗口。JDK11开始就需要使用上面的方法生成JRE,如果JDK高于11,则需要单独安装一个8到11版本的JRE来运行Jenkins,环境配置也要单独为它进行配置。
接下来是配置JDK和JRE的过程:
右键此电脑—属性—高级系统设置—环境变量。
上方的变量都是用户变量,会因为登录用户不同而不同,下方的就是需要操作的系统变量。
首先添加一个变量JAVA_HOME,变量值选择浏览目录,找到安装的JDK文件夹,点击确定,这里是我自定义的JDK安装路径。
然后编辑CLASSPATH变量,在“;”后面添加以下代码,点击确定。
%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;
最后编辑Path系统变量,新建%JAVA_HOME%\bin,新建%JAVA_HOME%\jre\bin,点击确定,然后一路点击确定退出编辑环境变量。
这里需要注意的是,第二个变量%JAVA_HOME%\jre\bin是指向你生成的JRE目录中的bin子目录,如果是单独安装的JRE,则需要为JRE单独配置环境变量。
打开CMD窗口(Win+R后输入CMD回车,或者右键左下角Win图标命令提示符,如果需要高权限操作就选择命令提示符(管理员)),输入javac,如果配置成功就会有相关的一大串提示。
安装完JDK和JRE后就可以接着安装JMeter了,JMeter下载下来之后直接解压出来就算是安装完成了,Windows系统只需要打开目录中的jmeter.bat就会自动运行JMeter,但是要想实现接口自动化测试持续集成则需要JMeter也添加进系统变量中,Ant同理。
在“;”号后添加以下代码:
%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;
新建%JMeter_HOME%\bin,点击确定,然后一路点击确定退出编辑环境变量。
一样的方式打开CMD窗口,输入jmeter,如果JMeter可以运行起来就说明配置没问题了。
Ant也是解压即用,解压出来后,先将JMeter目录中extras子目录中的文件复制粘贴到Ant目录的lib子目录中。
这里因为我设置了一个持续集成的目录框架,因此将ant目录放置在一个大文件夹Apache Ant 1.10.9中。
在“;”号后添加以下代码:
%ANT_HOME%\bin;
新建%ANT_HOME%\bin,点击确定,然后一路点击确定退出编辑环境变量。
一样的方式打开CMD窗口,输入ant -version,如果显示Ant的版本信息就说明配置没问题了。
基于Java调用邮件系统所需要的jar包如下:
activation-1.1.jar
mail-1.4.jar
commons-email-1.1.jar
这些都属于旧版本了,如果需要最新版本的可以自行去下载使用,这里提供我保存的包:
链接:https://pan.baidu.com/s/1fp820WsvBIyd2c01CUeKLA
提取码:1234
将以上的jar放置到Ant目录的lib子目录中。
该文件默认是没有的,需要自己生成,内容如下,要进行修改的地方都已经中文注释提示设置了:
This email was sent automatically by ANT. Please check the automation test report. Thank you!
Jenkins的安装方式有两种,一种是下载msi安装包,以服务形式安装在Windows系统里。而另一种则是下载war包,通过CMD窗口去使用。这里选择war包的方式。
下载解压出来后使用CMD进入到Jenkins的目录,然后输入以下代码运行:
java -jar jenkins.war
出现下面的信息说明启动成功。
Jenkins的默认端口是8080,所以浏览器中输入localhost:8080,就会进入Jenkins的界面,首次进入需要安装一系列的插件,选择推荐安装就行,当插件安装完成之后就需要注册一个本地帐号用来管理Jenkins,当登录进入到以下界面,说明Jenkins也准备好了。
当我们经过以上的步骤之后,JMeter、Ant、Jenkins都已经安装好并配置到我们的电脑中,简单说一下这三个工具所负责的功能。JMeter是负责接口测试的脚本编辑,Ant负责运行脚本并发送测试报告到我们指定的邮箱,Jenkins负责指定时间运行脚本操作,这三个工具加一起就可以持续地运行我们所编辑好的脚本去测试接口。Ant只需要配置好就行了,不需要额外的操作,因此下面主要讲如何使用JMeter编写脚本以及如何使用Jenkins持续集成。
首先启动JMeter,进入以下画面:
设置中文方法如下:
非常简单的UI,里面的功能都有中文介绍,不再赘述。
测试计划:所有的测试都要从测试计划开始,可以理解为这就是项目的开始。
线程:就是为接口测试准备的线程,可以理解为这是模拟用户发起的一个请求,线程有三个组件,线程组是必要的,因为这是发起的请求,setUp线程组是用来模拟发起请求前需要做的事,tearDown线程组则是模拟发起请求后需要做的事。
HTTP请求:在取样器中。这里就是具体配置接口的详细数据了,具体需要注意的地方有协议、服务器名称或IP、端口号、HTTP请求方式、路径、请求参数,这些信息都可以在接口文档中获得。
响应断言:在断言中。当向接口发送请求之后会获得返回服务器返回的数据,对于接口测试成功与否就需要对返回的数据进行判断,这就是断言,断言的依据就在测试模式下的文本框中,可以手动添加,也可以从剪切板中添加。
断言结果:在监听器中。顾名思义,如果断言失败,则会显示失败提示,如下我在请求百度首页,但是断言“Hello,world!”,断言不通过。
察看结果树:在监听器中。请求接口后的结果,通过则为绿色,失败则为红色。其中取样器结果是本次请求的一些详细信息。请求则是具体发起的请求数据,Request Body是请求体,Request Headers是请求头。响应数据就是服务器响应的数据,Response Body是响应体,Response Headers是响应头。
HTTP Cookie管理器:在配置元件中。有一些接口调用的过程中会生成Cookie,而HTTP Cookie管理器可以自动保存这些Cookie。
正则表达式提取器:在后置处理器中。有时候请求一个接口需要依赖另一个接口的一些数据,比如说A接口需要B接口返回的密钥作为验证参数,这时就需要用正则表达式提取器通过正则匹配的方式将需要的数据从接口的返回数据中匹配出来,并将其作为参数给其它接口进行调用。
CSV Data Set Config:在配置元件中。可以读取本地文件中的数据当作参数使用,支持CSV和TXT格式。
当掌握了以上组件的使用,那么就可以进行基本的接口测试了。
进行接口测试之前,我们会获得接口文档,里面记录着关于这个接口的所有详细信息,包括请求方法、协议、URL、请求参数、返回参数、返回数据示例等等,这里简单引用一下ThinkPHP的API:
接下来进行接口测试的脚本编写,有两点需要注意的地方,首先一些组件需要重命名可自行更改,方便之后查看。然后就是这里使用的是ThinkPHP的免费API,是需要注册ThinkPHP服务市场获得个人的appCode作为参数调用接口的。开始示范:
(1)创建测试计划: 默认会创建有。
(2)在测试计划下添加线程组:线程数就是模拟用户数量,Ramp-Up时间就是所有用户请求在指定时间内发送完毕,循环次数就是执行次数。
(3)在线程组下添加HTTP请求:根据接口文档可以获得协议是https,服务器名称或IP是api.topthink.com,端口号没有,HTTP请求是GET,路径是/telecom/location,请求参数是一个int类型的手机号码或手机号码的前7位以及所有ThinkPHP接口都需要的appCode,如下图所示:
(4)在线程组下添加响应断言:我们按照提示输入了一个广州的电话号码前7位,按照返回参数,预期结果应该有一个city参数是“广州”,所以断言“广州”,如下图所示:
(5)在线程组下添加断言结果:如果断言失败,则会在断言结果中显示。
(6)在线程组下添加察看结果树:运行后可以在这里看到响应结果。
(7)完成以上步骤就算完成一个简单接口测试脚本的编写了,点击工具栏的绿色箭头运行脚本,点击保存就可以保存脚本,建议点击测试计划然后保存,这样作用于整个测试计划,而不是单一个线程组。
(8)通过运行脚本,点击察看结果树可以看到返回结果,这是一个广东广州的电话号码。
参数化有三种方式,CSV Data Set Config读取文件、助手函数读取文件、前置处理器中自行设置参数,下面逐个介绍:
(1)CSV Data Set Config读取文件:
这里设置了一个CSV文件,只有两列参数。
线程组中添加CSV Data Set Config,文件名为文件所在具体路径,编码为UTF-8,设置两个变量参数名称param_name和号码number,英文逗号隔开,第几个变量参数对应第几列的数据,这里param_name就是第一列的phone,number就是第二列的1858855。
引用的时候格式为${param_name}、${number},如下图所示:
如果CSV文件有多行数据,那么这种方式则是循环开始时读取第一行数据,逐次逐行地读取,多少次循环就读取到多少行。
(2)助手函数读取文件:
JMeter5.4在工具中选择函数助手对话框(Ctrl+Shift+F1),旧版JMeter在选项中,会有一个对话框出现,选择CSVRead(旧版是_CSVRead),“用于获取值的CSV文件 | *别名”指的是CSV路径,“CSV文件列号| next| *alias”指的是每行的第几个值,从0开始。点击生成就会有一个参数,将参数复制粘贴到需要的地方调用。“The result of the function is”会显示当前获取到的值。
这里出现了一个小问题,当我用JMeter5.4的助手函数读取第一个数据的时候,第一个字符会乱码,如果第一个不是字符串的话数据就会读取不出来,所以我给加了一列字符串到前面,参数化第二列和第三列就正常。
参数化第二列时“The result of the function is”正常显示获取到的值,以此类推参数化第三列时“CSV文件列号| next| *alias”的值就是2,复制粘贴到名称参数中。
需要注意的一点是这种方法如果有多行数据的话,第几个线程对应获取第几行的数据,与循环无关,所以如果想要获取多行数据就要在线程界面中设置多个线程。
这里我设置的CSV文件有两行数据,所以我线程数设置为2,点击运行。
可以看到第一行广州的号码断言已经成功通过,第二个肇庆号码断言不通过,说明两个线程各自读取到一行数据。
推荐使用CSV Data Set Config,尤其是数据文件较大时。
(3)前置处理器的用户参数:
名称就是调用时的参数名称,第几个线程对应第几个用户的数据,因此数据调用是和助手函数读取文件数据是一样的原理。如果接口参数比较少的话可以使用这种方法。
保存脚本时注意要先点击测试计划再保存,以防只保存的是单一线程,保存会生成一个jmx格式文件,该文件就是脚本文件。
这里有一个测试框架目录,能够比较好的分类测试产生的文件:
Apache Ant 1.10.9就是我的测试计划目录。
Apache Ant 1.10.9\ant就是我的Ant。
Apache Ant 1.10.9\data存放测试所需要的数据文件。
Apache Ant 1.10.9\JmeterAutoTest存放脚本文件和测试生成文件,其中又分了两个子目录。
Apache Ant 1.10.9\JmeterAutoTest\app和Apache Ant 1.10.9\JmeterAutoTest\pc,分别代表着app的接口测试和web或者客户端的接口测试,这两个子目录架构一样。
Apache Ant 1.10.9\JmeterAutoTest\pc\resultlog存放测试报告。
Apache Ant 1.10.9\JmeterAutoTest\pc\script存放脚本文件。
Apache Ant 1.10.9\JmeterAutoTest\pc\resultlog\jtl存放JMeter原生的的jtl格式测试报告文件。
Apache Ant 1.10.9\JmeterAutoTest\pc\resultlog\html则是存放将jtl格式文件转换后的html文件。
build.xml就是运行配置文件,Ant会自动查找该配置文件并执行,由于我只是简单做一个web接口测试,所以将其放在pc目录中。
当配置好Jenkins之后,先在命令提示符(管理员)中打开Jenkins,然后就可以在浏览器中输入:localhost:8080进入Jenkins,首次进入会安装插件和设置管理账号,登录管理账号会进入管理画面。新建item,选择Freestyle Project就好,进入到以下画面:
(1)构建触发器:
选择Build periodically定期运行,下面日程表中填写时间参数格式为:“* * * * *”。五个可选参数,分别代表着:
第一个是代表每小时中的具体分钟,5表示每小时的第5分钟。H\5表示每个5分钟,H(0-59)表示0到59分钟之间随机的一分钟。
第二个是代表每天中的具体小时,9-15/4表示九点到下午三点期间每隔4个小时 。
第三个是代表每个月中的具体日期,1-18表示每个月中的1到18号。
第四个是代表每年中的具体月份,1-11表示1到11月份。
第五个是代表每个星期中的具体日期,1-5表示周一到周五工作日。
小结一下:单一数字就表示该数字时执行一遍,a-b这种格式表示范围,a-b\c表示a-b这个范围内每一个c都会执行一遍。
上图表示每隔5分钟执行一次。
(2)构建步骤:
因为我们是使用Ant去完成执行脚本并发送测试报告这个过程的,因此选择Involve Ant。
点击高级,在Build file中输入build.xml的所在路径:
以上就是标题所说的全部内容,当然这也只是简单地演示了一遍,以后也肯定会有更加复杂的情景需要应对,但是只要掌握了基本的原理,那么剩下不懂的相信也可以通过摸索慢慢解决。