微服务下分层测试及端到端测试的讨论,基于群讨论整理:

原始问题:
早上好,群里做微服务架构(或者前后台分开测试)下的测试大侠,有 2 点困惑能否来指点指点 [抱拳]
1.分层测试还是端到端测试为主呢?
a.如果端到端测试,如何解决前端对后台测试数据的依赖需求,及测试效率问题。
b.如果是分层测试,这个层怎么分,谁来保障端到端的质量。
2.如何管理各服务的接口定义,解决二义性问题和接口版本更新问题呢?

以下是大家的回复整理,供有类似问题的同学参考,欢迎补充。


收集大家整体的建议主要有以下两点:
1、微服务模式下,测试前置,建议分层测试,可以使用契约测试模式来进行
2、先分层,再端到端测试。

下面是原聊天记录,里面有一些具体的实施建议。



李老师 08:04

微服务建议分层测试,微服务可以理解为小应用,每个小应用都提供对外接口访问,这个接口是需要测试的,至于接口的构建与传统接口测试没区别

李老师 08:05

微服务需要测试前置,测试需要提前介入了

恒老师 08:05

第一个问题,我觉得是分阶段的,就如单元测试和集成测试一样。每一个微服务本身业务逻辑的验证完成后,还要保证集成之后,上下游接口依赖调用时候,数据格式啊,异常啊等等是否正常。

李老师 08:05

接口测试好后,至于前端调用也是需要的,即使有问题也容易修复了

李老师 08:06

关于接口效率问题,可以了解一下契约测试

李老师 08:07

即接口变化后,会有机制通知接口相关人员,保证大家信息同步

恒老师 08:07

数据问题在初期都是 mock,后期真实数据吧

李老师 08:08

不绝对哦

恒老师 08:08

@ 李老师?你们同步怎么做的?我们经常会出现信息不同步的情况

李老师 08:09

这点我们比较
low,就是邮件

李老师 08:09

业界有
相关工具

叶老师 08:10

通知不都是邮箱或者 rtx 吗?

恒老师 08:10

有点意思。

斟老师 08:10

API 平台,涉及接口改动都通知到项目组成员,可以通过短信、邮件和微信

李老师 08:11

微服务,建议大家自己写写代码就明白了,可以试试 soringboot,上手快

斟老师 08:11

接入企业公众号可以直接发微信

李老师 08:11

springboot

叶老师 08:11

再不行就写个运维 app

恒老师 08:12

我也有个问题,在项目周期非常短的时候,是否可以用端到端直接复盖

李老师 08:13

没时间,只能这样了

恒老师 08:16

微服务应该有个自检能力,每次启动的时候,跑一下。

Ken 老师 08:16

接入自动化测试?

恒老师 08:19

我感觉还是得看架构师的架构能力。首先拆系统能把业务边界窄干净,就很不容易了。然后每个业务都做为一个微服务,有自己的完整生命周期和状态机,否则还是互相依赖的话,挺尴尬的。

Ti 老师 08:43

前后端分离,通过 swagge 管理接口,并进行契约测试保证前后接口的一致,避免二义性。先分层后端到端测试

Ti 老师 08:44

分层保证每个微服务的正确性,端到端保证各个微服务整体业务的正确性

李老师 08:45

测试还是来点能落地实在的好,那些应该是开发架构师考虑了吧

Li 老师 08:51

目前我们只是弄了契约测试,开发同学一提交代码 commit 就触发跑下测试失败就邮件通知加 slack 通知 该修改的服务同学。我来观望看看大家有啥好的建议 [耶][耶]

夏老师 08:53

如果微服务架构,多个服务同时构建,相互有依赖关系。其中一个构建完成就开始测试就会大面积失败吧

李老师 08:54

测试哪些服务是需要沟通的

李老师 08:55

服务的依赖性要想搞清楚,以及有好的测试策略,测试一定是要前期介入的

李老师 08:56

微服务时代,我个人觉得测试和开发捏的更紧密了

李老师 08:56

双方的共同目标是高效的完成开发任务

李老师 08:57

并保证质量

郑老师 08:59

@Li老师?推荐用 gated checkin,在 merge request 卡点跑 build 和 test,跑败了就 reject merge request。这样确保所有进主分支的 commit 都是可以通过 build 和 test 的。

Li 老师 09:02

@ 郑老师 (蚂蚁金服资深测试总监)?多谢多谢这么好的建议。对于端到端全自动化大家有啥好的方案和建议呢?thank you

李老师 09:03

全自动化啊,大厂都有自己的平台

李老师 09:03

我们自己玩可以,各种工具通过 jenkins 串起来

李老师 09:04

大厂就是把这个流程封装了

李老师 09:05

构建完成跑白盒,白盒通过跑接口,接口通过 run ui

李老师 09:05

jenkins 控制各个节点串联,各个节点使用不同的工具

李老师 09:06

当然细节有很多,但是思路就是这个了


↙↙↙阅读原文可查看相关链接,并与作者交流