黎其宇 何曉恩
民航中南空管局通信網(wǎng)絡(luò)中心 廣東 廣州 510000
AMAN(Arrival Manager),即進(jìn)場管理系統(tǒng),其主要功能為安排進(jìn)港飛機(jī)更高效地使用空域與跑道,提升管制員的工作效率的同時減少其工作量。該系統(tǒng)采用迭代的開發(fā)模式,每一個迭代版本完成后都會投入到用戶的試運(yùn)行中。運(yùn)行中發(fā)現(xiàn),系統(tǒng)在長時間持續(xù)使用后,客戶端有一定概率出現(xiàn)錯誤。在以往的內(nèi)部測試中,這種問題不容易檢測和重現(xiàn),因?yàn)橐酝煽啃詼y試主要應(yīng)用在服務(wù)端,通過性能測試工具持續(xù)為服務(wù)端施加壓力。但本次系統(tǒng)的錯誤出現(xiàn)在客戶端而不是服務(wù)端,通過測試員模擬用戶跨天不間斷的操作幾乎是不可能的。
本文通過使用桌面自動化測試工具QTP,模擬用戶在軟件界面上多次重復(fù)的操作,在一定程度上可以重現(xiàn)這些問題和避免以后再出現(xiàn),從而實(shí)現(xiàn)一種在客戶端下測試系統(tǒng)可靠性的嘗試。
進(jìn)港管理系統(tǒng)(AMAN)是一種進(jìn)港排序輔助決策系統(tǒng),提供一個高效和安全的機(jī)場降落順暢航班流,旨在減輕繁忙終端區(qū)管制負(fù)荷,提高效率,提高安全。系統(tǒng)通過所有進(jìn)港航班在航路飛行階段的提前計(jì)算,來構(gòu)建一個優(yōu)化的進(jìn)港隊(duì)列。使用用戶包括:塔臺、進(jìn)近、區(qū)域?qū)崟r指揮人員。AMAN用來管理進(jìn)港航班,為管制員提供進(jìn)港航班排序隊(duì)列及決策建議。系統(tǒng)根據(jù)空域參數(shù)和航空器性能進(jìn)行系統(tǒng)參數(shù)配置,引接空中交通自動化系統(tǒng)信息、飛行計(jì)劃、多雷達(dá)航跡、GPS時鐘以及氣象狀況等多項(xiàng)信息,對所有進(jìn)港航班在區(qū)域階段進(jìn)行提前計(jì)算,提供航班最優(yōu)排序序列,跑道選擇和時間與延誤建議,構(gòu)建一個優(yōu)化的進(jìn)港隊(duì)列。系統(tǒng)通過全局規(guī)劃,建立區(qū)域、進(jìn)近、塔臺席位間統(tǒng)一的場景認(rèn)知、規(guī)避管制矛盾,減少管制的工作負(fù)擔(dān),從而實(shí)現(xiàn)高效、流暢、平穩(wěn)的交通流量[1]。
應(yīng)用軟件架構(gòu)一般在邏輯上分為4層:①用戶界面層 UI:為終端用戶提供交互的人機(jī)界面 ②業(yè)務(wù)邏輯層 BLL:將數(shù)據(jù)庫抽象出來的對象進(jìn)行拼接成具體的業(yè)務(wù)邏輯對象,并對之進(jìn)行流程組織 ③數(shù)據(jù)訪問層 DAL:對DB層做的ORM,讓上層應(yīng)用程序以對象的方式操控?cái)?shù)據(jù)庫 ④數(shù)據(jù)持久層 DB:存儲數(shù)據(jù),對數(shù)據(jù)進(jìn)行持久化,不同的客戶端進(jìn)行數(shù)據(jù)共享。
本文中介紹的自動化測試工具QTP工作在UI層,它可以識別windows標(biāo)準(zhǔn)控件。通常一個控件可以被稱為一個對象。QTP識別對象的方法,是通過窗口句柄、id等方式,查找出待測軟件界面上唯一符合條件的控件,而這些句柄、id稱之為這個對象(控件)的屬性。再通過模擬鍵盤鼠標(biāo)的操作,比如單擊、雙擊、輸入文字,去操作對象,檢查輸出結(jié)果也是通過識別對象的屬性,比如文字、顏色等,判斷輸出結(jié)果(界面)是否符合預(yù)期結(jié)果。
在可靠性測試中,我們可通過自動化測試,模擬用戶操作,不間斷長時間的執(zhí)行,在客戶端測試軟件系統(tǒng)的可靠性。一般來說,我們模擬用戶操作的方法是通過執(zhí)行一系列的測試用例。步驟是:①篩選用戶最常做的一系列操作;②把這些操作編寫成多個測試用例;③將測試用例用QTP腳本編寫出來;④根據(jù)需要執(zhí)行這些測試腳本;⑤檢查測試腳本的輸出結(jié)果是否符合預(yù)期。
AMAN主要用于顯示航班排隊(duì)隊(duì)列信息、調(diào)整排隊(duì)隊(duì)列以及對顯示的方式、樣式進(jìn)行修改,它的客戶端界面功能主要分為三個部分,時間軸界面、頂部菜單欄和右鍵菜單欄。時間軸界面用于顯示航班隊(duì)列信息,頂部和右鍵菜單則是對航班隊(duì)列進(jìn)行調(diào)整。
QTP從理論上來說可以對windows標(biāo)準(zhǔn)控件進(jìn)行識別和操作,AMAN也是用windows控件制作的,但它的時間軸界面是通過圖形繪制來實(shí)現(xiàn)。通過對象識別后發(fā)現(xiàn),時間軸界面并沒有文字相關(guān)的屬性,因此QTP不能識別時間軸界面的文字,也就是說不能識別航班隊(duì)列。航班隊(duì)列是AMAN最核心的部分,幾乎任何操作都不能獨(dú)立于此,這就為它的自動化操作帶來困難。通過一系列實(shí)驗(yàn),我們最后敲定了使用像素識別的方法來辨別該界面上的航班隊(duì)列,具體方法是使用QTP自帶函數(shù)庫里的getvisible()函數(shù),該函數(shù)可以在界面上一個矩形的范圍內(nèi),通過像素識別,找出和像素圖像最相似的英文和數(shù)字。通過這種方法識別出來的航班隊(duì)列依然是不能直接使用的,有各種辨別不出來亂碼文字和多余的空格,所以需要將輸出文字做進(jìn)一步的清洗方可使用。具體方法是getvisible()函數(shù)通過識別圖像后獲取時間軸界面的文字,輸出字符串;將其中的大寫字母和數(shù)字挑選出來,組合成新的字符串,再通過判斷機(jī)號格式(3個英文字符+大于2個數(shù)字的組合),判斷獲取的字符串是否屬于航班號,是則返回航班號,不是則拋棄。由于函數(shù)識別可能有誤差,因此還需要與當(dāng)前正在生效的航班列表做對比(航班列表由其他系統(tǒng)導(dǎo)出),若航班號在航班列表里能找到,就進(jìn)入航班隊(duì)列。
得到航班隊(duì)列以后,就可以通過調(diào)整航班隊(duì)列來模擬用戶的實(shí)際操作,通過咨詢用戶代表,我們歸納出用戶最常用的操作,并總結(jié)成三個測試用例。分別是:
表1 用戶實(shí)際操作
續(xù)表
將這三個用例固化成QTP測試腳本,即可用QTP工具自動的、重復(fù)的執(zhí)行這些用例。下面用第二個測試用例“改變航班排序”為例子,介紹腳本實(shí)現(xiàn)的原理和方法。
表2 QTP腳本邏輯
獲得這三個測試用例的的腳本以后,我們可通過長時間不間斷的執(zhí)行這些腳本,模擬真實(shí)用戶在客戶端持續(xù)操作的情況,從而檢查系統(tǒng)在長期運(yùn)行中是否會產(chǎn)生異?;蛘哂美龍?zhí)行失敗的情況,如果有,就記錄用例執(zhí)行失敗并輸出截圖。這三個用例執(zhí)行的時間段和頻率參考實(shí)際用戶的操作習(xí)慣,初步設(shè)置如下:
表3 腳本執(zhí)行頻率
測試腳本調(diào)用的時間點(diǎn)和頻率,通過執(zhí)行vbs腳本定時調(diào)用UFT接口實(shí)現(xiàn)。總體測試結(jié)果以excel表格方式列出,可直觀地看到一段時間內(nèi)每一次腳本的執(zhí)行通過情況。細(xì)化到每一次腳本的執(zhí)行結(jié)果,則以UFT默認(rèn)結(jié)果文件方式保存。
自動化測試的方法可以應(yīng)用到多個BS或CS架構(gòu)的信息系統(tǒng),如果使用標(biāo)準(zhǔn)的div控件和windows控件,對象識別更容易,自動化腳本編寫和維護(hù)的效率更高。對于AMAN來說,因?yàn)椴荒苤苯幼R別界面中的文字,而要通過像素識別,識別出來的效果會略有偏差,比如在consolas字體下,字母“o”和數(shù)字“0”形狀比較接近,就有可能識別混淆,需要再做進(jìn)一步的優(yōu)化。
在未來的應(yīng)用中,自動化測試可以結(jié)合監(jiān)控工具zabbix進(jìn)行性能監(jiān)控,監(jiān)控客戶端、服務(wù)端和數(shù)據(jù)庫的性能曲線,來檢測系統(tǒng)是否存在內(nèi)存泄漏、CPU過高等性能問題。還可以與持續(xù)集成工具jekins和git結(jié)合起來,根據(jù)一些條件觸發(fā)測試,比如新代碼的發(fā)布、預(yù)定的計(jì)劃表等,從而更自動、更頻繁的執(zhí)行測試。
本文探索了自動化測試在客戶端可靠性測試中的應(yīng)用,以AMAN為樣本,探索了它應(yīng)用在自動化可靠性測試中的場景和方法,分析了在其他系統(tǒng)應(yīng)用的可能性,下一步可以在持續(xù)集成測試中應(yīng)用這項(xiàng)技術(shù)。