接口性能
引言
作为测试一个接口,我们不但需要考虑到功能,还需要考虑到性能。在工作中,经常会碰到功能没问题,但是人一多了,响应就慢了,人一多了,应用挂了。这个时候老板会问,这个接口性能过关吗?如果我们只能回答说,没考虑到。那老板的答案就显然了。 但是我们在面试时或者在提交bug时,可以提出非功能性的bug,面试官或者开发一定会另眼相看的。 这个系列课程的目的还是着重于接口测试,对于接口的性能会有所涉及,但是不会很深入。建议想看性能专题的同学,请网上搜索专门的性能课程。
考虑的因素
一个接口要做非功能性的测试,基本上有这么几点:
- 并发 -- 考察接口在多人操作的情况下,是否跟预期不一致,比方数据混乱
- 幂等检验 -- 考察接口是否需要进行幂等性校验,即多次操作的结果是否相同
- 压力 -- 接口是否能承受项目规定的压力,可以在一定的压力下正常运行
工具
做接口性能当然需要考虑工具,这是专业的事情,需要选择好工具。一般常用的工具是LoadRunner和JMeter。 LoadRunner是需要收费的,在体验上也是非常不错的。 JMeter是开源的,现在是apache在维护。 后面的接口性能部分我会用JMeter作为测试工具进行。
JMeter的安装
jmeter安装非常简单。大家只需要去官网下载即可。 jmeter是java开发的,所以需要依赖jre的运行环境。大家需要先把java安装好。 另外jmeter默认的语言是英文,切换中文也很简单。修改bin/jmeter.properties中的language=zh_CN就可以了。
用mall商城项目进行接口实战
mall是一个开源的商城项目,基本上功能是跟我们在市面上看到的商城项目大同小异的。所以,拿这个项目做实战是非常合适的。同时,这个项目对于新手来说,也是很庞大的。需要花一点时间去熟悉它。
github地址
地址:github.com/macrozheng/… 把代码下载到本地之后,你需要按照要求安装好idea和mysql。我们后面先用mall-admin这个模块进行模拟,其他的暂时不涉及。
如何启动

访问地址
访问地址就是http://localhost:8080。因为是个后端项目,所以不会有页面,我们直接访问http://localhost:8080/swagger-ui.html即可。
拿到admin的token
这个需要花费点时间了。我们需要在mall-admin项目里创建一个Test类,这样写:
@RunWith(SpringRunner.class)
@SpringBootTest
public class TokenTest {
@Resource
private JwtTokenUtil tokenUtil;
@Resource
private UmsAdminService adminService;
@Test
public void genTokenTest() {
UmsAdmin umsAdmin = adminService.getAdminByUsername("admin");
UserDetails admin = new AdminUserDetails(umsAdmin,
adminService.getResourceList(umsAdmin.getId()));
String token = tokenUtil.generateToken(admin);
System.out.println("填写Authorization的值:Bearer " + token);
System.out.println("此token的用户为:" + tokenUtil.getUserNameFromToken(token));
}
}
运行这个genTokenTest,你就可以拿到Authorization对应的token值了。
小结
到这里,我们的mall-admin项目的环境就安装到这了。
jmeter接口测试案例
jmeter工具介绍

jmeter进行品牌列表的接口测试流程
- 创建线程组
在测试计划上创建一个线程组。线程组的作用就是模拟多少的用户访问,也就是多少并发。 - 创建HTTP请求的取样器
在线程组下面添加HTTP请求的取样器,作用是做HTTP请求。 咱们还是用品牌列表的GET接口做例子。 填写上相应的请求信息。我们还差一个header。 - 创建HTTP信息头
Authorization的头信息需要用配置元件中的HTTP信息头管理器进行设置。我们把token值放进去。 - 察看结果树
有了请求,我们需要观察请求响应情况,这就用到了监听器中的察看结果树了。它会列出每次请求和响应的结果。 - 断言
有了接口,做测试当然少不了断言了。添加一个JSON断言。
里面可以设置好断言的预期结果。这里我们就检查下返回的code是不是200。当然在提取json时,涉及到一个语法问题。看着是不是像postman的取值模式啊? - 添加聚合报告
对于结果,只是结果树对于性能测试来说,还不够。我们需要更加专业的报告。
聚合报告的作用是统计出这次测试接口响应情况和吞吐量(每秒完成的请求数) - 运行 运行之后我们看下结果吧。在结果树就可以看到了。是不是跟postman的步骤上差不多类似呢。
模拟真实场景下的品牌查询
jmeter plugin安装
大家去官网安装,然后放到lib/ext目录下,重启jmeter。
plugins manager


模拟阶梯状用户并发场景

另一种并发方式,保持峰值访问

其他的监控

小结
插件提供了更多方式的线程组和监控,其实都是针对现实中的场景做出的。所以,多想想现实的场景去设计接口测试。