1.握手
1.1.发送方和接收方之间的信号传递过程
1.2.模拟调制解调器使用一种握手形式,协商两个设备都能接受的速度和信号编码
1.3.TCP使用三次握手建立套接字连接
1.4.TCP握手还允许接收方发信号告诉发送方:在接收方准备好之前不要发送数据
1.5.EIA-C(以前称为RS-)的串行协议,是从接收方那里知道它何时能准备好接收数据
1.6.握手在低层通信协议中无处不在,但几乎很少出现在应用程序层
1.7.握手是一种未被充分利用的技术,在应用层协议中拥有巨大的优势
1.7.1.HTTP并不擅长握手
2.创建基于合作的需求控制机制
2.1.客户端和服务器之间的握手,允许将需求的流量调节到可服务的级别
2.2.在构建客户端和服务器时,两者都必须实现握手
2.3.让服务器通过限制自己的工作量保护自己
2.3.1.服务器应该有办法拒绝执行发来的工作,而不是成为满足任何要求的“受气包”
2.3.2.基于HTTP的服务器需要依赖负载均衡器与Web服务器或应用程序服务器之间的合作关系实现“握手”
3.健康状况检查
3.1.在集群或负载均衡服务中,使用健康状况检查实现实例与负载均衡器握手
3.2.当失衡的系统容量导致响应缓慢时,“握手”可能是最有价值的
3.3.当调用缺乏握手机制的服务时,断路器是一种可以使用的权宜之计
3.4.在层叠失效情况下,握手是一种防止裂纹跨层蔓延的有效方法
4.在自己的低层协议中构建握手
4.1.如果创建了基于套接字的协议,那么可以在其中构建握手机制
4.2.端点就可以在未准备好接受工作时,通知其他端点
5.考验机
5.1.分布式系统的失效方式很难在开发环境或QA环境中显现
5.2.可以创建考验机来模拟每个集成点另一端的远程系统
5.2.1.硬件工程师和机械工程师一直使用考验机
5.2.2.软件工程师虽然也已经在使用,但其考验机过于简单
5.2.3.像设计应用程序服务器一样来设计考验机,其中与真实应用程序相关的那些测试,可以设计为可插拔的形式
5.3.优秀的考验机严格测试系统,像现实世界的系统一样“恶*”
5.4.考验机应该给被测系统留下“伤疤”,它的意义就是让被测系统做到不信有好事
5.4.1.考验机应该像一个小“黑客”,尝试各种不良行为来给调用方搞破坏
5.5.考验机会引出混沌工程
5.6.考验机作为一台单独的服务器运行,没有义务遵循任何接口规范,可以激发网络错误、协议错误或应用程序级错误
5.6.1.每个系统最终都会偏离接口规范,因此在远程系统无法使用时,测试本地系统的行为就变得至关重要
5.6.2.模拟偏离接口规范的系统失效方式
5.7.远程调用使用网络,套接字连接容易出现的失效
5.7.1.网络传输问题
5.7.2.网络协议问题
5.7.3.应用程序协议问题
5.7.4.应用程序逻辑问题
5.8.考验机知道其存在的意义是且仅是进行测试
5.8.1.真正的应用程序不会直接调用低层网络API,但考验机可以
5.8.2.其字节发送速度能快能慢
5.8.3.能建立极长的监听队列
5.8.4.能与套接字绑定却从不发起连接
5.9.考验机仅是补充,不能取代其他测试方法
5.10.考验机有助于验证非功能性行为,同时又与远程系统保持隔离
6.mock对象
6.1.mock对象只能产生符合已定义接口的行为
6.2.mock对象通过切断所有外部连接改进单元测试的隔离性,通常在系统层级之间的边界处使用