官术网_书友最值得收藏!

5.3.2 運行時(RunState)屬性

RunState容器中包含很多子屬性,序列執行過程中的實時信息都存儲在RunState中,這也是它的名稱由來。在圖5-10所示變量窗格中(先不關注“Object Reference”對象引用數據類型),很多子屬性是非常直觀的,如“IsProcessModel”表示當前執行序列是否屬于過程模型,“Tracing”表示是否使能了追蹤功能,“SequenceFailed”表示序列狀態,子屬性保存了序列執行時的狀態,讀者可以逐個查看,這里不再逐一介紹。其中,RunState.SequenceFile、RunState.Sequence、RunState.Step包含的信息較多,它們分別代表序列文件、序列和步驟。

圖5-10 運行時(RunState)屬性

1.RunState.SequenceFile

RunState.SequenceFile代表的是一個序列文件對象,它表示正在執行的序列所在的序列文件,通過它可以獲取序列文件的很多信息。RunState.SequenceFile的子屬性RunState.SequenceFile.Data.Seq則包含了該序列文件中的所有序列,是一個序列數組,但任何時候它一直保存的是所有序列的默認值,即序列在編輯狀態時的值,即使序列中的變量、屬性在執行過程中被更新,也不會反映到RunState.SequenceFile.Data.Seq中。RunState.SequenceFile還有其他子屬性,列舉在表5-1中。

表5-1 RunState.SequenceFile包含的子屬性

2.RunState.Sequence

RunState.Sequence代表的是一個序列對象,它表示當前正在被執行的序列,包括了局部變量、參量、序列中的所有步驟。RunState.Sequence其實是RunState.SequenceFile.Data.Seq序列數組中某個序列元素的運行時拷貝,它保存了序列執行的實時信息,例如某個變量在執行過程中被更新了,那么在RunState.Sequence的子屬性RunState.Sequence.Locals中就立刻保存了該變量的最新值。RunState.Sequence包含的子屬性列舉在表5-2中。

表5-2 RunState.Sequence包含的子屬性

續表

3.RunState.Step

RunState.Step代表的是一個步驟對象,它表示當前正在執行的步驟。RunState.Step其實是RunState.Sequence中某個步驟組的步驟,只是TestStand為了方便用戶的訪問,將當前步驟用一個單獨的屬性RunState.Step表示。如果用數學中集合的概念來描述RunState.Sequence和RunState.Step之間的關系,則RunState.Step是RunState.Sequence的一個子集。RunState.Step有很多子屬性,這些子屬性因步驟類型而異,但都會包含Result容器,Result容器下面包含Error、Status、ReportText等通用屬性,這些信息已經在前面介紹過。

4.動態屬性

RunState容器中有一類特殊的屬性,數據類型是“Object Reference”(對象引用),類似于C語言中的指針,對象引用默認為空(Nothing),只有在序列執行時,才會給它們分配對象引用,這時這些屬性才有意義,而在序列執行結束后,TestStand又會釋放對象引用,這類屬性稱為動態屬性。如圖5-11所示,其中的Engine、Root、Main、Caller、Calling Step、Report、Execution、Thread就屬于動態屬性,它們的數據類型都是對象引用,且除Engine以外,其他的初始值都為空。還有一個動態屬性RunState.ProcessModelClient,在序列未執行時,它甚至是不可見的。

圖5-11 RunState容器中包含的動態屬性

以RunState.Main屬性為例,它指向最少嵌套的序列,并且必須不是過程模型中的序列。假如創建了客戶端序列文件且使用了過程模型,那么RunState.Main一般是指客戶端序列文件的主序列。在序列未執行或處于編輯狀態時,RunState.Main值為空;而序列執行時,TestStand將主序列的上下文信息(Sequence Context數據類型)作為對象引用傳遞給它,此時動態屬性就有了實際意義且可以被訪問了,它包含了主序列的所有當前信息,如圖5-12所示。

圖5-12 序列執行時RunState.Main動態屬性的值

提示:讀者目前只需要對動態屬性有初步的了解,關于每個動態屬性的描述說明請參考TestStand幫助文檔,在索引中輸入關鍵詞“RunState Subproperties”。

【練習5-3】TestStand中的屬性訪問

在本練習中,模擬測試一個多媒體器件,包含音頻測試和視頻測試,在某些步驟中訪問步驟屬性或運行時屬性,并且觀察這些屬性如何對序列的執行產生影響。

(1)打開序列編輯器,新建一個序列文件并將其保存為<Exercises>\Chapter 5\Step Property and RunState Property.seq。

(2)在插入面板中,選擇模塊適配器為“None”。

(3)在主序列中添加一個數值限度測試步驟,命名為“Audio Test”。在屬性配置頁表達式面板的“Pre-Expression”中輸入“Step.Limits.Low=-1”,其他設置保持默認,如圖5-13所示。

(4)在Audio Test步驟之后添加一個數值限度測試步驟,命名為“Video Test”。在其屬性配置頁先決條件中輸入“RunState.PreviousStep.Result.Status!="Failed"”,其他設置保持默認,如圖5-14所示。

(5)在Video Test步驟之后添加If步驟,在“Conditional Expression”中輸入“PropertyExists("RunState.ProcessModelClient")”,如圖5-15所示。PropertyExists函數用來驗證某個屬性是否存在。這里要驗證的屬性就是RunState.ProcessModelClient,它表示客戶端序列文件對象引用,只有通過過程模型執行序列時該屬性才存在。

圖5-13 Audio Test步驟設置“Pre-Expression”

圖5-14 Video Test步驟的先決條件設置

圖5-15 If步驟的條件表達式

(6)創建If步驟時,TestStand會自動添加對應的End步驟。在If&End之間添加一個消息對話框,消息表達式中輸入“"You are running within a process mode\n"+"Model Path:"+RunState.Root.RunState.SequenceFile.Path”。主序列現在看起來應該如圖5-16所示。

圖5-16 主序列

(7)執行菜單命令“ConfigureResult Processing”,在彈出的對話框中,確認“Report”欄中“Enabled”選項是選中的,且報表格式是“XML”(這是完成TestStand 2013安裝時的默認配置),如圖5-17所示。

圖5-17“Result Processing”對話框中報表欄的設置

(8)保存序列文件,通過菜單命令“ExecuteSingle Pass”執行序列。在序列執行完成后會生成XML報表,注意觀察報表中Audio Test步驟和Video Test步驟的結果,如圖5-18所示。

圖5-18 Audio Test步驟和Video Test步驟的結果報表

(9)如果將Audio Test步驟中的“Pre Expression”刪除,然后通過菜單命令“ExecuteSingle Pass”重新執行序列,在報表中觀察“Video Test”的狀態。

在步驟(3)中,Audio Test步驟的“Pre-Expression”中輸入“Step.Limits.Low=-1”,這是對步驟屬性的訪問,并對Step.Limits.Low的值進行了更新,因此雖然Measurement值為0,但它處于上下限范圍之內,Audio Test步驟的狀態是“Passed”。在步驟(4)中,Video Test步驟的先決條件是前一步驟的狀態不能是“Failed”,所以在將Audio Test步驟中的“Pre-Expression”刪除后,Audio Test步驟的狀態將變成“Failed”,那么Video Test步驟的先決條件不滿足,因此它的狀態將會是“Skipped”,沒有被執行,這在實際測試中有時會用到。比如,前一項失敗的話,后續的一系列測試可能也就沒必要進行了。在步驟(5)中,If語句的條件表達式為PropertyExists("RunState.ProcessModelClient"),而步驟(8)和(9)中是通過使用過程模型執行入口點Single Pass執行序列的,因此ProcessModelClient屬性是存在的,所以會有消息對話框彈出;如果換成“ExecuteRun MainSequence”,就不會彈出消息對話框了。需要注意的是,步驟(6)的消息表達式中包含了動態屬性RunState.Root.RunState.SequenceFile.Path,動態屬性在序列編輯狀態時不可訪問,如RunState.Root值為“Nothing”,因此當單擊表達式語法檢查按鈕圖標時,會彈出如圖5-19所示的警示窗口;如果確認表達式沒有問題,就可以忽略該警示。

圖5-19 表達式評估警示窗口

在范例資源的第5章練習中,例程<Exercises>\Chapter 5\Step Property and RunState Property-solution.seq完成的是上面的練習,讀者可以運行該范例并觀察結果。

主站蜘蛛池模板: 邛崃市| 淮阳县| 福建省| 榕江县| 太康县| 米泉市| 兴安县| 德清县| 元朗区| 岑溪市| 门源| 泸西县| 宝清县| 布尔津县| 庄浪县| 名山县| 绥化市| 阿图什市| 辉县市| 宜兰县| 枣强县| 孟津县| 天全县| 久治县| 林州市| 商水县| 巴塘县| 新竹市| 峨山| 东光县| 仪征市| 九江县| 阳信县| 新田县| 高要市| 金山区| 津南区| 建瓯市| 西丰县| 靖宇县| 双江|