引言
作为测试一个接口,我们不但需要考虑到功能,还需要考虑到性能。在工作中,经常会碰到功能没问题,但是人一多了,响应就慢了,人一多了,应用挂了。这个时候老板会问,这个接口性能过关吗?如果我们只能回答说,没考虑到。那老板的答案就显然了。 但是我们在面试时或者在提交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这个模块进行模拟,其他的暂时不涉及。
如何启动
可以看到用idea打开之后会自动配置好MailAdminApplication,我们启动它即可。
访问地址
访问地址就是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,使用最多的就是截图的功能。涉及到:发送接口请求,接口响应断言,报告采集的监听器,设计定时器满足性能测试需求。 这里就不多做介绍了,后面我们会跟着案例,深入去熟悉每个元件的作用和使用。
jmeter进行品牌列表的接口测试流程
- 创建线程组
- 创建HTTP请求的取样器在线程组下面添加HTTP请求的取样器,作用是做HTTP请求。 咱们还是用品牌列表的GET接口做例子。填写上相应的请求信息。我们还差一个header。
- 创建HTTP信息头Authorization的头信息需要用配置元件中的HTTP信息头管理器进行设置。我们把token值放进去。
- 察看结果树有了请求,我们需要观察请求响应情况,这就用到了监听器中的察看结果树了。它会列出每次请求和响应的结果。
- 断言 有了接口,做测试当然少不了断言了。添加一个JSON断言。里面可以设置好断言的预期结果。这里我们就检查下返回的code是不是200。当然在提取json时,涉及到一个语法问题。看着是不是像postman的取值模式啊?
- 添加聚合报告 对于结果,只是结果树对于性能测试来说,还不够。我们需要更加专业的报告。聚合报告的作用是统计出这次测试接口响应情况和吞吐量(每秒完成的请求数)
- 运行 运行之后我们看下结果吧。在结果树就可以看到了。是不是跟postman的步骤上差不多类似呢。
模拟真实场景下的品牌查询
jmeter plugin安装
大家去官网安装,然后放到lib/ext目录下,重启jmeter。
plugins manager
在选项会多出一个Plugins Manager。 我们安装Standard Set,对线程组的扩展
模拟阶梯状用户并发场景
100个线程按阶梯状递增运行,每10秒加载20个线程,最后一个阶梯运行60秒
另一种并发方式,保持峰值访问
30秒内增加到100个用户,维持60秒,在开始1分钟后的30秒内增加200个用户
其他的监控
查看TPS的曲线图
小结
插件提供了更多方式的线程组和监控,其实都是针对现实中的场景做出的。所以,多想想现实的场景去设计接口测试。
最后小编在学习过程中整理了一些学习资料,可以分享给做java的工程师朋友们,相互交流学习,需要的可以加入我的学习交流群 716055499 即可免费获取Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,MysqL,Zookeeper,Tomcat,Docker,dubbo,Nginx等多个知识点的架构资料)
作者:dingyu002
来源:dinyu002
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。