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