返回正文
Main Navigation 博客归档万花筒手册
2026
2025
2024
2023
2022
2021
2020
2019
发布日志
提交 Issue

简体中文

English

简体中文

English

切换主题

目录

LLM Resources

  • llms.txt

随便看看

  • 使用 Canal 与 Spring Boot 实现数据库变更监听
  • 使用Sentinel作为Spring Boot应用限流组件
  • flutter key:ValueKey、ObjectKey、UniqueKey、GlobalKey的使用场景
  • 一个 havingValue=""
  • Vue3 事件处理详解
  • ClaimsPrincipal序列化为Json的正确姿势
  • Vue 插槽深度解析
  • peerDependencies(对等依赖)

登机牌打印拦截系统 综合测试用例文档 ​

配置说明:本版本帧边界统一为 StartMarker = "\u0002" (STX),EndMarker = "\u0003" (ETX)。
所有测试数据均以 \x02 开头、\x03 结尾,文档中以可读形式 [STX]...数据...[ETX] 表示,实际测试时需发送对应十六进制字节。

1. 文档概述 ​

  • 测试目标:验证 AirlinePrintInterceptor 服务在 STX/ETX 帧封装下的功能正确性、稳定性和兼容性。
  • 核心特性:
    • 接收端:轮询缓冲区,基于 EndMarker (ETX) 提取完整帧,StartMarker (STX) 用于定位帧头(可选空)。
    • 协议处理:标识符为 # + 两位数字,支持多触发组、透传前缀、重复标识符替换、内容长度补齐。
    • 输出封装:自动在数据前后添加 STX 和 ETX(可配置,防重复)。
    • SET Mode 双向通信:发送 SET Mode 或 SM; 命令后,等待打印机响应并回传源端,同时过滤回传帧防止循环。
    • AEA 状态查询(可关闭)、Polly 重试、看门狗复位。
  • 数据流向:
  • 测试环境:Windows 7/10/11,com0com 虚拟串口。

2. 帧接收与切分测试 ​

TC‑FR‑01 单个 [ETX] 结尾的帧正确提取 ​

项目内容
用例编号TC‑FR‑01
测试目的验证使用 ETX 作为结束标记时,轮询线程能从串口数据流中提取完整帧。
前置条件1. SerialPort 配置:StartMarker = "\u0002",EndMarker = "\u0003"
2. 服务已启动,源端口 COM5 已打开
3. 虚拟串口对 COM4 ↔ COM5 已创建
4. 串口调试助手连接 COM4(以十六进制发送)
测试步骤从 COM4 发送十六进制:02 43 50 23 30 31 43 30 31 23 30 31 56 23 30 35 48 65 6C 6C 6F 23 03 10
(对应文本:[STX]CP#01C01#01V#05Hello#[ETX])
预期结果1. 服务日志输出“本轮提取到 1 个完整帧”
2. 帧内容为完整的 [STX]CP#01C01#01V#05Hello#[ETX]
3. StringMessageProcessor 正常接收该帧(若满足触发标识)

TC‑FR‑02 连续两帧按 [ETX] 分离 ​

项目内容
用例编号TC‑FR‑02
测试目的多个帧合并到达时能根据 ETX 正确切分。
前置条件同 TC‑FR‑01
测试步骤发送十六进制:02 43 50 23 30 31 23 41 23 03 10 02 43 50 23 30 32 23 42 23 03 10
(即 [STX]CP#01#A#[ETX][STX]CP#02#B#[ETX])
预期结果提取两帧:[STX]CP#01#A#[ETX] 和 [STX]CP#02#B#[ETX],分别处理

TC‑FR‑03 无 [ETX] 结尾时不提取,看门狗超时后重置 ​

项目内容
用例编号TC‑FR‑03
测试目的不完整帧不提取,长时间无数据后看门狗复位串口。
前置条件同 TC‑FR‑01,看门狗超时 30 秒
测试步骤1. 发送 [STX]CP#01#A#(无结尾)
2. 35 秒内不发送任何数据
预期结果1. 数据保留在缓冲区不处理
2. 约 30 秒后日志“看门狗超时…准备重启串口”
3. 串口被重置,恢复等待状态

TC‑FR‑04 起始标记为空,直接从缓冲区头部查找 [ETX] ​

项目内容
用例编号TC‑FR‑04
测试目的StartMarker 为空时,系统从缓冲区起始位置直接查找结束标记切分帧。
前置条件SerialPort 配置:StartMarker = "",EndMarker = "\u0003"
测试步骤发送十六进制:41 41 42 42 03 10 43 43 44 44 03 10(对应 AABB[ETX]CCDD[ETX])
预期结果提取两帧:AABB[ETX] 和 CCDD[ETX]

3. 协议处理模块测试 (StringMessageProcessor) ​

3.1 触发标识匹配(分组模型) ​

TC‑TR‑01 单个触发组匹配成功 ​

项目内容
用例编号TC‑TR‑01
测试目的配置单个触发组,数据包含对应标识时触发规则处理。
前置条件组1:TriggerIdentifier = "#88",规则:替换 #05 → "WANG"
测试步骤发送帧 [STX]CP#01C01#01V#88#05Hello#[ETX]
预期结果1. 日志输出“找到触发标识字段 #88”
2. 处理后数据为 [STX]CP#01C01#01V#88#05WANG#[ETX]

TC‑TR‑02 内容中的子串不触发(严格字段匹配) ​

项目内容
用例编号TC‑TR‑02
测试目的标识符必须为独立字段 #88,内容中的 88 不触发。
前置条件组1:TriggerIdentifier = "#88"
测试步骤发送帧 [STX]CP#01C01#01V#05Test88#[ETX]
预期结果日志“未匹配任何触发标识,原样转发”,数据不变

TC‑TR‑03 多个触发组分别生效 ​

项目内容
用例编号TC‑TR‑03
测试目的不同触发组对应不同规则集,互不干扰。
前置条件组1:#88 → 替换 #05 → "A"
组2:#99 → 替换 #07 → "B"
测试步骤分别发送含 #88 和 #99 的帧
预期结果#88 帧只替换 #05 为 A,#99 帧只替换 #07 为 B

3.2 替换与插入规则 ​

TC‑RPI‑01 目标字段存在,替换所有重复项 ​

项目内容
用例编号TC‑RPI‑01
测试目的数据中存在多个相同标识符时,全部替换。
前置条件规则:TargetIdentifier = "#44",CustomContent = "NEW"
测试步骤发送 [STX]CP#01C01#01V#44Old#44Old#[ETX]
预期结果输出 [STX]CP#01C01#01V#44NEW#44NEW#[ETX],日志“已替换 2 个 #44”

TC‑RPI‑02 目标字段不存在,插入到合适位置 ​

项目内容
用例编号TC‑RPI‑02
测试目的目标不存在时,在小于参考值的最大标识符后插入新字段。
前置条件规则:TargetIdentifier = "#23",CustomContent = "VIP"
测试步骤发送 [STX]CP#01C01#01V#05Zhang#07Li#[ETX]
预期结果在 #07 后插入 #23VIP,结果为 [STX]CP#01C01#01V#05Zhang#07Li#23VIP#[ETX]

3.3 内容长度补齐 ​

项目内容
用例编号TC‑PAD‑01
测试目的内容长度不足时尾部补空格。
前置条件规则:TargetIdentifier = "#05",CustomContent = "Hi",ContentLength = 10
测试步骤发送 [STX]CP#01C01#01V#05Test#[ETX]
预期结果输出 [STX]CP#01C01#01V#05Hi #[ETX](8个空格),日志显示长度10

3.4 透传控制帧 ​

项目内容
用例编号TC‑PS‑01
测试目的匹配透传前缀的控制帧直接转发,不修改。
前置条件PassthroughIdentifiers = ["WS", "MX", "EP#"]
测试步骤分别发送 [STX]WS...[ETX]、[STX]MX...[ETX]、[STX]EP#...[ETX]
预期结果日志“透传前缀匹配 'WS'”(示例),数据原样返回,不触发规则

4. 输出帧封装测试 ​

TC‑WRP‑01 写入打印机前自动添加 STX/ETX ​

项目内容
用例编号TC‑WRP‑01
测试目的启用输出封装后,数据自动包裹 STX 和 ETX。
前置条件EnableOutputFrameWrapping = true,OutputStartMarker = "\u0002",OutputEndMarker = "\u0003"
测试步骤处理一帧 CP#01#A#$(内部数据,无控制符),观察 COM1 输出字节
预期结果COM1 收到 02 43 50 23 30 31 23 41 23 03 10,日志显示添加帧头/帧尾

TC‑WRP‑02 已含标记时不重复添加 ​

项目内容
用例编号TC‑WRP‑02
测试目的若处理器输出已包含 STX/ETX,直接发送,避免重复封装。
前置条件同上,模拟处理器输出 [STX]CP#01#A#[ETX]
测试步骤直接写入该数据
预期结果日志“无需重复封装”,发送字节与输入一致

5. SET Mode 双向通信测试 ​

TC‑SET‑01 命令触发打印机响应并回传 ​

项目内容
用例编号TC‑SET‑01
测试目的发送包含 SET Mode 的命令后,等待打印机响应并回写到源串口。
前置条件SetModeCommands = ["SET Mode", "SM;"],打印机正常连接 COM1
测试步骤发送 [STX]SM;A;999;01[ETX]
预期结果1. 打印机返回响应(如 SR;0;A;999)
2. 响应被封装为 [STX]SR;0;A;999[ETX] 写入 COM5,从而返回 COM4
3. 回传数据指纹被记录,后续轮询时自动丢弃

TC‑SET‑02 回传帧防循环 ​

项目内容
用例编号TC‑SET‑02
测试目的刚回传到源端的数据再次被轮询读取时,自动丢弃。
前置条件已完成一次 SET Mode 响应回传
测试步骤回传数据再次出现在 COM5 缓冲区(模拟)
预期结果日志“回传帧过滤:丢弃已回传数据”,数据不进入处理流程

6. 配置校验测试(启动时) ​

TC‑VAL‑01 必填字段缺失导致启动中止 ​

项目内容
用例编号TC‑VAL‑01
测试目的SourcePort 为空时服务拒绝启动。
前置条件配置 "SourcePort": ""
测试步骤启动服务
预期结果日志“[配置错误] SerialPort.SourcePort 不能为空”,服务停止

TC‑VAL‑02 规则中目标标识符为空时报错 ​

项目内容
用例编号TC‑VAL‑02
测试目的规则必须指定 TargetIdentifier。
前置条件某条规则 TargetIdentifier = ""
测试步骤启动服务
预期结果日志“Rules[0].TargetIdentifier 不能为空”,启动中止

文档版本:v4.1
最后更新:2026-05-26
重要提醒:由于帧边界为不可见控制字符,测试时请使用十六进制发送工具,确保正确插入 02(STX)和 03(ETX)。

/zh-CN/gallery/bpp_test.html 的头像
您觉得这篇文章
怎么样?
编辑本页面

上次更新::

V 0.13.11 |
基于 MIT Licensed版权所有 © 2009- 2026 CMONO.NET
本站访客数
--次
𝓒𝓜𝓞𝓝𝓞.𝓝𝓔𝓣
本站总访问量
--人次