0
点赞
收藏
分享

微信扫一扫

Java架构师:测试【单元测试、接口测试、压力测试(siege工具)、回归测试】【根据压测结果评估所需硬件资源】

一、测试概述

测试主要用来确保代码的质量,防止发布到线上环境,出现一些的重大bug;没有经过测试的服务,是脆弱不堪的;

  • 单元测试:测试某一个具体的函数或者类是否功能ok;
  • 接口测试:测试服务的健康状态,结果是否如期返回;
  • 压力测试:测试服务的响应速度,评估能否达到业务上线要求;
  • 回归测试:服务发布前,跑完所有的测试用例,防止本次改动引入新的bug;
  • 自动化测试:上述测试类型,都应该自动化完成;

二、测试类型

1、单元测试

测试某一个具体的函数或者类是否功能ok

  1. 测试函数以test_开头;
  2. 在函数体加入assert,让unittest知道当前测试成功还是失败;
  3. 在setUp()和tearDown()函数里声明测试开始前和结束后的命令;

在这里插入图片描述

2、接口测试

测试服务的健康状态,
结果是否如期返回;
在这里插入图片描述

3、压力测试

测试服务的响应速度,
评估能否达到业务上线要求;

在这里插入图片描述
siege工具

在这里插入图片描述
当前,qps(每秒请求数)为:1095/59.48=18.41,当然,还没到百度的极限,实践中应该提供极限qps。

实践中,需要得到

  • 一个进程下,能处理的特定字数下的qps,并观察其内存、CPU、显存占用;
  • 然后根据业务方处理需求,估算机器资源;

例子:
1个分词服务,500字文本,最大qps为100,资源占用(内存4G,CPU2核,显存2G),要达到业务的 1000万/天 的处理量,平均字数为500,需要开多少实例(进程)、需要多少硬件资源?

4、回归测试

服务发布前,跑完所有的测试用例;

尽管本次只加了一个小功能,但仍需要回测所有的测试用例,防止本次改动对其它代码带来影响;

5、自动化测试

测试全丢给测试工程师来写?

  1. 开发同学的代码,自己最清楚,要别人给完成单元测试、接口测试等,沟通成本高;
  2. 微服务下,单个服务不会很复杂,开发同学自己完成这些绰绰有余;
  3. 前述测试都可以自动化,成本也不高;

测试工程师干嘛呢?进行端到端测试,即在产品页面上操作,黑盒测试

测试金字塔

在这里插入图片描述

  • 越往下,测试用例数量越多;
  • 越往下,测试周期越快,越容易找到问题;
  • 越往上,信心越充足;
举报

相关推荐

0 条评论