『数据库』微服务化的基石——持续集成( 四 )
在就是要通过单元测试 。 我们应该要求每个类都要有单元测试 , 并且单元测试覆盖率要达到一定的指标 。 单元测试要有带Mock的模块内的集成测试 。
在编译过程中会触发单元测试 , 单元测试不通过 , 已经代码覆盖率 , 都会统计后发邮件 , 抄送所有的人 , 这对于研发来讲又是一个压力 。
当有一天你的提交break掉了测试 , 或者代码覆盖率很低 , 则就像通报批评一样 , 你需要赶紧去修改 。
单元测试完毕之后 , 就会上传成果物 , 或者是war或者是jar , 一般会用nexus , 因为有版本号 , 有md5 , 可以保证安装在环境中的就是某个版本的某个包 , 我们还遇到过有使用FTP的 , 这样一个是很难保证版本号的维护 , 升级和回滚比较难弄 , 另一个是没有md5 , 很可能包不完整都有可能的 , 而且一旦发生 , 很难发现 。
如果使用了容器 , 则还需要编译Dockerfile , 使用Docker镜像作为交付 , 能够实现更好的环境一致性 , 保证原子的升级和回滚 。
每天下班前 , 当天的代码需要提交到库中去 , 晚上会做一次统一的环境部署和集成测试 。
每天晚上凌晨 , 会有自动化的脚本将Docker镜像通过编排部署一个完整的环境 , 然后跑集成测试用例 , 集成测试用例应该是基于API的 , 很多的公司是基于UI的 , 这样由于UI变化太快 , 还有UI不能覆盖所有的场景 , 所以还是建议UI和API分离 , 通过API进行集成测试 , 有了每天的测试 , 才能保证每天晚上的版本都是可以交付的版本 , 也保证我们微服务拆分的时候 , 尽管改了很多 , 不会因为新的修改 , 破坏掉原来能够通过的测试用例 , 保证不会有了新的 , 坏了旧的 。
这个集成测试或者叫回归测试每天晚上都做 , 都是在一个全新的环境中 , 这就是持续部署和持续交付 。
如果某一天测试不通过 , 则会发出邮件来 , 是因为当天谁的哪个提交 , 导致测试不通过 , 抄送所有人 , 这是另一个压力 。
所以第二天的站会上 , 昨天你完成了哪些功能 , 是否提交了 , 是否完成了单元测试 , 是否通过了集成测试 , 就都知道了 , 你需要给大家一个解释 , 然后进入到新一天的开发 。
到了两周 , 一个周期完毕 , 可以上线到生产环境了 , 可以通知有权限的运维进行操作 , 但是也是通过自动化的脚本进行部署的 。
这就是整个过程 , 层层保证质量 , 从中可以看到 , 敏捷开发 , 持续集成 , 持续交付 , 持续部署 , DevOps是互相联系的 , 少了任何一个 , 整个流程都玩不转 。
五、有关代码结构代码结构往往包括:
- API接口包
- 访问外部服务包
- 数据库DTO
- 访问数据库包
- 服务与商务逻辑
- 外部服务
这个模块提供了哪些接口 , 只要到API接口这个package下面找就可以了 。 因为无论是Dubbo还是springcloud , 接口的调用都会重试 , 因而接口需要实现幂等 。
访问外部服务的包 , 这将所有对外的访问独立出来 , 好处一是可以抽象出来 , 在服务拆分的时候 , 可能会用到 , 例如原来支付的逻辑在下单的模块中 , 要讲支付独立出来 , 则会有一个抽象层 , 涉及到老的支付方式 , 还是调用本模块中的逻辑 , 涉及到新接入的支付方式使用远程调用 , 有了这一层方便的多 。 好处二是可以实现熔断 , 当被调用的服务不正常的时候 , 在这里可以返回托底数据 。 好处三是可以实现Mock , 这样对于单元测试来讲非常好 , 不用依赖于其他服务 , 就可以自己进行测试 。
推荐阅读
- 『爱奇艺』购买会员后仍有广告 爱奇艺等平台因VIP服务被约谈
- 服务@云市场跨步式发展 打造ToB云市场阿里腾讯外“第三股势力”
- 每日经济新闻咨询@联邦学习成人工智能新贵 腾讯安全:技术服务能力才是重点
- 「InfoQ」放弃微服务,改用宏服务,Uber 这波什么操作?
- [点赞]华为终端云服务官方道歉:摄影作品误标成华为手机拍摄,网友点赞
- 『C114中国通信网』苹果iPhone SE 2等机型可通过eSIM激活Google Fi服务
- 『』苹果iPhone SE 2等机型可通过eSIM激活Google Fi服务
- 美好,一直在身边@微信小程序增加跨境电商服务类目
- 『手机闲人说』华为终端云服务官方道歉:摄影作品误标成华为手机拍摄,网友点赞
- 美好,一直在身边@电子城转向新型科技服务业务显成效 科技服务收入占比持续增加
