黎其宇 何曉恩
民航中南空管局通信網絡中心 廣東 廣州 510000
AMAN(Arrival Manager),即進場管理系統,其主要功能為安排進港飛機更高效地使用空域與跑道,提升管制員的工作效率的同時減少其工作量。該系統采用迭代的開發模式,每一個迭代版本完成后都會投入到用戶的試運行中。運行中發現,系統在長時間持續使用后,客戶端有一定概率出現錯誤。在以往的內部測試中,這種問題不容易檢測和重現,因為以往可靠性測試主要應用在服務端,通過性能測試工具持續為服務端施加壓力。但本次系統的錯誤出現在客戶端而不是服務端,通過測試員模擬用戶跨天不間斷的操作幾乎是不可能的。
本文通過使用桌面自動化測試工具QTP,模擬用戶在軟件界面上多次重復的操作,在一定程度上可以重現這些問題和避免以后再出現,從而實現一種在客戶端下測試系統可靠性的嘗試。
進港管理系統(AMAN)是一種進港排序輔助決策系統,提供一個高效和安全的機場降落順暢航班流,旨在減輕繁忙終端區管制負荷,提高效率,提高安全。系統通過所有進港航班在航路飛行階段的提前計算,來構建一個優化的進港隊列。使用用戶包括:塔臺、進近、區域實時指揮人員。AMAN用來管理進港航班,為管制員提供進港航班排序隊列及決策建議。系統根據空域參數和航空器性能進行系統參數配置,引接空中交通自動化系統信息、飛行計劃、多雷達航跡、GPS時鐘以及氣象狀況等多項信息,對所有進港航班在區域階段進行提前計算,提供航班最優排序序列,跑道選擇和時間與延誤建議,構建一個優化的進港隊列。系統通過全局規劃,建立區域、進近、塔臺席位間統一的場景認知、規避管制矛盾,減少管制的工作負擔,從而實現高效、流暢、平穩的交通流量[1]。
應用軟件架構一般在邏輯上分為4層:①用戶界面層 UI:為終端用戶提供交互的人機界面 ②業務邏輯層 BLL:將數據庫抽象出來的對象進行拼接成具體的業務邏輯對象,并對之進行流程組織 ③數據訪問層 DAL:對DB層做的ORM,讓上層應用程序以對象的方式操控數據庫 ④數據持久層 DB:存儲數據,對數據進行持久化,不同的客戶端進行數據共享。
本文中介紹的自動化測試工具QTP工作在UI層,它可以識別windows標準控件。通常一個控件可以被稱為一個對象。QTP識別對象的方法,是通過窗口句柄、id等方式,查找出待測軟件界面上唯一符合條件的控件,而這些句柄、id稱之為這個對象(控件)的屬性。再通過模擬鍵盤鼠標的操作,比如單擊、雙擊、輸入文字,去操作對象,檢查輸出結果也是通過識別對象的屬性,比如文字、顏色等,判斷輸出結果(界面)是否符合預期結果。
在可靠性測試中,我們可通過自動化測試,模擬用戶操作,不間斷長時間的執行,在客戶端測試軟件系統的可靠性。一般來說,我們模擬用戶操作的方法是通過執行一系列的測試用例。步驟是:①篩選用戶最常做的一系列操作;②把這些操作編寫成多個測試用例;③將測試用例用QTP腳本編寫出來;④根據需要執行這些測試腳本;⑤檢查測試腳本的輸出結果是否符合預期。
AMAN主要用于顯示航班排隊隊列信息、調整排隊隊列以及對顯示的方式、樣式進行修改,它的客戶端界面功能主要分為三個部分,時間軸界面、頂部菜單欄和右鍵菜單欄。時間軸界面用于顯示航班隊列信息,頂部和右鍵菜單則是對航班隊列進行調整。
QTP從理論上來說可以對windows標準控件進行識別和操作,AMAN也是用windows控件制作的,但它的時間軸界面是通過圖形繪制來實現。通過對象識別后發現,時間軸界面并沒有文字相關的屬性,因此QTP不能識別時間軸界面的文字,也就是說不能識別航班隊列。航班隊列是AMAN最核心的部分,幾乎任何操作都不能獨立于此,這就為它的自動化操作帶來困難。通過一系列實驗,我們最后敲定了使用像素識別的方法來辨別該界面上的航班隊列,具體方法是使用QTP自帶函數庫里的getvisible()函數,該函數可以在界面上一個矩形的范圍內,通過像素識別,找出和像素圖像最相似的英文和數字。通過這種方法識別出來的航班隊列依然是不能直接使用的,有各種辨別不出來亂碼文字和多余的空格,所以需要將輸出文字做進一步的清洗方可使用。具體方法是getvisible()函數通過識別圖像后獲取時間軸界面的文字,輸出字符串;將其中的大寫字母和數字挑選出來,組合成新的字符串,再通過判斷機號格式(3個英文字符+大于2個數字的組合),判斷獲取的字符串是否屬于航班號,是則返回航班號,不是則拋棄。由于函數識別可能有誤差,因此還需要與當前正在生效的航班列表做對比(航班列表由其他系統導出),若航班號在航班列表里能找到,就進入航班隊列。
得到航班隊列以后,就可以通過調整航班隊列來模擬用戶的實際操作,通過咨詢用戶代表,我們歸納出用戶最常用的操作,并總結成三個測試用例。分別是:

表1 用戶實際操作

續表
將這三個用例固化成QTP測試腳本,即可用QTP工具自動的、重復的執行這些用例。下面用第二個測試用例“改變航班排序”為例子,介紹腳本實現的原理和方法。

表2 QTP腳本邏輯
獲得這三個測試用例的的腳本以后,我們可通過長時間不間斷的執行這些腳本,模擬真實用戶在客戶端持續操作的情況,從而檢查系統在長期運行中是否會產生異常或者用例執行失敗的情況,如果有,就記錄用例執行失敗并輸出截圖。這三個用例執行的時間段和頻率參考實際用戶的操作習慣,初步設置如下:

表3 腳本執行頻率
測試腳本調用的時間點和頻率,通過執行vbs腳本定時調用UFT接口實現。總體測試結果以excel表格方式列出,可直觀地看到一段時間內每一次腳本的執行通過情況。細化到每一次腳本的執行結果,則以UFT默認結果文件方式保存。
自動化測試的方法可以應用到多個BS或CS架構的信息系統,如果使用標準的div控件和windows控件,對象識別更容易,自動化腳本編寫和維護的效率更高。對于AMAN來說,因為不能直接識別界面中的文字,而要通過像素識別,識別出來的效果會略有偏差,比如在consolas字體下,字母“o”和數字“0”形狀比較接近,就有可能識別混淆,需要再做進一步的優化。
在未來的應用中,自動化測試可以結合監控工具zabbix進行性能監控,監控客戶端、服務端和數據庫的性能曲線,來檢測系統是否存在內存泄漏、CPU過高等性能問題。還可以與持續集成工具jekins和git結合起來,根據一些條件觸發測試,比如新代碼的發布、預定的計劃表等,從而更自動、更頻繁的執行測試。
本文探索了自動化測試在客戶端可靠性測試中的應用,以AMAN為樣本,探索了它應用在自動化可靠性測試中的場景和方法,分析了在其他系統應用的可能性,下一步可以在持續集成測試中應用這項技術。