Windows系统JMeter+Ant+Jenkins实现接口测试自动化持续集成

本文详述了如何配置JDK、JMeter、Ant和Jenkins,以实现接口测试的自动化和持续集成。首先,介绍了各工具的下载与安装,接着配置环境变量,特别是JDK生成JRE的过程。然后,详细讲解了JMeter的配置和使用,包括接口测试脚本的编写及参数化。接着,阐述了Ant的配置和Build.xml文件的设置,以及如何发送测试报告邮件。最后,讨论了Jenkins的安装和配置,包括定期执行任务的设定。通过这些步骤,可以实现接口测试的自动化执行和报告发送。

一、安装环境:

想要实现标题所说内容需要安装配置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/

 

1、配置JDK&JRE:

我们需要安装配置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的过程:

1)、打开环境变量编辑界面:

右键此电脑—属性—高级系统设置—环境变量。

上方的变量都是用户变量,会因为登录用户不同而不同,下方的就是需要操作的系统变量

2)、添加系统变量:

首先添加一个变量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单独配置环境变量。

3)、验证环境配置:

打开CMD窗口(Win+R后输入CMD回车,或者右键左下角Win图标命令提示符,如果需要高权限操作就选择命令提示符(管理员)),输入javac,如果配置成功就会有相关的一大串提示。

 

2、配置JMeter :

安装完JDK和JRE后就可以接着安装JMeter了,JMeter下载下来之后直接解压出来就算是安装完成了,Windows系统只需要打开目录中的jmeter.bat就会自动运行JMeter,但是要想实现接口自动化测试持续集成则需要JMeter也添加进系统变量中,Ant同理。

1)、添加JMETER_HOME变量,变量值浏览JMeter目录,确定:

2)、编辑CLASSPATH变量:

在“;”号后添加以下代码:

%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;

 

3)、编辑Path系统变量:

新建%JMeter_HOME%\bin,点击确定,然后一路点击确定退出编辑环境变量。

4)、验证配置:

一样的方式打开CMD窗口,输入jmeter,如果JMeter可以运行起来就说明配置没问题了。

 

3、安装配置Ant:

Ant也是解压即用,解压出来后,先将JMeter目录中extras子目录中的文件复制粘贴到Ant目录的lib子目录中。

1)添加ANT_HOME变量,变量值为Ant目录:

这里因为我设置了一个持续集成的目录框架,因此将ant目录放置在一个大文件夹Apache Ant 1.10.9中。

2)编辑CLASSPATH变量:

在“;”号后添加以下代码:

%ANT_HOME%\bin;

3)编辑Path系统变量:

新建%ANT_HOME%\bin,点击确定,然后一路点击确定退出编辑环境变量。

4)验证配置:

一样的方式打开CMD窗口,输入ant -version,如果显示Ant的版本信息就说明配置没问题了。

5)添加所需jar包:

基于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子目录中。

6)配置Build.xml文件:

该文件默认是没有的,需要自己生成,内容如下,要进行修改的地方都已经中文注释提示设置了:

<?xml version="1.0" encoding="utf-8"?>
<project name="pc" default="all" basedir="D:\Program\Apache Ant 1.10.9\JmeterAutoTest">
    <tstamp>
        <format property="time" pattern="yyyyMMddhhmm" />
    </tstamp>
    <!-- 设置成自己本地的Jmeter目录 -->
    <property name="jmeter.home" value="D:\Program\Apache Jmeter 5.4" />
    <!-- 设置jmeter生成jtl格式的结果报告的路径 -->
    <property name="jmeter.result.jtl.dir" value="D:\Program\Apache Ant 1.10.9\JmeterAutoTest\pc\resultlog\jtl" />
    <!-- 设置jmeter生成html格式的结果报告的路径 -->    
    <property name="jmeter.result.html.dir" value="D:\Program\Apache Ant 1.10.9\JmeterAutoTest\pc\resultlog\html" />
    <!-- 生成的报告的前缀 -->
    <property name="ReportName" value="TestReport" />
    <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="mail_from" value="xxxxxxxxx@qq.com" />
    <property name="mail_to" value="xxxxxxxxx@163.com" />
    <!-- 电脑地址 -->
     <!-- <property name="ComputerName" value="jkqsh-l0285" />-->
    <target name="all">
        <antcall target="test" />
        <antcall target="report" />
		<antcall target="send" />
    </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:\Program\Apache Ant 1.10.9\JmeterAutoTest\pc\script" />
        </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-detail-report_21.xsl">
            <param name="dateReport" expression="${time}"/>
	</xslt>
        <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->
        <copy todir="${jmeter.result.html.dir}">
            <fileset dir="${jmeter.home}/extras">
                <include name="collapse.png" />
                <include name="expand.png" />
            </fileset>
        </copy>
    </target>
    <!-- 发送邮件 -->
	<target name="send" >
        <!-- 设置邮箱的登录方式,这里选择smtp方式所以是smtp开头,QQ邮箱默认端口587 -->
        <!-- user就是发送邮箱,password是授权码,在邮箱的安全设置里可以找到 -->
        <mail mailhost="smtp.qq.com" mailport="587" subject="Test Report!" messagemimetype="text/html" user="xxxxxxxxx@qq.com" password="xxxxxxxxxxxxxxxx" >
        <from address="${mail_from}"/>
        <to address="${mail_to}"/>
        <!-- 邮件内容 -->
        <message>This email was sent automatically by ANT. Please check the automation test report. Thank you!</message>
		<attachments> 
			<fileset dir="${jmeter.result.html.dir}">
				<include name="${ReportName}${time}.html"/>
			</fileset>
		</attachments>
		</mail>
    </target>
</project>

4、配置Jenkins:

1)配置Jenkins:

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持续集成。

1、JMeter的使用:

1)UI:

首先启动JMeter,进入以下画面:

设置中文方法如下: 

 非常简单的UI,里面的功能都有中文介绍,不再赘述。

2)组件:

测试计划:所有的测试都要从测试计划开始,可以理解为这就是项目的开始。

线程:就是为接口测试准备的线程,可以理解为这是模拟用户发起的一个请求,线程有三个组件,线程组是必要的,因为这是发起的请求,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格式。

当掌握了以上组件的使用,那么就可以进行基本的接口测试了。

3)接口测试脚本的编写:

进行接口测试之前,我们会获得接口文档,里面记录着关于这个接口的所有详细信息,包括请求方法、协议、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)通过运行脚本,点击察看结果树可以看到返回结果,这是一个广东广州的电话号码。

4)脚本编写进阶:参数化

参数化有三种方式,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)前置处理器的用户参数:

名称就是调用时的参数名称,第几个线程对应第几个用户的数据,因此数据调用是和助手函数读取文件数据是一样的原理。如果接口参数比较少的话可以使用这种方法。

5)保存脚本:

保存脚本时注意要先点击测试计划再保存,以防只保存的是单一线程,保存会生成一个jmx格式文件,该文件就是脚本文件。

 

2、测试目录框架:

这里有一个测试框架目录,能够比较好的分类测试产生的文件:

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目录中。

3、Jenkins的使用:

当配置好Jenkins之后,先在命令提示符(管理员)中打开Jenkins,然后就可以在浏览器中输入:localhost:8080进入Jenkins,首次进入会安装插件和设置管理账号,登录管理账号会进入管理画面。新建item,选择Freestyle Project就好,进入到以下画面:

1)这里需要配置的有:

(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的所在路径:

2)点击保存完成配置。

3)点击Build Now运行计划。

 

以上就是标题所说的全部内容,当然这也只是简单地演示了一遍,以后也肯定会有更加复杂的情景需要应对,但是只要掌握了基本的原理,那么剩下不懂的相信也可以通过摸索慢慢解决。

Apache JMeter (apache-jmeter-5.4.3.zip)可用于测试静态和动态资源、Web 动态应用程序的性能。 它可用于模拟服务器、服务器组、网络或对象上的重负载,以测试其强度或分析不同负载类型下的整体性能。 Apache JMeter 功能包括: 能够加载和性能测试许多不同的应用程序/服务器/协议类型: 网络 - HTTP、HTTPS(Java、NodeJS、PHP、ASP.NET,...) SOAP/REST 网络服务 FTP 通过 JDBC 数据库 LDAP 通过 JMS 的面向消息的中间件 (MOM) 邮件 - SMTP(S)、POP3(S) 和 IMAP(S) 本机命令或 shell 脚本 TCP Java 对象 全功能测试 IDE,允许快速记录测试计划(来自浏览器或本机应用程序)、构建和调试。 CLI 模式(命令行模式(以前​​称为非 GUI)/无头模式)从任何 Java 兼容操作系统(Linux、Windows、Mac OSX 等)加载测试 完整且可随时呈现的动态 HTML 报告 通过从最流行的响应格式、HTML、JSON、 XML或任何文本格式中提取数据的能力轻松关联 完全可移植性和100% Java 纯度。 完整的多线程框架允许多个线程并发采样和不同线程组同时采样不同功能。 缓存和离线分析/重放测试结果。 高度可扩展的核心: 可插拔采样器允许无限的测试功能。 可编写脚本的采样器(与 JSR223 兼容的语言,如Groovy和 BeanShell) 可以使用可插拔计时器选择多个负载统计信息。 数据分析和可视化插件允许极大的可扩展性和个性化。 函数可用于为测试提供动态输入或提供数据操作。 通过适用于 Maven、Gradle 和 Jenkins 的第3方开源库轻松实现持续集成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值