### 目的: - 业务真实交互数据包含:BeginSession、SessionAck、register、getVar、setVar、request、requestAck、Info、broadcast、event、logEvent、LogWarn,使用某一业务进行验证难以全面。 - 以往经验发现,进行了部分改动后。在基础业务中表现无问题,但在其他不常用的页面使用时,容易出现验证不全面引发的问题。 - 所以设计的多接口自动化验证需要覆盖以上接口。 - 安全和非安全的websocket,输入、输出值有少量不同,需要进行验证到 - 在多次打开关闭websocket、register实体,需验证内部数据是否正确,是否已经正确释放。 ### 实现: - 正向场景1: - **BeginSession**连接Guiconsole - 检查**SessionAck**,关联SessionAck规范内容 - **Register**实体Guiconsole,关联Register规范内容 - **Request**功能OpenLogSender - 检查**RequestAck**, 关联RequestAck规范内容 - 在业务端应能持续收到**broadcast** - **info**功能OpenSender - 在业务端应能收到**event** - 验证**SetVar**设置UIState的值 - 验证**GetVar**获取UIState的值 - 验证**LogEvent、LogWarn**,Guiconsole订阅chromium发出的事件,通过**broadcast**发送 - 错误场景1: - **BeginSession**连接实体Unknown - 检查**SessionAck**是否能够正确返回错误信息 - 错误场景2: - **BeginSession**连接实体Guiconsole - 验证**SetVar**设置TerminalStage的值(无权限) - 应返回错误信息 - 错误场景3: - **BeginSession**连接实体Guiconsole - **Request、Info**功能访问不存在的接口 - 验证**RequestAck、Info**是否能够正确返回错误信息 - 长时间多ws client场景: - 多次打开关闭websocket - register多个实体,关闭websocket,查看是否被正确释放 - 多个ws订阅同一个实体的广播,查看broadcast是否正常发送给每一个ws client ### 内部数据验证: - ST、UAT上提供一个内部页面,能够实时检查chromium内部数据变量,防止数据未被正确释放 - 页面上需要展示的数据包含 - websocket当前的连接信息 - 实体-sessionId对照表(应随实体的启动和关闭,表现为>0和-1) - broadCast注册表(为一列表,指示websocket订阅了哪些broadcast) - register注册表(指示一个实体对应了几个不同的websocketId) ### 终端当前涉及对外http连接包含: #### spshell - upload log(上传互联网日志) - get terminal cfg(获取终端配置) - get VTM err msg List(获取终端错误映射列表) - get Token(获取token) - upload terminal cfg version(上传终端配置版本) #### alarm - send alarm(发送告警) #### accessAuth - GetmAccessAuthHost(获取会话密钥) - UpdateWKTask(更新mk) - access(准入) - init mk(初始化mk) #### guardian - upload log(上传互联网日志) #### CardIssuer - RegistCardWhileCaptureCard(吞卡登记) - SyncMaterialCount(同步物料计数) - JudgeCardType(查询卡片类型) #### HeartBeat - hand shake(心跳握手) #### ConunterConnector - call route(呼叫) #### IDCertificate - img check(图片检测) #### Record - recordinfo list upload(上传记录信息列表) #### Upgrade - SendSM3Task(发送文件SM3列表) - UpdateTaskStatus(更新任务状态) - QueryCurrTask(查询当前任务) - QueryNewPreTask(预查询新任务) - QueryNewContinueTask(继续查询新任务) - QueryTaskStatus(查询任务状态) - DownLoad Package(下载包) **文件下载,不上传链路信息** #### UpLoad - queryTempFile(查询临时文件) - updateState(登记文件流水状态) - addUploadFail(登记失败文件流水) - queryPlan(查询上传计划) - upload file(上传文件) **文件上传,不上传链路信息** ### 按照类型,可分位3类 - 终端自行发起的http请求:自行生成第一跳,上传第一跳信息,并把下一跳信息传给服务端。 - 终端由业务端调用,发起的http请求:终端不生成第一跳,更新当前跳信息,传递给下一层 - 不需要上传链路信息:上传下载文件。 ### 实现细节: (1)改造http组件,如无任何链路输入,则把终端作为第一跳,并把链路信息上传;把第二跳信息传递给服务端。 (2)可输入链路信息,则更新当前跳信息,并把链路信息传递给下一层。 (3)改造规范参考:《分布式链路追踪技术规范》-http协议部分: **TraceContext 采用 B3 染色方案,通过 Http Header 标识符传递TraceContext,所有的 B3 Header 都遵循 X-B3-${name}的头部格式** 添加TraceContext包含: BusinessId、TraceId、SpanceId、ParentSpanId、Timestamp