陶宣彤
(株洲中車時代電氣有限公司 湖南省株洲市 412000)
在工業自動化生產過程中,利用TestStand 軟件來搭建自動化測試系統,已被廣泛應用。TestStand 軟件的特點包括具有圖形化的操作界面,支持主流應用開發環境編寫的代碼模塊,支持多線程并行測試等[1]。根據用戶需求,TestStand 還可以自動生成ASCII、HTML、XML、ATML 報表。測試完成之后,如何快速處理大量的測試報表并從中提取出想要的測試信息,這就給用戶提出了一個問題。本文基于此背景,利用Python 語言來介紹一種TestStand報表數據提取方式。
本文使用的編程語言Python3.8.5,主要解析TestStand2017 生成的ATML 報表,報表格式設置為ATML 5.00 Standards Report Document。
Python 是一種面向對象、解釋型計算機程序設計語言,使用簡單、方便。C 或者C++這類編譯性語言編寫的程序需要通過編譯器,將源文件轉換為計算機使用的二進制代碼,并且需要復制二進制代碼到內存中運行。而Python語言編寫的程序可以直接從源代碼運行。Python 同時提供了強大的標準庫,可以幫助處理各種工作,包括文檔生成,網頁瀏覽等與系統有關的操作。

圖1:測試報告內容

圖2:ATML 格式文件內容

圖3:程序運行界面

圖4:運行結果
TestStand 主要提供了ASCII、HTML、XML、ATML 這4 種報表格式。這幾種報表格式相比較,HTML 格式的報表解析難度最大,報表數據和格式緊密耦合,需要自定義解析器。ASCII 格式的報表解析難度比HTML 格式低,也是需要自定義解析器,但是格式信息受限。XML、ATML 這兩種格式都使用的是標準的XML 架構,可使用XML API 輕松解析。但是ATML 格式的文件在大小上比XML 要小,性能也比XML 格式的要好。本文選擇格式為“ATML 5.00 Standards Report Document”的文件進行解析。
本文利用TestStand 構造了一個測試序列,運行之后生成了多份測試報告,測試報告內容具體如圖1所示。
測試報表對應的ATML 格式文件部分內容如圖2所示。
本文研究的是在目標文件夾以及其子文件夾中,找到所有TestStand 報表,并提取所有測試報表中,用戶所需的某一項測試步驟的結果,并將提取結果返回。例如用戶設定提取圖中測試步驟“CESHI1-1”,則返回測試步驟名稱“CESHI1-1”以及結果“Failed”、具體數值“7.889069184305”。
2.2.1 報表搜尋
OS(operate system)模塊是Python 標準庫中的一個用于訪問操作系統的模塊,使用OS 模塊中提供的接口,可以實現跨平臺的訪問。本文需要搜索文件夾以及其子目錄文件夾中所有的XML 文件,所以需要使用OS 模塊。部分實現代碼如下所示。

2.2.2 文件解析
Python 有三種 XML 解析方式:SAX(simple API for XML)、DOM(Document Object Model)、ElementTree。SAX 通過逐行掃描文檔,一邊掃描一邊解析,對于大型文檔的解析擁有巨大優勢。ElementTree 解析速度快,API 使用也很方便。DOM 是 W3C 組織推薦的標準編程接口,DOM 的解析器在解析一個 XML 文檔時,一次性讀取整個文檔,把文檔中所有元素保存在內存中的一個樹結構里,之后可以利用DOM 提供的不同的函數來讀取或修改文檔的內容和結構,也可以把修改過的內容寫入XML 文件。
TESTSTAND 報表內容層次清晰,可以根據節點名稱逐層解析,本文采用DOM 來解析XML 文件。部分實現代碼如下。

當用戶設置測試名稱與文檔中的測試名稱一致時,提取測試結果,部分代碼如下。

程序運行后界面如圖3所示。
用戶輸入所需測試步驟名稱后,報表數據提取結果如4所示。
本文介紹了一種基于Python 解析TestStand 測試報表的方法,實現了用戶自定義所需測試項目,自動提取所有報表中有關該測試項目的具體測試結果,具有實際應用價值。