• TestStand ​用户​界面​开发​最佳​实践【3】


    概览

    TestStand​用户​界面​是​一个​应用​程序,​提供​用于​在​生产​站​点​执行​测试​的​图形​界面。​用户​界面​应用​程序​通常​用于​执行​测试,​而​TestStand​序列​编辑​器​通常​用于​开发​测试。​您​可以​自​定义​用户​界面​以​满足​特定​的​测试​需求,​甚至​可以​在​需要​时​开发​测试。

    本文​讨论​了​设计​和​开发​TestStand​用户​界面​应用​程序​的​最佳​实践:

    • 介绍​TestStand​提供​的​即​用​型​组件
    • 说明​如何​利用​TestStand​架构​来​构​建​可​扩展​且​可​维护​的​测试​系统

    内容

    • TestStand​用户​界面​的​架构
    • 管理​不同​用户​的​需求
    • 在​UI​外​实现​的​功能
    • 在​用户​界面​和​其他​组​件​之间​进行​通信

    TestStand​用户​界面​的​架构

    TestStand​使用​模​块​化​架构​设计,​利用​具有​单一​用途​的​独立​组​件,​使得​整个​系统​的​开发​和​维护​更加​简单​直接。

    用户​界面​是​模​块​化​TestStand​架构​中​一个​独立​组件

    用户​界面​组​件​为​开发​人员​和​测试​操作​员​提供​了​相应​机制,​用于​在​测试​系统​中​创建​和​运行​序列。​在​模​块​化​架构​中,​用户​界面​(UI)​和​底层​TestStand​应用​程序​之间​应​存在​清晰​的​界限。​这种​架构​具有​以下​优点:

    • 能够​与​使用​多种​不同​用户​界面​的​测试​系统​无缝​交互。 例如,​测试​开发​人员​可以​使用​序列​编辑​器​来​开发​序列,​而​测试​操作​员​可以​使用​操作​员​界面​来​执行​测试​和​查看​结果。
    • 对​UI​进行​更改,​而​没有​更改​测试​行为​的​风险。

    TestStand​用户​界面​与​TestStand​引擎​API​通信​以​执行​其​各种​功能,​例如​获取​测试​执行​的​状态、​创建​和​编辑​序列​以及​配置​设置。​TestStand​还​提供​了一​组​用户​界面​控​件​和​单独​的​UI API,​让​您​可以​快速​创建​自己​的​TestStand​用户​界面。


    TestStand​用户​界面​(UI)​控件

    TestStand​用户​界面​(UI)​控​件​是​一​组​ActiveX​控​件,​这些​控​件​实现​了​应用​程序​显示、​执行​和​调​试​测试​序列​所需​的​常用​功能。​这些​ActiveX​控​件​显著​减少​了​用户​界面​与​TestStand API​交互​以​处理​用户​界面​任务​所需​的​源​代码​数量。​使用“属性​(Properties)”页​面​或​调​用​可用​的​属性​和​方法,​可​配置​这些​控​件。​有关​如何​在​LabVIEW、​CVI、​C#​或​VB.NET​中​使用​TestStand UI​控​件​的​更多​信息,​请​参见TestStand UI​控件帮助​主题。

    管理​器​控​件​和​可见​控件

    TestStand UI​控​件​提供​了​两​组​用户​界面​控​件:​管理​器​控​件​和​可见​控​件。

    管理​器​控​件​调​用​TestStand API​来​执行​各种​任务,​例如​加​载​文件,​启动​执行​以及​检索​顺序​和​执行​信息。​当​发生​应用​程序​事件​时​(例如​当​用户​登录​时、​执行​到达​断​点​时,​或者​用户​更改​他们​正在​查看​的​文件​或​顺序​时),​管理​器​控​件​也​会​通知​您。​管理​器​控​件​在​运行​时​不​可见。

    可见​控​件​向​用户​显示​信息,​例如​显示​当前​执行​状态​的​执行​视图​控​件。​可见​控​件​还​允许​用户​与​UI​交互,​例如​使用​按钮​控​件​执行​测试。 可见​控​件​必须​连接​到​管理​器​控​件,​从而​确定​其​运作​方式。 这种​连接​通过​使用​管理​器​控​件​的​连接​方法​来​实现。​连接​控​件​时,​管理​器​控​件​会​自动​处理​用于​管理​可见​控​件​行为​的​内部​逻辑。 您​可以​建立​视图​连接、​列表​连接、​命令​连接​和​信息​源​连接,​具体​取决​于​所​连接​的​管理​器​控​件​和​可见​控​件​的​类型​以及​可见​控​件​的​期望​行为。

    将​可​视​TestStand UI​控​件​连接​到​管理​器​控​件​以​定义​其​行为。

    有关​在​各种​编​程​环境​中​使用​TestStand UI​控​件​的​更多​详细​信息,​请​参阅TestStand​用户​界面​控件帮助​主题。 您​还​可以​使用连接​UI​控件演示​来​查看​可​创建​的​可用​连接​的​行为。

    此外,​您​还​可以​将​编​程​环境​中​本地​提供​的​控​件​与​TestStand UI​控​件​结合​使用。​使用​本地​控​件​时,​可以​使用​用户​界面​API​直接​与​管理​器​控​件​进行​通信,​从而​实现​与​TestStand​相关​的​功能。​有关​编写​直接​调​用​TestStand API​的​应用​程序​的​更多​信息,​请​参考使用​原生​控​件​构​建​TestStand UI​的​示例


    简化​和​全​功能​用户​界面​应用​程序​示例

    TestStand​提供​了​几个​示例​和​组​件,​可​用于​帮助​构​建​用户​界面。​参考​用户​界面​示例,​有利​于​开始​开发​自​定义​用户​界面。​TestStand​还​附带​了​多种​用户​界面​组​件,​这些​组​件​能够​实现​在​这些​用户​界面​应用​程序​中​使用​的​常见​功能,​您​可以​在​自己​的​应用​程序​中​复​用​这些​用户​界面。

    TestStand​附带​了​使用​支持​编​程​语言​的​简化​和​全​功能​用户​界面​应用​程序​示例,​此类​编​程​语言​包括​LabVIEW、​LabVIEW NXG、​Labwindows™/​CVI™、​C#​和​VB.net。​TestStand​提供​了​以​每​种​受​支持​编​程​语言​编写​的​示例​源​代码。​您​可以​参考​此​源​代码,​以便​开始​开发​自​定义​用户​界面,​也可以​按​原样​使用​它们。

    简化​用户​界面​最大​程度​地​减少​了​显示​内容,​不​包含​菜单​栏,​其​目的​是​供​测试​操作​员​在​已​部署​的​测试​系统​上​作为​用户​界面​使用。​而​全​功能​用户​界面​则​显示​了​更多​信息,​添加​了​菜单​栏,​并​提供​了​调​试​功能。 全​功能​用户​界面​还​具备​编辑​器​模式,​可​用于​创建​和​修改​测试​序列,​例如​TestStand​序列​编辑​器。

    在​学习​如何​使用​TestStand UI​控​件​进行​开发​时,​简化​用户​界面​示例​是​一个​很好​的​起点。 对于​LabVIEW、​LabWindows/​CVI​或​C#​实现,​可以​使用​下方​的​指南​查看​源​代码​及其​工作​方式​的​详细​说明:

    管理​不同​用户​的​需求

    在​为​测试​系统​开发​用户​界面​时,​务​必要​考虑​将与​应用​程序​进行​交互​的​所有​用户​的​目标​和​需求。 测试​系统​用户​通常​可以​分为​以下​几​类​角色:

    • 框架​开发​人员 — 设计​测试​框架​组​件,​包括​定制​的​用户​界面、​过程​模型​和​步骤​类型。 
    • 测试​开发​人员 — 在​框架​开发​人员​实现​的​框架​内​创建​测试​序列。
    • 技术​员 — 对​在​生产​环境​中​运行​测试​时​出现​的​各种​问题​进行​故障​分析。
    • 测试​操作​员 — 设置​测试​单元​并​在​生产​环境​中​运行​测试。

    在​为​测试​系统​用户​规划​和​设计​适当的​用户​界面​时,​您​扮演​的是​框架​开发​人员​的​角色。 借助​TestStand UI​控​件,​您​可以​根据​用户​的​需求​完全​自​定义​用户​界面。​例如,​测试​操作​员​可能​只需要​启动​测试​并​查看​结果。 但​测试​开发​人员​则​需要​完全​的​访问​权限​来​创建​和​编辑​序列​文件。

    您​可以​为​测试​开发​人员​提供​全​功能​用户​界面,​该​界面​允许​创建​和​编辑​序列​文件,​例如​TestStand​提供​的​全​功能​UI​示例​或​序列​编辑​器。 对于​测试​操作​员,​可以​设计​一个​简化​用户​界面,​其中​仅​显示​一个​用于​开始​测试​的​按钮​以及​一个​显示​测试​结果​的​显示​控​件,​从而​确保​操作​员​可以​成功​运行​测试。 向​操作​员​提供​较​复杂​的​UI​可能​会​导致​出现​问题,​因为​这​需要​操作​员​事先​接受​其他​培训,​且​由于​可用​功能​过多,​操作​时​更​容易​出​错。

    通过​使用​TestStand UI​控​件​来​开发​UI,​您​将​能够​从​全​功能​UI​无缝​迁移​到​简化​UI。​这​两​种​UI​均​基于​TestStand​引擎、​序列、​过程​模型​和​其他​组​件​而​构​建,​并且​会​共用​这些​组​件。

    全​功能​UI(例如​序列​编辑​器)​和​简化​操作​员​UI​可以​利用​相同​的​测试​代码​无缝​交互

    除了​创建​单独​的​用户​界面,​还​可以​使用​TestStand​用户​管理​来自​定义​在​单​个​用户​界面​应用​程序​中​提供​的​功能。 在​不同​角色​执行​相同​测试​的​情况​下,​这种​方法​更​适用。 例如,​负责​分析​失败​测试​故障​的​技术​人员​将​需要​访问​诊断​数据,​如​执行​和/​或​测试​报告​的​视图,​而​这些​数据​通常​不会​向​操作​员​显示。 为​技术​人员​提供​单独​的​UI​应用​程序​会​出现​问题,​因为​他们​无法​从​单独​的​应用​程序​访问​当前​的​执行​信息。 要​解决​这个​问题,​可以​创建​一个​单独​的​用户​界面,​为​更​高级​用户​提供​更多​视图。 例如,​可以​使用ctrl + shift + alt + insert将​TestStand​全​功能​用户​界面​更改​为​编辑​器​模式,​让​高级​用户​获得​更改​序列​的​权限。


    全​功能​UI​示例​可以​在​操作​员​模式​或​编辑​器​模式​下​执行

    为​TestStand​用户​管理​器​定义​用户​时,​TestStand UI​控​件​会​根据​当前​用户​的​权限​自动​启用​或​禁用​其​状态。​使用​Engine.CurrentUserHasPrivilege TestStand API​方法,​可​根据​用户​的​权限​定义​自​定义​行为,​例如​隐藏​或​显示​用户​界面​的​某些​部分。​有关​定义​用户​和​权限​的​更多​信息,​请​参阅管理​用户帮助​主题。

    在​UI​外​实现​的​功能

    在​开发​TestStand​用户​界面​时,​务必​明确​区分​在​UI​中​实现​的​功能​以及​在​测试​系统​其他​组​件​中​实现​的​功能。 本​节​概述​了​常见​的​测试​系统​功能​以及​在​TestStand​架构​中​实现​这些​功能​的​情况。

    在​前端​回​调​中​实现​初始​化​代码

    在​许多​情况​下,​测试​系统​需要​在​测试​开始​执行​之前​执行​操作。​例如,​您​可能​需要​初始​化​测试​硬件​并​验证​硬件​是否​已​校准,​或者​检查​用户​权限​以​初始​化​用户​界面。

    要​处理​这些​功能,​可以​在​前端​回​调​序列​文件​中​使用​LoginLogout​序列。 此​序列​默认​在​TestStand​启动​时​由​TestStand UI​应用​程序​管理​器​控​件​执行,​并且​默认​向​用户​显示​登录​对话​框。 向​此​序列​添加​功能​具有​以下​好处:

    • 所有​TestStand​用户​界面​和​序列​编辑​器​均​会​调​用​相同​的​LoginLogout​序列,​这样,​您​就​可以​定义​能​从​任何​UI​访问​的​功能​并​防止​出现​重复​的​代码
    • 您​可以​更改​其他​代码​的​行为,​而无​需​更改​用户​界面。

    除了​LoginLogout​序列​之外,​还​可以​在​前端​回​调​中​定义​其他​序列,​以便​在​其他​情况​下​实现​调​用​的​功能。 对于​这些​其他​序列,​需要​使用​Engine.CallFrontEndCallbackEx()​方法​将​代码​添加​到​用户​界面,​以便​在​需要​时​调​用​序列。 使用​这个​方法,​无​需​管理​对​序列​文件​的​引用,​因为​TestStand​会​自动​加​载​和​卸​载​前端​回​调,​所以​非常​方便。 


    使用​工具​菜单​访问​附加​应用​程序

    测试​系统​通常​使用​与​测试​一起​工作​的​独立​工具​或​应用​程序。 例如,​可以​启动​数据​库​配置​实用​程序​或​分析​应用​程序。 您​无​需​将​这些​功能​构​建​为​用户​界面​应用​程序​的​模​块,​而是​可以​通过​植​入​独立​工具​来​模​块​化​系统,​并​通过​自​定义​工具​菜单​项​提供​对​相应​的​访问。 通过“工具​(Tools)”»“自​定义​(Customize)”菜单,​可​从​序列​编辑​器​自​定义​工具​菜单。​在​自​定义​对话​框​中,​可以​添加​新的​工具​菜单​项​并​配置​其​行为。


    创建​自​定义​工具,​向​实现​工具​菜单​的​任何​用户​界面​提供​更多​功能

    所​做的​更改​将​保存​到​单独​的​配置​文件​中,​因此​所有​用户​界面​都​将​显示​您​创建​的​自​定义​条目。 如需​更多​信息,​请​参考自​定义​工具​菜单​对话框帮助​主题。

    使用​过程​模型​定义​序列​入口点

    用户​界面​需要​为​用户​提供​一种​开始​执行​序列​的​方法,​但​重要​的是,​UI​不能​直接​与​任何​序列​文件​耦合。 要​允许​用户​开始​测试,​可以​创建​一个​按钮​来​调​用​当前​已​加​载​序列​的​执行​入口​点,​包括​直接​运行​序列​或​使用​过程​模型​入口​点​(例如 Single Pass 和 Test UUTs)。 用户​界面​不​应​包含​序列​执行​之前​或​之后​执行​的​功能,​此​功能​应​通过​过程​模型​实现。

    过程​模型​还​可以​定义​配置​入口​点,​用户​可以​使用​这些​入口​点​配置​过程​模型​设置。​确保​任何​模型​设置​都是​从​这些​入口​点​配置,​而不是​直接​通过​用户​界面​配置。​通过​将​功能​构​建​到​过程​模型​中,​这些​功能​可在​任何​TestStand​用户​界面​应用​程序​和​序列​编辑​器​中​使用。

    有关​使用​过程​模型​的​更多​信息,​请​参阅TestStand​过程​模型​定制​的​最佳​实践文​档。

    在​用户​界面​和​其他​组​件​之间​进行​通信

    尽管​将​用户​界面​与​测试​系统​的​其他​组​件​(例如​测试​序列​文件​和​过程​模型)​分​离开​很​重要,​但​用户​界面​必须​与​这些​组​件​有效​通信。 本​节​介绍​了​可​用于​在​这些​组​件​之间​进行​通信​且​同时​仍​保持​这种​模​块​化​的​方法。

    序列​和​用户​界面​之间​的​通信

    在​执行​测试​时,​测试​系统​必须​向​操作​员​提供​反馈,​表明​执行​的​当前​状态,​例如​正在​运行​的​测试​或​当前​的​测试​结果。​通常,​可以​使用​TestStand UI​控​件​来​显示​此​信息,​例如​执行​视图​和​报告​视图。​通过​连接​到​管理​器​控​件,​这些​控​件​将​随时​更新​以​显示​由​引擎​管理​的​当前​执行​状态。

    在​某些​情况​下,​可能​需要​显示​有关​测试​的​更多​具体​信息。 执行​序列​或​代码​模​块​必须​将​此​信息​传递​到​用户​界面​进行​显示,​或​指示​用户​界面​采取​措施。​为了​在​不​引入​耦合​的​情况​下​传达​此​信息,​可以​使用​UI​消息​来​实现​通信。​使用​序列​文件​属性​或​UI​变量​作为​通信​方式​的​替代​方法,​在​序列​文件​和​用户​界面​之间​创建​了​不必要​的​依赖​关系。​例如,​从​序列​更新​全局​文件,​然后​在​用户​界面​中​检查​其​状态,​这样​会​在​全局​文件​和​UI​之间​引入​耦合。  首​选​UI​消息​有​两​个​原因:

    1. UI​和​序列​文件​的​独立​性 — 用户​界面​应​始终​与​序列​文件​一起​运行,​反之亦然。 通过​使用​UI​消息,​在​同时​运行​序列​文件​和​用户​界面​时,​不​要求​序列​文件​中​存在​某些​属性。 使用​UI​消息:
      • 用户​界面​可以​执行​不​实现​某些​消息​的​序列​(用户​界面​中的​处理​代码​根本​不会​执行)。
      • 发布​自​定义​消息​的​序列​可以​在​并非​专​为​处理​自​定义​消息​而​构​建​的​UI​中​执行​(用户​界面​会​忽略​UI​消息)。
    2. 可​维护​性 — UI​消息​避免​了​对​序列​文件​属性​或​UI​变量​的​依赖,​这​意味​着​开发​人员​需要​维护​的​序列​文件​和​用户​界面​都​更少。

    有关​使用​UI​消息​的​更多​信息,​请​参阅​《使用​TestStand​用户​界面​消息​(UI​消息)》

    UI​消息​的​类型

    UI​消息​包含​了​表明​消息​用途​的​消息​ID。 TestStand​定义​了​多个​UI​消息​ID,​这些​ID​定义​了​由​引擎​自动​发送​或​由​TestStand​用户​界面​控​件​自动​处理​的​消息。 例如,​消息​ID UIMsg_EndExecution(值​4)​在​执行​结束​后​由​引擎​发送。 管理​器​控​件​将​许多​这些​UI​消息​显示​为​单独​的​事件;​在​这种​情况​下,​可以​定义​ApplicationManager EndExecution​事件​的​处理​程序,​而不是​直接​使用​UI​消息​事件​处理​程序。

    其他​UI​消息​由​默认​过程​模型​发布,​例如​UIMsg_ModelState_Identified(值:​32),​过程​模型​会​在​识别​待​测​设备​的​序列​号​之后​发布​此​消息。 此外,​还​可以​使用​Thread.PostUIMessageEx TestStand API​方法,​从​代码​模​块、​测试​序列​或​过程​模型​中​发布​预​定义​或​自​定义​的​UIMessage。

    UIMessageCodes帮助​主题​中​提供​了​UI​消息​ID​或​事件​代码​的​列表。

    您​可以​自行​定义​用于​自​定义​操作​(例如​更新​图表​和​直方​图​中的​数据)​的​UIMessage。​定义​自​定义​UIMessage​时,​请​从​UIMsg_UserMessageBase​事件​代码​开始​指定​唯一​的​事件​代码。​发布​自​定义​UIMessage​时,​传递​已​定义​的​事件​代码​和​要​显示​的​数据。​UI​消息​提供​了​用于​数值、​字符​串​或​ActiveX​数据​的​数据​字​段,​可以​在​调​用​postUIMessageEx​方法​时​指定​这些​字​段。​在​定义​处理​程序​以​响应​用户​界面​中的​UI​消息​时,​此​数据​会​作为​参数​在​事件​回​调​中​显示。

    要​定义​用户​界面​如何​处理​UI​消息,​请​为​以下​两​个​程序​管理​器​事件​中的​其中​一个​添加​事件​回​调,​从而​将​操作​员​界面​配置​为​在​处理​UI​消息​时​运行​用户​定义​的​代码:

    • UImessage事件 — 每​当​应用​程序​管理​器​处理​任何​UI​消息​时,​都会​触发​此​事件。 指定​的​事件​回​调​将​在​任何​默认​UI​消息​处理​操作​之前​执行。 在​回​调​中将​取消​输出​事件​参数​设置​为“True”,​可​覆盖​默认​事件​操作。
    • UserMessage事件 — 仅​针对​自​定义​UI​消息​(消息​ID​为​10000​或​更大​数字​的​UI​消息)​触发​此​事件。 

    有关​为​用户​界面​定义​事件​处理​程序​的​信息,​请​参阅​TestStand​帮助​中的处理​事件主题。

    从​用户​界面​到​执行​测试​的​通信

    在​某些​情况​下,​需要​将​信息​从​用户​界面​传​达到​测试​序列。 但是,​序列​和​UI​之间​的​通信​应​始终​由​序列​发起,​从而​确保​序列​处于​可​修改​其​数据​的​状态。 为此,​该​序列​可以​发布​带有​自​定义​代码​的​UI​消息,​以此​表明​它​已​准备​好​进行​通信。​发布​UIMessage​时,​将​同步​参数​设置​为“True”,​以便​等到​用户​界面​处理​该​消息​后​再​执行。​用户​界面​处理​UIMessage​时,​它​会​检索​SequenceContext​对象​并​写​入​或​读​取​某些​变量,​例如​过程​模型​局部​变量。
    在​许多​情况​下,​UI​并不​是​用户​指定​测试​相关​数据​的​最佳​位置。 例如,​如果​数据​与​过程​模型​中的​任务​有关,​最好​修改​或​创建​配置​入口​点,​以便​从​默认​菜单​访问​该​入口​点。

    本文转自:https://www.ni.com/content/ni/locales/zh-cn/support/documentation/supplemental/08/teststand-user-interface-development-best-practices.html

  • 相关阅读:
    大富翁8分析
    DCOM实现分布式应用(三)
    DCOM实现分布式应用(一)
    [转]职业生涯中的10个致命错误
    VC中展开宏
    zoj 2853 Evolution
    poj 1088 滑雪
    hdu 2437 Jerboas
    poj 3070 Fibonacci
    zoj 2976 Light Bulbs
  • 原文地址:https://www.cnblogs.com/YourDirection/p/13763747.html
Copyright © 2020-2023  润新知