手动质量保证手动QA工程师

在手动验证一个传统的 **IBM i** (AS/400) 绿色屏幕应用程序现代化包装器,该包装器将 **5250** 数据流转换为响应式 **HTML5** 网络接口时,你会使用什么系统化的手动测试方法来验证字段级别验证的一致性、在子文件滚动期间屏幕转换的同步以及在多个用户同时触发对共享 **DB2 for i** 物理文件的记录锁时对 **AID** (注意标识符) 代码的正确处理?

用 Hintsage AI 助手通过面试

答案

问题的历史

主机和中型机现代化项目通常使用 IBM Rational Host Access Transformation Services (HATS)Rocket LegaSuite 或自定义的 5250 模拟网关,将传统的绿色屏幕逻辑封装在网络包装器内。测试人员常常假设网络层只是简单的传递,但 EBCDIC 字符编码、 5250 字段属性和 HTML5 小部件之间的转换引入了抽象层,在这些层中,验证逻辑、错误消息和并发控制可能与源系统不同。这个问题探讨了候选人在传统终端仿真与现代网络协议交集处测试新兴行为的能力。

问题

核心挑战在于 5250 终端会话的状态性质与无状态的 HTTP 请求-响应周期之间的区别。传统应用程序依赖于 5250 数据流来强制执行字段级限制(例如,签名数字区域、必填项和字段退出检查),并使用 AID 代码来发出特定用户操作的信号,例如 ENTERCLEARROLL UPROLL DOWN。当多个用户通过网络包装器访问同一 DB2 for i 记录时,底层的 5250 会话管理必须正确代理记录锁等待、死锁超时和 CPF (控制程序设施) 错误消息,以确保回传到相应的浏览器实例,而不交叉污染会话或丢失光标定位上下文。

解决方案

一个系统化的方法需要三层次的方法:协议准确性测试并发压力测试视觉一致性验证

首先,使用 WiresharkIBM i Access Client Solutions 跟踪捕获原始 5250 数据流,以建立字段属性和 AID 序列的基线。创建测试用例以测试每种字段类型(字母、带隐含小数的数字、带 MDY 分隔符的日期字段),并验证网络包装器通过客户端 JavaScript 验证强制执行相同的约束,这些约束与主机的 EDTCDEEDTWRD 逻辑相似。

第二,使用控制的 Windows 终端会话与浏览器实例协调多用户场景,目标为相同的数据库记录。验证 5250 模拟器的 MSGWAIT 状态是否正确传递到网络层作为非阻塞的 AJAX 轮询或 WebSocket 通知,并验证 DASD 记录锁何时在浏览器会话超时或导航离开时适当地释放。

第三,使用像 ApplitoolsSikuli 这样的像素完美比较工具确保子文件(可滚动网格)呈现与绿色屏幕行/列对齐匹配。特别留意 SFLSIZSFLPAG 翻滚行为,其中部分页面更新必须与 HTML 表的虚拟滚动同步。

生活中的情况

问题描述

在一个以 IBM i 为基础的库存系统现代化项目中,QA 团队发现使用新 HTML5 接口的仓库用户无意中覆盖了彼此的库存调整。传统的绿色屏幕应用程序正确地强制了记录锁,在出现同时编辑时显示 "记录正在被用户 X 使用"。然而,网络包装器似乎允许两个用户同时进入编辑模式,导致在 ODBC 层触发 "更新冲突" 数据库错误,这被呈现为通用的 HTTP 500 错误,而不是用户友好的警告,从而导致数据完整性问题和用户混淆。

解决方案 A:增强的会话状态队列

实现一个服务器端队列,通过单例适配器模式序列化所有请求到同一 DB2 记录,强制网络包装器模仿单个 5250 工作站的阻塞行为。这种方法通过完全防止并发修改来保证数据完整性,并且实现简单,使用 Redis 分布式锁。然而,这会在高流量仓库班次期间造成瓶颈,影响性能,并且偏离现代网络用户体验期望,用户期望能具备并发编辑能力进行合并冲突解决,而不是严格的锁定。

解决方案 B:乐观锁定与版本控制

利用行级版本控制,使用 DB2 RRN (相对记录编号) 或时间戳列,允许两个用户都检索数据,但拒绝第二个提交并发出特定冲突消息。这种方法防止了无声的覆盖,并且对于读密集操作扩展更好,同时与 REST 习惯相一致,提供清晰的反馈以用于冲突解决工作流程。然而,它需要对由 IBM i 系统维护的传统物理文件进行架构修改,并且传统程序可能不会自动更新版本列,可能导致绿色屏幕与网络用户之间的同步间隙。

解决方案 C:代理直通与透明锁定状态

配置 5250 模拟层,透明地将 IBM i 的本地记录锁定状态消息 (CPF5027, CPF5074) 直接代理到网络界面为模态对话框,保持与绿色屏幕体验的确切行为一致。这种方法在不修改原始业务逻辑的情况下保留了原始的业务逻辑,并确保网络用户看到与终端用户相同的消息和时机,利用现有的 IBM i 安全和审计轨迹而不干扰中间件。缺点是需要深入了解 5250 协议的细微差别,以正确解析和翻译 DSPSIZINDARA 属性,以及当用户刷新浏览器或失去连接时会话管理变得复杂,这可能会孤立持有记录锁的 5250 会话。

选择的解决方案及理由

团队选择了 解决方案 C,因为监管环境(制药分销)要求旧接口与新接口在行为上完全一致,以满足 FDA 21 CFR 第11部分 合规性。任何在记录争用处理上的偏差都可能使传统系统的验证文件失效。通过实施基于 WebSocket5250 会话桥,保持每个浏览器标签的持久终端会话,包装器可以准确反映记录锁等待和 MSGID 显示。

结果

网络接口成功复制了绿色屏幕的 "记录正在使用" 行为,显示现代风格模态中的 CPF 消息的确切副本。随后负载测试显示 5250 会话池需要自动扩展配置以处理高峰仓库流量,因为每个浏览器标签消耗一个专用的 QINTER 子系统作业。该项目在不重写核心 RPG 程序的情况下实现了 FDA 验证,尽管添加了监控仪表板以跟踪可能指示浏览器崩溃的孤立 5250 会话,这些会话可能持有意外的锁。

候选人常常忽视的部分

当底层 RPG 程序动态初始化子文件页面时,如何验证具有 SFLINZSFLRNA 关键字的子文件控制记录 (SFLCTL) 被网络包装器正确解释?

候选人常常只关注可见数据行,忽视了 5250 子文件依赖于控制记录格式,这些格式定义了页面大小、子文件大小和滚动指示器。当 SFLINZ(初始化子文件)处于活动状态时,主机发送空记录,这些记录必须呈现为 HTML5 中的空可编辑行,而 SFLRNA (子文件记录不活动)控制是否可以接受数据的输入字段。测试人员必须验证包装器是否正确将这些指示器映射到 DOM 元素的 disabled 属性和 input 字段存在性,确保 SFLROLVAL (滚动值)指示器在用户滚动 HTML 容器时触发特定的 AID 代码(ROLL UP/ROLL DOWN),以便 RPG 程序接收到正确的控制流以获取后续数据页面。

什么方法验证 EBCDIC 特殊图形字符(如 CCSID 37 框线字符或货币符号)转录准确性,当 5250 数据流被转换为 UTF-8 以进行浏览器呈现?

许多测试人员假设标准字符编码转换处理所有情况,但 5250 终端支持替代字符集和字段级 COLOR/DSPATR 属性,这些属性映射到 Unicode 组合字符。该方法要求创建一个包含所有 CCSID 037 特殊字符(如分币符号、管道符号和十六进制 FF 字段标记)的参考屏幕,并比较在不同浏览器(ChromeEdgeSafariFirefox)中的渲染输出。特别注意 SO/SI(切换-输出/切换-输入)字符,这些字符在 DBCS 环境下用于 中文日文韩文 语言支持,确保在 DBCS 字符串中的 FF(字段格式)字节位置保持不变,以防止输入字段对齐错误,可能导致 RPG 程序读取截断数据或引发 RNX0101 错误。

如何测试 AID 代码处理 COMMAND 键映射(例如 F3=退出F12=取消),当浏览器快捷键或操作系统键绑定与传统 5250 功能键期望发生冲突时?

候选人常常忽视浏览器保留某些功能键(F1, F3, F5, F12)供其自身使用,或 macOS 以不同于 Windows 的方式处理 F-keys。系统化的方法涉及将每个 5250 AID 代码(F1-F24, CLEAR, HELP, HOME)映射到测试用例,以验证浏览器的 keydown 事件防止默认行为,以避免触发浏览器刷新(F5)或开发工具(F12),确保 AID 代码作为独特的 POST 参数或 WebSocket 消息进行传输,而不是通用的按钮点击,并且确保 CA (命令注意)与 CF (命令功能)之间的区别被保留,以确保 CA 键触发 RPG 程序的 INZSR 子程序,而不会验证已修改的字段,CF 键提交字段数据。此外,必须在 WindowsmacOSLinux 客户端中进行验证,使用不同的键盘布局(USUKGerman),以确保用于 F13-F24 模拟(通常为 Shift+F1Shift+F12)的 AltCtrl 组合不会触发操作系统级的快捷方式,如 Alt+F4Ctrl+Shift+F