陶宣彤
(株洲中車(chē)時(shí)代電氣有限公司 湖南省株洲市 412000)
在工業(yè)自動(dòng)化生產(chǎn)過(guò)程中,利用TestStand 軟件來(lái)搭建自動(dòng)化測(cè)試系統(tǒng),已被廣泛應(yīng)用。TestStand 軟件的特點(diǎn)包括具有圖形化的操作界面,支持主流應(yīng)用開(kāi)發(fā)環(huán)境編寫(xiě)的代碼模塊,支持多線(xiàn)程并行測(cè)試等[1]。根據(jù)用戶(hù)需求,TestStand 還可以自動(dòng)生成ASCII、HTML、XML、ATML 報(bào)表。測(cè)試完成之后,如何快速處理大量的測(cè)試報(bào)表并從中提取出想要的測(cè)試信息,這就給用戶(hù)提出了一個(gè)問(wèn)題。本文基于此背景,利用Python 語(yǔ)言來(lái)介紹一種TestStand報(bào)表數(shù)據(jù)提取方式。
本文使用的編程語(yǔ)言Python3.8.5,主要解析TestStand2017 生成的ATML 報(bào)表,報(bào)表格式設(shè)置為ATML 5.00 Standards Report Document。
Python 是一種面向?qū)ο蟆⒔忉屝陀?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,使用簡(jiǎn)單、方便。C 或者C++這類(lèi)編譯性語(yǔ)言編寫(xiě)的程序需要通過(guò)編譯器,將源文件轉(zhuǎn)換為計(jì)算機(jī)使用的二進(jìn)制代碼,并且需要復(fù)制二進(jìn)制代碼到內(nèi)存中運(yùn)行。而Python語(yǔ)言編寫(xiě)的程序可以直接從源代碼運(yùn)行。Python 同時(shí)提供了強(qiáng)大的標(biāo)準(zhǔn)庫(kù),可以幫助處理各種工作,包括文檔生成,網(wǎng)頁(yè)瀏覽等與系統(tǒng)有關(guān)的操作。
圖1:測(cè)試報(bào)告內(nèi)容
圖2:ATML 格式文件內(nèi)容
圖3:程序運(yùn)行界面
圖4:運(yùn)行結(jié)果
TestStand 主要提供了ASCII、HTML、XML、ATML 這4 種報(bào)表格式。這幾種報(bào)表格式相比較,HTML 格式的報(bào)表解析難度最大,報(bào)表數(shù)據(jù)和格式緊密耦合,需要自定義解析器。ASCII 格式的報(bào)表解析難度比HTML 格式低,也是需要自定義解析器,但是格式信息受限。XML、ATML 這兩種格式都使用的是標(biāo)準(zhǔn)的XML 架構(gòu),可使用XML API 輕松解析。但是ATML 格式的文件在大小上比XML 要小,性能也比XML 格式的要好。本文選擇格式為“ATML 5.00 Standards Report Document”的文件進(jìn)行解析。
本文利用TestStand 構(gòu)造了一個(gè)測(cè)試序列,運(yùn)行之后生成了多份測(cè)試報(bào)告,測(cè)試報(bào)告內(nèi)容具體如圖1所示。
測(cè)試報(bào)表對(duì)應(yīng)的ATML 格式文件部分內(nèi)容如圖2所示。
本文研究的是在目標(biāo)文件夾以及其子文件夾中,找到所有TestStand 報(bào)表,并提取所有測(cè)試報(bào)表中,用戶(hù)所需的某一項(xiàng)測(cè)試步驟的結(jié)果,并將提取結(jié)果返回。例如用戶(hù)設(shè)定提取圖中測(cè)試步驟“CESHI1-1”,則返回測(cè)試步驟名稱(chēng)“CESHI1-1”以及結(jié)果“Failed”、具體數(shù)值“7.889069184305”。
2.2.1 報(bào)表搜尋
OS(operate system)模塊是Python 標(biāo)準(zhǔn)庫(kù)中的一個(gè)用于訪(fǎng)問(wèn)操作系統(tǒng)的模塊,使用OS 模塊中提供的接口,可以實(shí)現(xiàn)跨平臺(tái)的訪(fǎng)問(wèn)。本文需要搜索文件夾以及其子目錄文件夾中所有的XML 文件,所以需要使用OS 模塊。部分實(shí)現(xiàn)代碼如下所示。
2.2.2 文件解析
Python 有三種 XML 解析方式:SAX(simple API for XML)、DOM(Document Object Model)、ElementTree。SAX 通過(guò)逐行掃描文檔,一邊掃描一邊解析,對(duì)于大型文檔的解析擁有巨大優(yōu)勢(shì)。ElementTree 解析速度快,API 使用也很方便。DOM 是 W3C 組織推薦的標(biāo)準(zhǔn)編程接口,DOM 的解析器在解析一個(gè) XML 文檔時(shí),一次性讀取整個(gè)文檔,把文檔中所有元素保存在內(nèi)存中的一個(gè)樹(shù)結(jié)構(gòu)里,之后可以利用DOM 提供的不同的函數(shù)來(lái)讀取或修改文檔的內(nèi)容和結(jié)構(gòu),也可以把修改過(guò)的內(nèi)容寫(xiě)入XML 文件。
TESTSTAND 報(bào)表內(nèi)容層次清晰,可以根據(jù)節(jié)點(diǎn)名稱(chēng)逐層解析,本文采用DOM 來(lái)解析XML 文件。部分實(shí)現(xiàn)代碼如下。
當(dāng)用戶(hù)設(shè)置測(cè)試名稱(chēng)與文檔中的測(cè)試名稱(chēng)一致時(shí),提取測(cè)試結(jié)果,部分代碼如下。
程序運(yùn)行后界面如圖3所示。
用戶(hù)輸入所需測(cè)試步驟名稱(chēng)后,報(bào)表數(shù)據(jù)提取結(jié)果如4所示。
本文介紹了一種基于Python 解析TestStand 測(cè)試報(bào)表的方法,實(shí)現(xiàn)了用戶(hù)自定義所需測(cè)試項(xiàng)目,自動(dòng)提取所有報(bào)表中有關(guān)該測(cè)試項(xiàng)目的具體測(cè)試結(jié)果,具有實(shí)際應(yīng)用價(jià)值。