★北京廣利核系統(tǒng)工程有限公司 劉紅剛,黃太新,宋立新,孟廣國(guó)
DCS軟件界面自動(dòng)化測(cè)試技術(shù)研究與應(yīng)用
★北京廣利核系統(tǒng)工程有限公司 劉紅剛,黃太新,宋立新,孟廣國(guó)
隨著DCS軟件行業(yè)的發(fā)展,自動(dòng)化測(cè)試得到越來越廣闊的應(yīng)用,本文探索一種基于關(guān)鍵字的自動(dòng)化測(cè)試方法,本測(cè)試方法使用關(guān)鍵字歸納總結(jié)DCS軟件的常用操作,測(cè)試用例的步驟由關(guān)鍵字組合組成,測(cè)試用例等同于測(cè)試腳本。在實(shí)際應(yīng)用中可減少測(cè)試腳本的維護(hù)工作量和編寫難度,提高測(cè)試效率,目前本測(cè)試方法已應(yīng)用于FirmSys項(xiàng)目的算法組態(tài)軟件測(cè)試中。
關(guān)鍵字;自動(dòng)化測(cè)試;腳本
隨著DCS軟件開發(fā)技術(shù)的不斷發(fā)展,行業(yè)用戶對(duì)軟件的質(zhì)量要求越來越高,傳統(tǒng)的測(cè)試一般以手工測(cè)試為主,但是手工測(cè)試過程復(fù)用性差,測(cè)試結(jié)果無法保證一致性,當(dāng)執(zhí)行回歸測(cè)試時(shí),必須重新手工執(zhí)行,回歸工作量大,具有重復(fù)性、機(jī)械性。為了節(jié)約測(cè)試成本,在手工測(cè)試的基礎(chǔ)上興起了自動(dòng)化測(cè)試,自動(dòng)化測(cè)試一般分為錄制回放和人工編寫腳本兩種方式,此兩種方式都是基于測(cè)試工具的,離開測(cè)試工具腳本無法運(yùn)行[1]。
錄制回放技術(shù)原理是在測(cè)試人員操作被測(cè)軟件執(zhí)行測(cè)試用例時(shí),測(cè)試工具記錄下鍵盤和鼠標(biāo)的軌跡,并自動(dòng)生成測(cè)試腳本代碼,這樣生成的代碼冗余度高、可讀性差,而且腳本代碼中被測(cè)軟件業(yè)務(wù)邏輯代碼與控件代碼雜糅在一起,不利于后期的維護(hù)。
人工編寫腳本是錄制回放技術(shù)的進(jìn)一步升級(jí),腳本代碼由人工編寫,提高了代碼復(fù)用性、可讀性。一般流程是測(cè)試人員依據(jù)已經(jīng)編寫好的測(cè)試用例,在測(cè)試工具中逐條編寫測(cè)試腳本,用例運(yùn)行時(shí)由測(cè)試工具逐條運(yùn)行并反饋測(cè)試結(jié)果。
人工編寫腳本雖然可以減少腳本代碼的冗余度,并可以通過添加注釋提高可讀性,但是無法克服被測(cè)軟件業(yè)務(wù)邏輯代碼與被測(cè)軟件控件代碼雜糅的問題,當(dāng)測(cè)試用例的規(guī)模達(dá)到成千上萬條時(shí),腳本代碼的維護(hù)就是一個(gè)大問題,如果項(xiàng)目研發(fā)后期需要修改被測(cè)軟件界面上的一個(gè)控件,則不但需要修改自動(dòng)化腳本中該控件代碼,還需要修改所有涉及到該控件的測(cè)試業(yè)務(wù)邏輯代碼,測(cè)試腳本的維護(hù)工作量就會(huì)很大[2]。
為了解決上述問題,本文探索一種基于關(guān)鍵字的測(cè)試腳本編寫方法,測(cè)試腳本由關(guān)鍵字庫和業(yè)務(wù)邏輯兩部分組成,關(guān)鍵字主要為測(cè)試被測(cè)軟件時(shí)的基本操作,如“打開XX軟件”中“打開”即為關(guān)鍵字,后面的“XX軟件”為參數(shù)。關(guān)鍵字和參數(shù)的組合或多個(gè)關(guān)鍵字和參數(shù)的組合即形成被測(cè)軟件的業(yè)務(wù)邏輯。在編寫測(cè)試文檔中測(cè)試用例時(shí),使用關(guān)鍵字或業(yè)務(wù)邏輯組合形成測(cè)試用例的步驟,這樣形成的測(cè)試用例就是測(cè)試腳本。后續(xù)運(yùn)行測(cè)試腳本時(shí),首先解析測(cè)試用例的步驟,解析出關(guān)鍵字和參數(shù),然后調(diào)用對(duì)應(yīng)的關(guān)鍵字庫代碼執(zhí)行測(cè)試。測(cè)試完成后依據(jù)測(cè)試結(jié)果進(jìn)行驗(yàn)證并填寫測(cè)試是否通過。
本框架主要由測(cè)試用例文件、關(guān)鍵字庫、控件庫、測(cè)試驅(qū)動(dòng)器組成(如圖1所示)。測(cè)試用例文件以表格形式描述了測(cè)試用例名稱、測(cè)試步驟、預(yù)期結(jié)果、實(shí)際結(jié)果。關(guān)鍵字庫定義了每個(gè)關(guān)鍵字與測(cè)試用例文件中關(guān)鍵字的關(guān)聯(lián)。控件庫中定義了被測(cè)軟件界面所有可識(shí)別控件的代碼。測(cè)試驅(qū)動(dòng)器解析測(cè)試用例文件,并讀取關(guān)鍵字庫,建立測(cè)試用例文件與關(guān)鍵字的關(guān)聯(lián),執(zhí)行測(cè)試用例并驗(yàn)證測(cè)試結(jié)果。本測(cè)試框架通過關(guān)鍵字庫和控件庫的設(shè)計(jì),實(shí)現(xiàn)了被測(cè)軟件業(yè)務(wù)邏輯操作代碼與被測(cè)軟件控件代碼的分離,并把測(cè)試腳本與測(cè)試用例合為一體,提高了測(cè)試腳本的復(fù)用性。

圖1 基于關(guān)鍵字的測(cè)試框架
3.1 控件識(shí)別技術(shù)
在進(jìn)行自動(dòng)化測(cè)試之前,首先要做的是要保證被測(cè)軟件界面上的控件都可以被識(shí)別,一個(gè)控件只有是可識(shí)別的,才可以在腳本中被靈活操作,自動(dòng)化測(cè)試的主要難度也在于此,在研發(fā)過程中,研發(fā)人員使用的控件是多種多樣的,比如WinForm控件、WPF控件、繪制控件以及一些復(fù)雜的組合控件等,正是由于控件的多樣性,造成了控件識(shí)別的難度[3]。
當(dāng)前控件識(shí)別的技術(shù)主要有MSAA、UIA和智能識(shí)別技術(shù),MSAA技術(shù)的全稱是Microsoft Active Accessibility,通過暴露出IAccessible接口與測(cè)試程序交互[4],測(cè)試程序與被測(cè)控件的交互如圖2所示。

圖2 MSAA技術(shù)原理
UIA(MS UI Automation)是MSAA技術(shù)的一個(gè)替代品,和MSAA相比,UIA重新設(shè)計(jì)了架構(gòu),在架構(gòu)中定義了以下兩個(gè)部分:UIA Provider即軟件本身[5],UIA Client即自動(dòng)化腳本和相關(guān)的assistive technology applications,兩者之間的關(guān)系如圖3所示。

圖3 UIA技術(shù)原理
智能識(shí)別技術(shù)主要是指把當(dāng)前興起的圖像識(shí)別和文字識(shí)別技術(shù)運(yùn)用到自動(dòng)化測(cè)試中,這種技術(shù)的運(yùn)用主要是針對(duì)繪制的控件,與MSAA和UIA技術(shù)相比,穩(wěn)定性稍差。
當(dāng)所有的控件識(shí)別技術(shù)都失效時(shí),還可以使用鼠標(biāo)鍵盤的模擬來操作被測(cè)軟件,這種操作依賴于當(dāng)前激活的窗口和光標(biāo)位置,測(cè)試腳本的適應(yīng)性差,后期維護(hù)成本很高,在腳本編寫上要盡量避免[6]。
依據(jù)以上控件識(shí)別技術(shù),獲取被測(cè)軟件中控件的自動(dòng)化屬性,控件屬性的獲取可以使用UISPY工具,如通過UIA技術(shù)可以獲取到控件的如下屬性:Name、AutomationID、Text等。
3.2 編寫控件庫代碼
獲取到控件的自動(dòng)化屬性后,對(duì)被測(cè)軟件上的控件編寫控件代碼,通過控件代碼可以定位和操作控件,通常一個(gè)控件有多個(gè)屬性,控件的屬性包括:AutomationId、ControlType、Name、FriendlyName,一般選取一個(gè)具有唯一性的屬性作為搜索屬性[7],在運(yùn)行測(cè)試腳本時(shí)用于定位控件。如可以使用控件的id或Name作為搜索屬性編寫控件代碼。以DCS系統(tǒng)中使用的算法組態(tài)軟件REDACE軟件為例,以菜單項(xiàng)“打開工程”來說明控件代碼的編寫,選取自動(dòng)化屬性為AutomationId=“打開工程”作為搜索屬
性,關(guān)鍵代碼如下:
....
public WpfMenuItem UIUltraStudioShellView
MenuItem_打開工程 //主菜單下“打開工程”菜單
{
get
{
if ((this.mUIUltraStudioShellViewMenuItem_打開工程 == null))
{this.mUIUltraStudioShellViewMenuItem_打開工程 =
new WpfMenuItem(this);
#region 搜索條件
this.mUIUltraStudioShellViewMenuItem_打開工程.SearchProperties[WpfMenuItem.PropertyNames. AutomationId] = "打開工程";
this.mUIUltraStudioShellViewMenuItem_打開工
程.WindowTitles.Add("REDACE Studio");
#endregion
}
return this.mUIUltraStudioShellViewMenuItem_打開工程;
}
}
...
把被測(cè)軟件測(cè)試操作中使用到的所有控件的代碼集合在一個(gè)文件中集中管理,就形成了控件庫文件(如圖4所示),后續(xù)控件如有修改,只修改此文件即可。
然后對(duì)控件庫中控件進(jìn)行“聲明”,并形成控件的聲明文件,以備后面的調(diào)用,如下對(duì)控件“打開工程”的聲明:
public WpfMenuItem uIUltraStudioShellView MenuItem_打開工程 //主按鈕下——打開工程
{
get { return this.UIUltraStudioShellWindow. UIUltraStudioShellViewMenuItem_打開工程; }

圖4 控件庫
}
對(duì)測(cè)試過程中的操作進(jìn)行分析,對(duì)常用且可以用代碼實(shí)現(xiàn)的操作依據(jù)操作邏輯編寫代碼,并將這些操作定義為關(guān)鍵字,如上述控件“打開工程”,對(duì)該控件的操作為“點(diǎn)擊”,即關(guān)鍵字為“點(diǎn)擊菜單”,此操作帶有一個(gè)參數(shù)。
public void 點(diǎn)擊菜單(string uIName)
{
uIUltraStudioShellViewMenuItem.SearchProp
erties["AutomationId "] = uIName; //“搜索屬性”的動(dòng)態(tài)設(shè)定
Mouse.Click(uIUltraStudioShellViewMenuItem);
}
下面代碼是關(guān)鍵字“新建空白工程”,其中參數(shù)為新建工程的路徑及工程名,關(guān)鍵代碼如下:
public void 新建空白工程(string Filepath,string ProjName)
{
Assert.IsTrue(uIUltraStudioShellWindow.Exists, "REDACE未啟動(dòng)成功");
this.uIUltraStudioShellWindow.Maximized = true;
if (Directory.Exists(Filepath + @""+ProjName))
{
Directory.Delete(Filepath + @"" + ProjName, true);
} uiExpandControl(uiFileMenu);
Mouse.Click(uIUltraStudioShellViewMenuIte m_新建);
uIEdtLocationEdit.Text = Filepath;
uIEdtPrjNameEdit.Text = ProjName;
Mouse.Click(uI確定Button_new);
}
對(duì)測(cè)試過程中的所有關(guān)鍵字使用編程語言進(jìn)行邏輯描述形成關(guān)鍵字代碼,把所有關(guān)鍵字代碼集合在一個(gè)文件中集中管理,就形成了關(guān)鍵字庫(如圖5所示)。在關(guān)鍵字庫中,關(guān)鍵字和關(guān)鍵字可以組合形成另一個(gè)比較大的關(guān)鍵字。

圖5 關(guān)鍵字庫
在VS2010中新建“類庫”項(xiàng)目,把以上編寫的控件庫文件、控件聲明文件、關(guān)鍵字庫文件進(jìn)行編譯生成,最后生成動(dòng)態(tài)鏈接庫文件。
編寫測(cè)試用例文檔時(shí),首先定義好測(cè)試文檔中測(cè)試用例開始和結(jié)束的標(biāo)記,測(cè)試文檔可以使用Excel或txt。以Excel為例,在Excel中編寫測(cè)試用例時(shí)定義好每一個(gè)測(cè)試用例開始和結(jié)束的標(biāo)記,如從第二行開始在A列寫測(cè)試用例名稱,下一行B列開始編寫測(cè)試步驟,如果測(cè)試步驟結(jié)束,下一行A列寫下一個(gè)測(cè)試用例名稱,測(cè)試用例開始的標(biāo)記為A列測(cè)試名稱,結(jié)束的標(biāo)記為B列空行。使用關(guān)鍵字和參數(shù)來描述測(cè)試步驟,即將測(cè)試用例文檔中測(cè)試步驟的操作命令以關(guān)鍵字命名,關(guān)鍵字和參數(shù)之間使用字符雙引號(hào)(“”)區(qū)分,雙引號(hào)里的內(nèi)容為參數(shù),如果為多個(gè)參數(shù),則以逗號(hào)(,)分開。表1為測(cè)試用例文檔中測(cè)試用例的內(nèi)容:
測(cè)試驅(qū)動(dòng)器主要完成測(cè)試用例的解析、關(guān)聯(lián)關(guān)鍵字庫(如圖6所示),運(yùn)行測(cè)試用例后填寫測(cè)試結(jié)果,測(cè)試驅(qū)動(dòng)器是一個(gè)可獨(dú)立運(yùn)行的程序,程序的窗體界面包括可輸入測(cè)試用例文檔的路徑以及關(guān)鍵字動(dòng)態(tài)鏈接庫文件的路徑,用于關(guān)聯(lián)測(cè)試用例文檔和關(guān)鍵字動(dòng)態(tài)鏈接庫,實(shí)現(xiàn)測(cè)試腳本的自動(dòng)執(zhí)行。

圖6 測(cè)試驅(qū)動(dòng)器
測(cè)試過程中對(duì)含有測(cè)試用例的表格進(jìn)行遍歷,首先獲取測(cè)試用例名稱,測(cè)試用例名稱標(biāo)示測(cè)試步驟的開始,接下來獲取測(cè)試步驟,解析測(cè)試步驟中的關(guān)鍵字和參數(shù),然后在關(guān)鍵字庫中查找對(duì)應(yīng)的關(guān)鍵字,查找到則執(zhí)行對(duì)應(yīng)的測(cè)試腳本,最后驗(yàn)證執(zhí)行結(jié)果,并填寫測(cè)試結(jié)果到測(cè)試用例文檔中,如果在執(zhí)行腳本過程中有異常發(fā)生,則把腳本異常信息填寫到測(cè)試結(jié)果處,以用作后續(xù)對(duì)測(cè)試腳本的維護(hù),整個(gè)流程如圖7所示。

表1 測(cè)試用例

圖7 測(cè)試流程
以上述DCS系統(tǒng)中使用的算法組態(tài)軟件REDACE軟件的測(cè)試為例描述整個(gè)流程:
第一步,在測(cè)試用例表格中讀取第一條用例名稱為:新建算法工程;
第二步,獲取測(cè)試步驟,解析測(cè)試步驟中的關(guān)鍵字和執(zhí)行參數(shù),關(guān)鍵字為:“打開”,參數(shù)為:文件路徑“D:EASTREDACECommonIDERedace.exe”;
第三步,將第二步中獲取的關(guān)鍵字在關(guān)鍵庫中遍歷查找,如果沒有找到此關(guān)鍵字,則直接填寫測(cè)試結(jié)果“腳本運(yùn)行異常”,表示腳本異常;否則調(diào)用關(guān)鍵字對(duì)應(yīng)的測(cè)試腳本,同時(shí)接收輸入的參數(shù),執(zhí)行找到的關(guān)鍵字對(duì)應(yīng)的測(cè)試腳本,如果執(zhí)行過程中參數(shù)錯(cuò)誤或執(zhí)行異常,則直接填寫測(cè)試結(jié)果“腳本運(yùn)行異常”,表示腳本異常;
第四步,獲取下一個(gè)測(cè)試步驟解析測(cè)試步驟中的關(guān)鍵字和執(zhí)行參數(shù),關(guān)鍵字為:“新建空白工程”,參數(shù)為:文件路徑及工程名“D:測(cè)試工程,New_Pro”;
第五步,將第四步中獲取的關(guān)鍵字在關(guān)鍵字庫中查找,如果沒有找到此關(guān)鍵字,則直接填寫測(cè)試結(jié)果“腳本運(yùn)行異常”,表示腳本異常;否則調(diào)用關(guān)鍵字對(duì)應(yīng)的測(cè)試腳本,同時(shí)接收輸入的參數(shù),執(zhí)行找到的關(guān)鍵字對(duì)應(yīng)的測(cè)試腳本,如果執(zhí)行過程中參數(shù)錯(cuò)誤或執(zhí)行異常,則直接填寫測(cè)試結(jié)果“腳本運(yùn)行異常”,表示腳本異常;
第六步,驗(yàn)證測(cè)試結(jié)果,并填寫測(cè)試結(jié)果,繼續(xù)讀取下一條測(cè)試用例的用例名稱,執(zhí)行步驟第二步。
本文論述了一種適用于DCS軟件的自動(dòng)化測(cè)試方法,通過應(yīng)用本方法,可自動(dòng)執(zhí)行測(cè)試用例,并自動(dòng)反饋填寫測(cè)試結(jié)果,在后期測(cè)試腳本維護(hù)工作中可以減少維護(hù)的工作量,測(cè)試用例文檔與測(cè)試腳本相關(guān)聯(lián),并把測(cè)試腳本中的測(cè)試業(yè)務(wù)邏輯放到測(cè)試文檔的用例中,使得測(cè)試用例等同于測(cè)試腳本,在一定程度上也減少了腳本的編寫難度,保證了測(cè)試用例文檔與測(cè)試腳本的一致性。
[1] 陳冬嚴(yán), 邵杰明, 王東剛, 等. 精通自動(dòng)化測(cè)試框架設(shè)計(jì)[M]. 北京:人民郵電出版社,2016. 151 - 160.
[2] 張俊卿. 測(cè)之重器—自動(dòng)化測(cè)試框架搭建指南[M]. 北京:電子工業(yè)出版社,2016. 51 - 59.
[3] 胡錚. 軟件自動(dòng)化測(cè)試工具實(shí)用技術(shù)[M]. 北京:科學(xué)出版社,2011. 351 - 356.
[4] 李千目. 軟件自動(dòng)化測(cè)試原理與實(shí)證[M]. 北京:清華大學(xué)出版社,2015. 32 - 34.
[5] 孫繼榮. 軟件測(cè)試自動(dòng)化關(guān)鍵技術(shù)研究[M]. 成都:西南財(cái)經(jīng)大學(xué)出版社,2015, 81 - 89.
[6] 余杰. 精通QTP自動(dòng)化測(cè)試技術(shù)領(lǐng)航[M]. 北京:人民郵電出版社發(fā)行部,2012. 21 - 24.
[7] 齊濤. Robot Framework自動(dòng)化測(cè)試修煉寶典[M]. 北京:電子工業(yè)出版社,2015, 251 - 254.
Research and Application of Automatic Testing Technology Based on DCS Software Interface
With the development of DCS software industry, automatic testing has increasingly wide applications. This article explores an automatic testing method based on keywords, and this method uses keywords to summarize common operations of DCS software, The steps of test cases is composed of keywords, and the test cases is equivalent to the test scripts. In practical applications, it can reduce the maintenance workload and difficulty of writing test scripts, and improve the efficiency of the testing process. Currently, this test method has been applied to the testing of the algorithm configuration software in FirmSys project.
Keyword; Automatic testing; Script
劉紅剛(1985-),男,河南人,工程師,碩士研究生,現(xiàn)就職于北京廣利核系統(tǒng)工程有限公司,從事核電數(shù)字化儀控系統(tǒng)軟件測(cè)試工作。
黃太新(1980-),男,湖北人,工程師,碩士研究生,現(xiàn)就職于北京廣利核系統(tǒng)工程有限公司,從事核電數(shù)字化儀控系統(tǒng)軟件測(cè)試工作。
宋立新(1976-),男,吉林人,高級(jí)工程師,碩士研究生,現(xiàn)就職于北京廣利核系統(tǒng)工程有限公司,從事核電數(shù)字化儀控系統(tǒng)產(chǎn)品驗(yàn)證工作。
孟廣國(guó)(1969-),男,北京人,高級(jí)工程師,工程碩士,現(xiàn)就職于北京廣利核系統(tǒng)工程有限公司,從事核電站數(shù)字化儀控系統(tǒng)的產(chǎn)品研發(fā)、質(zhì)量保證、工程應(yīng)用工作。