接口性能测试

引言

作为测试一个接口,我们不但需要考虑到功能,还需要考虑到性能。在工作中,经常会碰到功能没问题,但是人一多了,响应就慢了,人一多了,应用挂了。这个时候老板会问,这个接口性能过关吗?如果我们只能回答说,没考虑到。那老板的答案就显然了。 但是我们在面试时或者在提交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进行品牌列表的接口测试流程

  1. 创建线程组

    创建线程组在测试计划上创建一个线程组线程组的作用就是模拟多少的用户访问,也就是多少并发。

  2. 创建HTTP请求的取样器创建HTTP请求的取样器线程组下面添加HTTP请求的取样器,作用是做HTTP请求。 咱们还是用品牌列表的GET接口做例子。品牌列表填写上相应的请求信息。我们还差一个header。
  3. 创建HTTP信息头

    HTTP信息头

    Authorization的头信息需要用配置元件中的HTTP信息头管理器进行设置。我们把token值放进去。
  4. 察看结果树

    察看结果树

    有了请求,我们需要观察请求响应情况,这就用到了监听器中的察看结果树了。它会列出每次请求和响应的结果。
  5. 断言 有了接口,做测试当然少不了断言了。添加一个JSON断言。

    JSON断言

    里面可以设置好断言的预期结果。这里我们就检查下返回的code是不是200。当然在提取json时,涉及到一个语法问题。看着是不是像postman的取值模式啊?

    提取code

  6. 添加聚合报告 对于结果,只是结果树对于性能测试来说,还不够。我们需要更加专业的报告。

    聚合报告

    聚合报告的作用是统计出这次测试接口响应情况和吞吐量(每秒完成的请求数)
  7. 运行 运行之后我们看下结果吧。在结果树就可以看到了。是不是跟postman的步骤上差不多类似呢。

模拟真实场景下的品牌查询

jmeter plugin安装

大家去官网安装,然后放到lib/ext目录下,重启jmeter。

plugins manager

插件管理

在选项会多出一个Plugins Manager。 我们安装Standard Set,对线程组的扩展

Standard Set

模拟阶梯状用户并发场景

Concurrency Thread Group

100个线程按阶梯状递增运行,每10秒加载20个线程,最后一个阶梯运行60秒

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

持续加压场景

30秒内增加到100个用户,维持60秒,在开始1分钟后的30秒内增加200个用户

其他的监控

Transactions per Second 查看TPS

查看TPS的曲线图

小结

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

 

最后小编在学习过程中整理了一些学习资料,可以分享给做java的工程师朋友们,相互交流学习,需要的可以加入我的学习交流群 716055499 即可免费获取Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,MysqL,Zookeeper,Tomcat,Docker,dubbo,Nginx等多个知识点的架构资料)

作者:dingyu002

来源:dinyu002

相关文章

Jmeter:Authenticationcredentialswerenotprovided上次在使...
初次使用jmeter时,结果树中返回的数据为未转码内容,如下:...
jmeter默认语言设置: 1、临时设置:进入options--ChooseLa...
第一步:打开jmeter工具。 第二步:点击鼠标右击,点击添加...
在之前的博文中,Jmeter二次开发——基于Java请求,已介绍了...
打开虚拟机然后用远程连接工具SSH连接到数据库将serveragent...