内容简介
第1章 微服务概述
1.1 什么是微服务,为什么要使用微服务
1.1.1 为什么要使用微服务
1.1.2 什么是微服务
1.1.3 持续集成、持续部署和Docker
1.2 微服务网络及其功能
1.2.1 微服务网络
1.2.2 微服务特性
1.3 微服务架构
1.3.1 资源组件
1.3.2 业务领域组件
1.3.3 远程资源组件
1.3.4 持久化组件
1.4 微服务单元测试
1.4.1 孤立型单元测试
1.4.2 联合型单元测试
总结
第2章 测试下的应用
2.1 准备开始
2.2 准备工作
2.2.1 Java Development Kit
2.2.2 构建工具
2.2.3 环境变量
2.2.4 集成开发环境(IDE)
2.3 架构
2.3.1 游戏服务
2.3.2 评论服务
2.3.3 视频服务
2.3.4 聚合服务
2.3.5 整体架构
2.4 应用设计模式
2.4.1 解构
2.4.2 ECB模式
2.4.3 其他模式
2.5 设计决策
总结
第3章 微服务单元测试
3.1 单元测试技术
3.1.1 联合型单元测试
3.1.2 测试替身
3.1.3 孤立型单元测试
3.1.4 微服务的单元测试
3.2 工具
3.2.1 JUnit
3.2.2 AssertJ
3.2.3 Mockito
3.2.4 构建脚本的修改
3.3 编写Gamer应用的单元测试
3.3.1 YouTubeVideoLinkCreator测试
3.3.2 YouTubeLink测试
3.3.3 Games测试
3.3.4 GamesService测试
3.3.5 GamesResource测试
练习
总结
第4章 微服务组件测试
4.1 Arquillian测试框架
4.2 @RunWith(Arquillian.class)注解
4.3 ShrinkWrap工具类
4.3.1 利用ShrinkWrap构建归档文件
4.3.2 给ShrinkWrap归档文件增加内容
4.3.3 添加资源
4.3.4 增加库和依赖
4.3.5 利用Maven解析器增加复杂依赖
4.3.6 增加服务实现
4.4 写一次代码,然后复用
4.5 构建脚本的修改
4.5.1 定义Maven依赖
4.5.2 定义Gradle依赖
4.6 覆盖Arquillian的默认配置
4.6.1 容器定义
4.6.2 指定容器属性
4.7 使用Arquillian REST扩展
4.7.1 Arquillian REST客户端扩展
4.7.2 Warp REST扩展
4.8 使用Arquillian测试Spring应用
4.8.1 Arquillian Spring框架扩展
4.8.2 测试Spring Boot应用
4.9 更复杂的Arquillian测试
4.9.1 测试远程组件
4.9.2 测试资源组件
4.9.3 测试领域组件
4.9.4 测试持久化组件
练习
总结
第5章 微服务集成测试
5.1 微服务架构下的集成测试
5.1.1 网关组件层
5.1.2 数据映射器和仓库
5.2 使用Arquillian持久化扩展进行持久化测试
5.2.1 描述式方法
5.2.2 过程式方法
5.2.3 使用NoSQLUnit进行持久化测试
5.2.4 使用Arquillian多部署的持久化测试
5.2.5 使用Arquillian序列的持久化测试
5.2.6 构建脚本的修改
5.3 Gamer应用的集成测试
5.3.1 测试Comments类
5.3.2 测试CommentsGateway类
练习
总结
第6章 契约测试
6.1 理解契约
6.1.1 契约和单体应用
6.1.2 契约和微服务应用
6.1.3 使用集成测试进行验证
6.1.4 什么是契约测试
6.1.5 谁负责契约
6.2 工具
6.2.1 Pact
6.2.2 JVM语言中的Pact
6.2.3 利用Algeron将Pact JVM与Arquillian生态系统集成
6.3 构建脚本的修改
6.3.1 使用Pact JVM进行契约测试
6.3.2 使用Arquillian Algeron进行契约测试
6.4 为Gamer应用编写消费者驱动的契约测试
6.4.1 评论服务的消费者端
6.4.2 评论服务的生产者端
6.5 契约类型总结
练习
总结
第7章 端到端测试
7.1 端到端测试在整个测试体系中的位置
7.2 端到端测试技术
7.2.1 垂直测试
7.2.2 水平测试
7.3 端到端测试工具介绍
7.3.1 Arquillian Cube
7.3.2 Arquillian Drone
7.3.3 Arquillian Graphene 2
7.3.4 JMeter
7.3.5 Cukes in Space
7.4 端到端测试样例
7.4.1 构建微服务
7.4.2 增加构建依赖和配置
7.4.3 给测试增加@Deployment注解和@TargetsContainer注解
7.4.4 跨域资源共享
7.4.5 使用@ClassRule处理混合环境
7.4.6 使用@OperateOnDeployment注解操作部署
7.4.7 引入@Drone、页面对象、@Location和WebDriver
7.4.8 在测试中操作页面对象
7.4.9 运行测试
练习
总结
第8章 Docker和测试
8.1 Docker生态系统下的工具
8.1.1 Docker
8.1.2 Docker Machine
8.1.3 Docker Compose
8.2 Arquillian Cube
8.2.1 设置Arquillian Cube
8.2.2 编写容器测试
8.2.3 编写集成测试
8.2.4 编写端到端测试
8.3 REST API
8.4 Arquillian Drone和Graphene
8.4.1 Arquillian Cube和Arquillian Drone的集成
8.4.2 Arquillian Cube和Arquillian Graphene的集成
8.5 并行测试
8.6 Arquillian Cube和Algeron
8.7 使用容器对象模式
8.8 部署测试和Kubernetes
8.9 构建脚本的修改
8.9.1 Arquillian Cube Docker
8.9.2 Arquillian Cube Docker JUnit规则
8.9.3 Arquillian Cube Kubernetes
8.9.4 Arquillian Cube OpenShift
8.10 测试视频服务的Dockerfile
练习
总结
第9章 服务虚拟化
9.1 什么是服务虚拟化
9.1.1 为什么要使用服务虚拟化
9.1.2 什么时候使用服务虚拟化
9.2 使用Hoverfly模拟服务响应
9.2.1 Hoverfly模式
9.2.2 JUnit Hoverfly
9.2.3 配置Hoverfly
9.3 构建脚本的修改
9.4 对Gamer应用使用服务虚拟化
总结
第10章 微服务下的持续交付
10.1 什么是持续交付
10.2 微服务架构和持续交付
10.3 持续交付的编排
10.3.1 使用Jenkins
10.3.2 Jenkins流水线
10.3.3 确定性部署
10.4 Jenkins
10.4.1 定义一个流水线
10.4.2 Jenkins流水线示例
总结
附录A 使用Arquillian Chameleon屏蔽不同类型的容器