(资料图)

1.握手

1.1.发送方和接收方之间的信号传递过程

1.2.模拟调制解调器使用一种握手形式,协商两个设备都能接受的速度和信号编码

1.3.TCP使用三次握手建立套接字连接

1.4.TCP握手还允许接收方发信号告诉发送方:在接收方准备好之前不要发送数据

1.5.EIA-232C(以前称为RS-232)的串行协议,是从接收方那里知道它何时能准备好接收数据

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对象通过切断所有外部连接改进单元测试的隔离性,通常在系统层级之间的边界处使用

关键词: