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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM