?

基于LINUX平臺的自動化測試的研究與應用

2009-09-30 06:18李金麗
今日科苑 2009年11期
關鍵詞:自動化測試

李金麗

摘要:本文面向Linux平臺和平臺下不同類型應用的特點,研究了自動化測試的技術和工具,并從功能測試和性能測試的角度對Linux平臺下測試工作的自動化進行7分析和說明。文中提供的方法和技術已經成功應用于上海中標軟件有限公司服務器產品和桌面產品的測試工作中。

關鍵詞:Linux;自動化測試;軟件應用

引言

現代軟件規模的逐漸增加,使得軟件測試的工作量越來越大,同時軟件開發周期的縮短又要求盡量提高測試效率,而受開發資金的限制測試資源不可能大幅度增加,一切使得傳統的手工測試已經無法滿足現代軟件開發的要求。另一方面,許多公司已經把軟件測試作為保證軟件質量、提高軟件可靠性的主要手段之一,花費在軟件測試上的資源已經占到整個軟件研發成本的50~60%,軟件測試能否按時完成已經成為軟件能否按時交付的瓶頸。所有這一切都使得對軟件測試實施自動化勢在必行。

目前,市場上自動化測試工具不少,按用途可分為:功能測試工具,性能測試工具,測試管理工具等。就實現技術原理而言主要分為兩類:一類是捕捉/回放技術,一類是編寫測試腳本技術。捕捉/回放技術的腳本由捕捉時自動生成。捕捉階段,工具記錄用戶的一系列鼠標點擊和鍵盤按鍵操作,并將這些操作轉化為腳本?;胤艜r把這些腳本作為輸入在被測程序上執行,根據執行后的狀態信息和輸出結果與原始記錄的比對來判定是否存在差異。編寫腳本技術需要用戶以一個指定的腳本語言編寫測試腳本,對于測試腳本的維護、測試執行的驅動以及測試結果的統計等可由用戶自行實現,也可以使用專門的測試工具或者測試框架幫助完成。通過測試自動化的實施,可以使測試人員從大量的重復測試中解放出來。

在Linux平臺下進行自動化測試,可以使用的商業測試工具并不是很多,但是由于開源軟件產業的蓬勃發展,在各個開源社區維護的開源項目中提供了大量的、針對不同類型應用以及不同類型測試的測試工具,這些工具可以滿足基本的自動化測試需求,同時可以結合具體應用的特點,通過進一步改造工具來完成測試自動化的目的。

本文所進行的自動化測試的研究對象主要針對Linux平臺及平臺之上的應用,測試的類型主要包括功能測試和性能測試。

自動化測試曲研究與應用

自動化測試的前提是無論采用何種測試技術和測試方法,組織已經積累了針對各種類型應用的包括完整的測試輸入、測試執行步驟和預期輸出的測試用例。

由于Linux是一個命令行組成的操作系統,因此采用腳本編程,按照預設的執行邏輯批量地執行命令行,是實施自動化測試時首先需要考慮的手段。為了實現更復雜的測試工作的自動化,也可以選擇或者自行開發測試工具或測試框架。在選擇工具或框架時,通常需要考慮是否具備如下幾個要素:a,測試執行人員可以選擇運行哪些測試組件/測試用例b,提供定義用例執行結果的輸出方式,如提供成功、失敗、未執行等函數供調用c,可以加載用戶自定義的函數庫d,提供用例執行的配置文件或者場景文件e,提供調試的機制f,提供日志輸出方式g,提供結果統計輸出等等。

在Linux平臺下,借助工具或者其他手段實施測試的自動化時,需要關注以下幾點:

(一)各種技術應用的前提。對于在開源社區和一些開源項目中獲得的測試工具,首先需要了解工具適用于哪些類型應用的測試,以及工具發布后的發布說明和FAQ。開源的工具通常不像商業工具那樣成熟穩定,因此找出工具的適用范圍以及探索工具的實現程度是進行自動化測試應用的前提。

(二)各種技術應用的環境需求。對于各類工具,需要關注編譯和運行時對各種包和庫及其版本的依賴關系以及對預先安裝的應用的依賴關系。這些在用戶手冊中都有詳盡的說明。

(三)服務器性能監視器。大部分測試工具沒有提供服務器端的性能監控功能,測試工程師需要根據實際的需求編寫性能監控腳本來配合工具的使用。

下面結合曾經參與進行過的Linux平臺下的自動化測試的研究,面向不同類別的測試用例自動化的需求,將主要從功能測試,如GUI測試、命令行客戶端的測試,以及性能測試等幾個方面對Linux平臺下的測試工作的自動化進行分析和說明。

GZW自動化洲試

對于GUI測試的自動化,通常的測試工具所使用的捕捉/回放技術有兩種,一種是通過記錄界面的鼠標事件(如點擊、移動)和鍵盤事件來完成錄制和回放,另外一種則是錄制和回放都是基于控件的識別和操作進行的,每個腳本的執行都是控件對象的屬性改變或事件觸發。我們從開源社區可以獲得如上兩種類型的運行于Linux平臺之上的典型測試工具,如Knee和LDTP等。

(一)Xnee工具

在Linux操作系統的xll環境下,Xnee能夠錄制、回放和分發用戶的動作。Xnee的捕捉/回放技術是記錄鼠標事件和鍵盤事件。進入錄制模式時,Xnee記錄發送至和來自X server之間的協議數據拷貝,并生成Xneesession文件。在回放模式下,Xnee讀取Xnee Session中的事件,模仿整個錄制過程(即用戶操作過程)完成和x server之間的通訊,被錄制的應用軟件(Xclient)則接收來自xserver的消息,完成預設的動作。

(二)LDTP測試工具/框架

Linux Desktop Testing Project(LDTP)測試工具/框架能夠基于用戶在應用界面的選擇進行腳本的錄制。LDTPI具使用了Gnome環境下的Accessibility庫即輔助選項庫(at-spi)。使用輔助選項能夠獲得應用通過AT-SPI協議提供的關于用戶界面的信息和界面控件的當前狀態或者屬性。LDTPI具/框架的體系結構如下:

AT-SPI的基礎思想就是為用戶界面的可視化元素提供對應的輔助對象,而錄制完成的每個腳本的執行都是基于這些輔助對象進行的。對于希望利用LDTPI具進行測試的應用,需要激活輔助選項。

(三)GUI自動化測試工具的應用

在實際的GUI自動化測試中,LDTPI具應用的場景會更廣泛一些。LDTPI具可以識別窗口中的對象(如按鈕),測試腳本使用LDTP的API接口,每個API接口對UI對象進行操作存在兩個最基本的入口,即窗口和對象,窗口通過窗口的類型和名稱(即標題)識別,對象通過希望操作的控件的類型和名稱(標簽或者關聯的標簽)識別。我們同樣可以通過at-pokel具展現激活了輔助選項的應用程序窗口的對象及對象屬性。在測試Linux桌面產品和服務器

產品的過程中,使用LDTPI具可以測試任何啟用輔助選項的Gnome應用,如Mozilla,OpenOffice.org、Evolution郵件客戶端,Nautilus文件瀏覽器等等,此外還可以測試UI界面基于Swing的Java應用,以及KDE4.O上基于QT4.0的應用等等。

而Xneel具所針對的應用程序類型就沒有特別的限制,對于一些簡單的窗口驗證測試和界面的穩定性測試等則比較有效。Xnee相對于基于控件方式捕獲和回放的工具而言,不用擔心存在控件不能被識別的問題。

從使用的情況來看,各個工具也都因為實現技術而存在一定的缺陷,如兩個工具均不能插入驗證點,從而不能實現用例級別的結果驗證;LDTP對于界面的個別元素捕獲不到以及不能對不支持輔助選項的應用進行測試等等;而Xneel具生成的腳本可編輯性差,同時由于錄制生成的腳本中的事件和屏幕坐標相關,因此當出現窗口彈出位置發生變化等問題時,就需要考慮回放時應該如何來處理這些變化。

命令行客戶端的測試

(一)應用于命令行客戶端測試的技術分析

Linux操作系統的精髓就是命令行,對于可以通過命令行批處理方式進行測試的客戶端,Shell腳本語言是程序員測試時的首選,Shell提供了用戶與內核進行交互操作的一種接口。

而對于測試交互式類型的客戶端應用,Expect則比較擅長。Expect是基于tcl的用于測試交互式程序的工具包,它提供了創建交互式進程和讀寫它們的輸入和輸出的命令。Expect很適合編寫測試程序,不管被測的軟件是批處理式的(比如GCC),還是交互式的(比如GDB),它都可以很方便的捕捉程序的輸出并且將程序的輸入自動化。

對于編寫完成的測試腳本,需要選擇合適的框架來統一管理測試腳本,驅動測試腳本按照流程執行,以及為測試執行結果提供統一的輸出等等。經過比較,各種測試框架中選出了DejaGnu和TET,因為這兩個框架使用廣泛、活躍度比較高、有活躍的社區組織支持。TET支持多種腳本語言,它提供對c/c++、Java、perl、shell,ksh,python,ruby,php,tcl/expect等眾多語言的支持,支持分布式測試。Dejagnu即GNU測試框架,它提供了運行測試的統一前臺,對于使用者而言,DejaGnu實際上就是一個Tel庫,它提供了豐富的函數庫,使得用戶可以方便地編寫自己的測試驅動程序。該框架的缺點是缺省只支持調用Expect編寫的測試程序,如果需要調用其他語言編寫的測試程序,則需要對框架進行擴展。

(二)實際應用

在Linux操作系統之上存在很多命令行客戶端及交互式類型的客戶端,如常見的網絡服務程序sshl ftp,telnet,數據庫客戶端mysql,配置管理軟件CVS。等等。使用上述的測試技術可以完成對這類應用程序的測試自動化。

在中標軟件的測試實踐中選擇了Dejagnu框架,該框架符合POSIx1003,3測試框架標準,并定義了測試用例執行結果的輸出函數,如pass,fail,xpass,xfail等等,因此可以使用框架的用例輸出定義在日志中記載測試結果。

性能測試

性能測試是通過自動化的測試工具模擬多種正常、峰值以及異常負載條件來對系統的各項性能指標進行測試。性能測試方法一般有基準測試、容量規劃測試、峰谷測試和滲入測試等等,對于可再現性,基準測試是最好的方法,而如果需要從當前用戶負載的角度考慮測試系統的上限,則應該使用容量規劃測試。

(一)性能測試工具的選擇

測試團隊在規劃性能測試時,出于對測試數據的可信度考慮,可以選擇商業測試工具,如Loadrunner、Rati onalR 0b Ot、QAL Oad、Benchmark Factory等工具,另外SPEC(the Standard PerformanceEvaluation Corporation標準性能評估機構)提供的系列基準測試套件都是企業進行基準測試的最佳選擇。

如果成本是首要考慮的因素,那么就不妨在一些開源測試站點(如http://www.opensourcetesting,org)和Linux開源社區的項目中尋找能夠完成特定目標的性能測試工具。這些工具大部分針對性比較強,部署簡單,當然很少工具能夠與成熟的商業測試工具媲美。不過開源工具也具有自己的特點,如小巧,輕便,在各自擅長的領域可以提供優秀的解決方案等等。因此可以考慮準備一組開源測試工具,利用不同工具的特長完成性能測試自動化的需要。采用開源測試工具得到的性能測試數據,主要用于進行同類產品之間的橫向對比以及同一產品不同版本之間的縱向對比。

(二)性能測試工具的應用

下面將從不同的測試需求出發。討論如何利用開源測試工具進行性能測試的自動化。

1、服務器整機系統的性能測試

性能測試是衡量一個操作系統效率的關鍵步驟,對于Linux操作系統,Linux內核是其最核心的部分,其性能直接決定了操作系統的性能,內核性能測試的方法是針對Linux內核五大子系統:進程調度子系統、內存管理子系統、虛擬文件子系統、進程通信子系統和網絡子系統的特點,測量出Linux內核完成工作量負載的響應時間、CPU時間和CPU利用率等參數,作為衡量標準。在實際測試中我們采用了如下一些基準測試工具:

1Lmbench:用來測試1inux操作系統的cpu計算處理能力、進程調度、內存讀寫性能;測試主要可使用bw_dhrv和bw—mem,lat proc三個測試命令,分別對應于整數性能測試,讀寫內存測試,進程調度測試。

2Bonnie++:磁盤I/O測試工具,主要用于測試磁盤和文件系統的性能。它可以測試文件的創建,讀,寫和刪除等操作,既可以測試小文件,也可以測試大的單個文件。

3Web應用服務器的性能測試

在中標軟件的web郵件服務器測試中采用了Apache組織的開源項目工具JMeter。JMeter可以用于測試靜態或者動態資源的性能(文件、Servlets、Perl腳本、java對象、數據庫和查詢、ftp服務器或者其他的資源)。JMeter用于模擬在服務器、網絡或者其他對象上附加高負載以測試他們提供服務的受壓能力,或者分析他們提供的服務在不同負載條件下的總性能情況。用戶可以使用JMeter提供的圖形化界面分析性能指標或者在高負載情況下測試服務器/腳本/對象的行為。

4數據庫性能測試

基于開源的數據庫性能測試工具并不是很多,這些工具本身都預先提供了一組測試用例如The DatabaseOpensource Test Suite(DOTS)工具,提供了8個基本用例和2個高級用例,并支持對DB2、Oracle、Sybase、MySQL和Pos tgreSQL等多種類型數據庫進行壓力測試和負載測試,另外一些工具則預先構造了支持不同負載模式測試的配置,如最新版本的Hammerora(The Open Sourceoracle Load Test T001)工具就提供了專門針對Oracle數據庫進行測試的設定基準測試TPC—C和TPC—H的模式選項以及編寫驅動腳本等功能。從實踐過程來看,預置測試用例的工具存在的缺陷是用戶無法對這些用例根據實際測試需求進行拓展,而可編程性強的測試工具則在支持的數據庫類型上存在一定的限制。

結束語

針對Linux平臺和平臺下的應用進行自動化測試,需要測試人員熟悉Linux平臺下的腳本開發技術,并以開源社區中存在的大量的功能和性能測試工具作為自動化測試的研究起點。各個測試團隊需要根據自身的測試需求對各種工具和技術進行分析和選擇,同時根據實踐活動判斷工具可以完成的測試內容以及目前尚存的缺陷。這些都將為我們應用工具進行更大規模的自動化測試提供必要的基礎。

猜你喜歡
自動化測試
Hadoop性能測試自動化研究
數據驅動和關鍵字驅動的研究與應用
淺談空調控制器自動化測試
基于多總線結構的電路板測試系統設計研究
航空航天與國防電子新形勢下自動化測試系統的應用
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合