软件测试小白:如何靠Jmeter摆脱搬运工角色?
很多接口自动化测试人员都知道,实际上我们进行接口自动化时,大部分人都是依赖于开发维护的接口设计文档,或者是直接使用抓包工具获取需要的接口数据。
然后再去按照ULR、headers、body进行各种组装请求,将接口的基础配置从文档或者抓包工具复制搬运到到对应的接口自动化工具(例如Postman、Jmeter、Robotframework等)上面进行二次组合,最后再通过工具自身发起接口请求。
实际上Jmeter自身提供了“录制”的功能,测试人员可以直接通过“录制”自己的一系列操作,然后对录制起来的请求进行二次优化设计,可以大大减少前期的基础编辑的时间。
前期物料准备
接口自动化流程和功能测试流程一样,在开始测试之前都需要进行一些物料准备,例如功能测试需要确定测试环境(测试1、测试2或者直接预生产测试)、测试设备(Android系统、ios系统等),对应的今天要实践的接口自动化,需要准备以下物料:
1.Jmeter工具安装
2.代码环境
3.测试系统的账号/密码等信息
摆脱搬运的神器
Jmeter的录制功能原理和抓包工具一样,都是通过HTTP代理服务器进行,所以在进行录制之前需要设置代理HTTP(S) Test Script Recorder,主要设置的内容如下:
1.代理的ip和port,一般ip使用默认的,端口可定义8888(注意浏览器代理端口需要跟Jmeter的保持一致,如下第一图);
2.设置录制下来的请求保存的路径,选择保存到“测试计划TestPlan-线程组Thread Group”下(如下第一图);
3.(重点)设置过滤,过滤掉不必要的请求,过滤可选择两种模式:一种是只录制某规则的请求,一直是不录制某规则的请求
(如下第二图)。


启动录制:

录制数据

去除不必要的接口请求,仅保留本次自动化的目的的接口:登录+获取XX详情页数据。

1.优化HTTP Header Manager
Jmeter脚本录制成功后,每个HTTP请求下都会自动带一个默认的HTTP信息头管理器,但是很多数据实际接口需要的信息头是通用的且只需要两个字段就可以,所以优化前后对比如下:

优化完后,将该管理器移动到线程组同一级别,这样该测试计划下的所有请求可共用一个信息头管理器HTTP Header Manager。
2.处理接口依赖
由于录制时,打开XX详情页需要依赖于登录信息,所以需要在回放脚本前需要手动处理接口上下依赖的登录信息。
本文案例的依赖有两个,子系统的登录依赖于主系统登录成功返回的token,而打开XX详情页接口依赖于子系统登录成功返回的token,所以需要分别通过jemter自带的后置处理器提取登录成功的信息。
2.1主系统和子系统登录依赖:
i.使用后置处理器Regular Expression Extractor通过正则表达式提取Token;
ii.在下一个接口中直接引用提取的Token变量。
2.2引用HTTP Cookie Manager统一管理子系统下的接口请求:
子系统登录成功后,接下来子系统内的所有请求均使用同一个登录信息,所以可引用HTTP Cookie Manager统一管理。
接口之间的依赖处理详细如下图:

3.处理接口上的时间戳和增加监听器
3.1时间戳可使用Jemter自带的函数助手,自动生成时间戳变量;
3.2监听器:可选择View Results Tree先保证接口能自动回放,后续再根据需要添加其他监听器。
4.添加循环控制器,方便对需要压测的接口进行管理。
实战结果

总结
通过上述操作可以看到,相对比日常的接口自动化,我们减少了url、method、data/body、以及信息头等的处理,我们的工作变成集中在重新梳理下接口的依赖以及添加监听器,就可以完成接口自动化了。
当然了,如果是只进行一两个接口可能这个录制功能看起来也不是特别大的作用,可是如果遇到是几十个接口,那么每个接口的需要填充数据都通过录制来完成,这个整体上都可以说能节省20%的工作量,大大提高了测试人员的工作效率。
Jmeter的录制功除了能提高工作人员的效率外,也存在一定的弊端,例如:
冗余请求
录制时可能存在很多非必要的请求,需要人工花费时间去剔除。
解决方法:优化正则表达式。
参数化硬编码
用户名/密码以及环境变量等录制时取实时配置数据,配置数据变动时,就需要挨个接口去修改。
解决方法:需要人工去提取变量。
录制脚本重用性差
所有请求都集中在一个文件夹,脚本复用性低,例如相同请求在不同模块内无法直接进行复用。
解决方法:需要对请求进行梳理分类。
以上为个人录制遇到的部分弊端,这些弊端需要测试人员对录制好的脚本进行模块化和参数化变量等设计。
就好比HR招聘了一堆人进来后,接下来要给每个员工分配工号基本信息、安排部门等,在通讯录、财务系统等内直接引用工号即可获取到员工的最新基本信息,若是哪个项目需要测试,直接把测试部门推上去就可以,这就是参数化变量和模块化的作用。
最后有一个小小的建议:初学者还是要一个脚印的去学习,不能一开始就依赖于录制功能,只有不断实践,才会学得更深!
欢迎加VX:xiaoxianchen89,回复B站,免费加入软件测试学习交流群,领更多测试学习资料