相信在互联网领域的公司,对于微服务应该一点不陌生,越来越多的公司会采取这样的一种架构
微服务的特点:
- 业务拆成独立的系统,可单独发布,部署。
- 适合水平扩展,同时也成熟配套的服务治理
- 系统复杂度增高,端到端的一个业务可能调用十几个甚至几十个系统。调试和测试包括环境复杂度增,Debug问题难度加大。
那么测试活动相比传统行业需要做出一些调整,你可能会面临
- 快速的创建一套稳定的测试环境(保证所有服务的联通性,所有数据库的数据是最新产线的,对于使用场景你可以需要区分是单组件,还是几个组件,还是集成环境的几种模式,不同环境对于系统的一些配置可能是不同的。)
- 测试策略的识别:哪些需求是单个组件就可以完成,哪些需求是需要组件与组件之前的连调,哪些是需要端到端的测试
- 测试工具的配套,单组件测试的情况下你需要对上下游系统的MOCK,这种MOCK分为有逻辑的MOCK(简单模拟该系统逻辑), 和无逻辑的MOCK(只有做response的挡板),有些可能是JAVA RPC程序调用,有些是简单HTTP应用调用,需要在正在开始测试前准备好
- 微服务下系统非功能测试的考虑:
- 联通性
- 数据一致性(分布式事务的保证或者业务间数据一致性, 如商品支付了你得给人加积分啊这样的)
- 服务容错性(当某服务不可用是是否做了服务降级)
- 服务调用性能(是否会因为某个系统处理慢出现超时)
- 还有一些不确定的问题(基于使用的技术做积累发现的一些问题
- 当前无论是传统All In One的还是微服务的都需要有自动化测试的回归,都知道自动化测试也是分层的,但是做的好的稳定的我觉得并不多,我司也只是做了接口驱动业务的主流程测试(没有专业的自动化团队每个人都需要参与自动化,做对于团队最有价值的事,保证系统主要业务功能)
- 单元测试(能多做当然最好,但是实际并没有多少公司有,或者也不多)
- API测试(这里主要讲的是业务驱动)
- 契约测试(只是为了保证接口与相应是我们之前约定的,契约测试是一种方法,但是不非得就要做,保证的方法可以是其他)
- 集成测试(有条件的,做几个冒烟的用例就行了,毕竟集成后,环境复杂自动化的稳定性未必高)
- UI测试(我一直不怎么建议做这个,大家随意,我这里指的是WEB非APP)
这里只是简单的分享了一下对于微服务下的测试的需要考虑的问题,对于需要转型微服服的小伙伴有一些帮助。