使用JMeter实现Agileone的接口测试
作者:强哥   类别:测试开发    日期:2018-02-02 15:27:46    阅读:2598 次   消耗积分:0 分


实验简介


Apache JMeter是一款100%纯Java应用程序,设计用于接口测试和性能测试。它最初是为测试Web应用程序而设计的,但是经过各类插件的扩展,目前针对常见的各类协议接口都有良好的支持。JMeter简化了协议级接口的发送和对响应的断言,同时对多线程的支持及各类并发场景的设计,和统计数据的处理都变得非常简单。本实验将为大家详细讲解如何利用JMeter完成基于HTTP协议的接口测试。



实验目的


(1) 熟练运用JMeter的常见组件的功能及用法。

(2) 熟练使用JMeter完成基于协议的接口测试。

 


实验流程


1. JMeter的功能介绍


目前JMeter的最新版本是3.2,我们可以直接在其官方网站“http://jmeter.apache.org/”下载最新版本,并在一台安装了Java的环境中直接运行其“bin”目录下的“ApacheJMeter.jar”文件即可。启动后主界面如下图所示:


 20180202_150841_982.png

 

目前JMeter能够支持和测试许多不同的应用程序/服务器/协议类型:


(1) Web的HTTP,HTTPS协议。

(2) SOAP / REST Webservices。

(3) FTP 文件传输协议。

(4) 基于JDBC协议的数据库测试,当然,也可以用该方法生成大量数据。

(5) LDAP协议。

(6) JMS协议。

(7) 邮件传输协议:SMTP, POP3和IMAP。

(8) 本地命令或Shell 脚本。

(9) TCP/UDP。

(10) 直接通过其内置的BeanShell脚本语言调用Java程序,也可以被Java程序调用。

 

除此之外,JMeter还具备如下一些功能:


(1) 基于Java开发的全功能测试IDE,支持直接录制协议请求。

(2) 基于Java开发,支持Linux、Windows、MAC OS等各类平台。

(3) 可以生成完整的动态HTML报告。

(4) 可以从各类响应格式、HTML、JSON、XML或任何文本格式提取数据并进行断言。

(5) 多线程框架允许多线程并发采样,同时通过不同的线程组进行不同功能的同时采样。

(6) 支持远程多机协同测试。

(7) 支持直接通过命令行运行测试计划,为持续集成提供了快速运行入口。

(8) 支持利用Java和BeanShell进行编程处理,提升测试脚本的灵活性和可扩展性。

(9) 通过JMeter的插件管理器,可以扩展更多的应用。

(10) 支持多语言,包括英文,简体和繁体等。

 

2. 常用组件介绍


(1) 测试计划(Test Plan):用来描述一个性能测试,包含与本次性能测试所有相关的功能。也就说JMeter创建的所有内容是于基于一个测试计划的。

(2) 线程组(Thread Group):线程组可以看做是一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。如果进行接口测试,我们可以设置线程数量为1即可。

(3) 配置元件(Config Element):用于提供对静态数据配置的支持。针对HTTP协议,通常我们需要为某个线程组创建HTTP Cookie管理器。

(4) 定时器(Timer):用于为请求之间设置等待时间,等待时间是性能测试中常用的控制客户端请求发送速度的重要手段,也便于模拟真实的使用场景。

(5) 前置处理器(Per Processors):用于在实际的请求发出之前对即将发出的请求进行特殊处理。

(6) 取样器(Sampler):用于处理协议交互的核心组件,所有跟协议交互的参数均在此设置。

(7) 后置处理器(Post Processors):用于对发出请求后得到的服务器响应进行处理。

(8) 断言(Assertions):用于检查测试中得到的相应数据等是否符合预期。

(9) 监听器(Listener):用来对测试结果数据进行处理和可视化展示的一系列元件。 图行结果、查看结果树、聚合报告等都是我们经常用到的元件。

(10) 逻辑控制器(Logic Controller):包括两类无件,一类是用于控制测试计划中各Sampler节点发送请求的逻辑顺序的控制器,常用的有“如果(If)控制器 、Switch Controller 、Runtime Controller、循环控制器”等。另一类是用来组织可控制Sampler节点的,如“事务控制器、吞吐量控制器”。

 

3. 测试Agileone的登录接口


(1) 在“测试计划”中创建一个新的“线程组”(位于Threads(Users)的子菜单中),保持默认设置即可。

(2) 为该线程组添加一个“HTTP请求”的Sampler。并将该请求命名为“登录接口”。

(3) 为该HTTP请求设置请求地址,Post请求正文,关键参数等,如下图所示:


20180202_150851_559.png 

 

(4) 保存当前测试计划到任意目录。然后我们就可以直接点击工具栏中的绿色三角形 “启动”按钮将上述构建出的HTTP的Post请求发送给服务器。

(5) 为该请求添加“断言”,否则我们无法知道,该登录接口是否正确实现。在“登录接口”上点击右键创建一个“响应断言”,并设置其断言方式为检查响应文本中是否包含“successful”。


20180202_150858_594.png 

 

(6) 单纯只有上述的断言,我们仍然无法在JMeter当中查看结果,所以我们还需要为“登录接口”创建一个叫做“察看结果树”的“监听器”。保持默认设置即可。这样,当我们运行完一次接口测试后,直接可以在“察看结果树”中看到本次测试的执行结果。至此,一个基于HTTP协议的接口测试便完成了。


20180202_150904_914.png 

 

4. 测试Agileone的需求提案

(1) 以上述同样的方式,在线程组中添加一个新的HTTP请求,并命名为“新增需求提案”,同时本次我们直接使用“key=value”的方式来设置POST请求的正文内容,设置如下:


20180202_150911_203.png 

 


请大家注意一点的地方是,上述截图中请求的正文内容第一行是空行,这纯粹是为了显示效果。大家在使用时请勿在“Body Data”的前面加一个空行,这样请求会发送失败。

 

(2) 并为该取样器添加“响应断言”和“察看结果树”。由于新增一条需求提案对应的响应是该条新增的记录的ID号,是变化的,所以我们的“响应断言”必须使用正则表达式,设置如下:


20180202_150917_603.png 

 

(3) 发送该请求,我们会在“察看结果树”中看到,并没有成功新增需求,响应内容为“no_permission”,这个错误我们在学习Java的接口测试部分遇到过,原因是因登录和新增两个请求并没有进行状态的维护,导致服务器并不认为当前用户已经处理登录状态。我们需要使用“HTTP Cookie管理器”来维护与服务器之间的状态。


(4) 在当前“线程组”上新建一个“HTTP Cookie管理器”,保持所有的默认设置,不需要做任何多余的操作。重新运行当前线程组的两个请求,此时我们通过“察看结果树”可以看到,一条需求提案新增成功。


20180202_150923_750.png 

 

5. 为请求正文设置随机数。


由于Agileone的需求提案模块在新增时,不允许标题和内容重复,所以我们必须为POST请求正文中的标题和内容设置随机数来保证每次成功执行。这里我们可以使用JMeter自带的“函数助手”来生成一个指定范围的随机娄。


(1) 为取样器“新增需求提案”新增一个“前置处理器”,类型为“用户参数”。为该用户参数取名为“sequence”,其值我们使用函数助手来生成。

(2) 在菜单“选项”中打开“函数助手对话框”,从下拉列表中选择“__random”,并为其设置最小值和最大值范围,设置完成后点击“生成”按钮,将生成该随机数生成器的调用方式。


20180202_150930_449.png


(3) 将该随机数生成器代码复制到“sequence”参数中对应的值中,并且勾选“每次迭代更新一次”。


20180202_150935_895.png 


(4) 在“新增需求提案”的“Body Data”请求正文中,将标题和内容对应的序号用“${sequence}”来取该随机数的值,然后每一次发送请求,该值都会更新为一个不一样的随机数。


20180202_150941_940.png 

 

6. 使用循环控制器执行测试


循环控制器可以指定让某一个取样器循环运行N次。比如上述的“新增需求提案”取样器,由于我们已经设置了使用随机数作为标题和内容的标记,所以我们可以运行多次而不用担心重复,这种情况循环控制器当然也可以正常使用。


(1) 为线程组添加一个“逻辑控制器”下面的“循环控制器”。

(2) 为该“循环控制器”设置循环次数,此处我们设置为10次。

(3) 将“新增需求提案”取样器拖动到该循环控制器下,这样就表示循环运行10次取样器。

(4) 最后,我们进入Agileone的需求提案模块中查询运行结果,的确新增了10条。


20180202_150948_625.png 


思考练习


(1) 将前面用Java开发的协议级接口测试代码移植到JMeter上来。

(2) 自学了解BeanShell脚本语言的语法规则,并完成脚本优化。

(3) 自学使用JDBC取样器操作数据库。

(4) 自学使用JMeter的函数助手完成CSV文件读取并进行数据驱动测试。






为了答谢大家对蜗牛学院的支持,蜗牛学院将会定期对大家免费发放干货,敬请关注蜗牛学院的官方微信。


20181009_153045_341.jpg

   
版权所有,转载本站文章请注明出处:蜗牛笔记, http://www.woniunote.com/article/90
上一篇: 蜗牛学院成渝两校区同时开班,2018让我们一同继续前行!
下一篇: 使用JMeter实现Phpwind的性能测试
提示:登录后添加有效评论可享受积分哦!
最新文章
    最多阅读
      特别推荐
      回到顶部