徐鶯 江紅 辜彬 陳顏



摘要:隨著應用系統及軟件技術的發展, 手工測試已不能滿足軟件測試的要求, 軟件測試自動化越來越成為一種發展趨勢。在自動化測試平臺的構建過程中,圍繞功能自動化核心問題的解決,提出了基于進程間通信技術實現自動化測試的思路,采用python語言開發相關工具,并經過測試實踐,驗證了工具良好的應用價值,為功能自動化測試的實現提供了重要的思路和實踐參考。
關鍵詞:進程間通信;接口測試;自動化測試
中圖分類號:TP311.53 文獻標識碼:A 文章編號:1007-9416(2019)11-0012-04
0 引言
隨著應用系統與軟件技術的飛速發展,軟件及系統的產品化測試越來越成為,科研設計、產品化能力的重要方面;持續提高軟件產品的質量,開發的效率,提高測試的效率和精準度的需求日益迫切。
傳統手工測試,在測試需求分析、用例設計的基礎上,依賴人工執行過程,無法完全解決測試過程重入的問題;同時軟件產品開發需解決研發迭代過程與發布周期的矛盾,通過引入自動化測試縮短測試周期,提高測試精準度,達到快速迭代開發,滿足發布周期的需求[1]。
軟件測試自動化越來越成為軟件的發展趨勢。在軟件系統產品的自動化測試平臺構建的過程中,圍繞解決功能自動化測試,提出一種基于進程通信接口進行功能自動化測試的方法,開發了相應的測試工具,并引入實踐應用。
1 自動化測試需求
1.1 功能自動化測試研究情況
自動化測試的本質是按照測試設計的輸入構建測試條件、注入被測對象,并獲取輸出進行對比的過程,采用程序的方式實現用例過程的自動驅動與執行,減少手工測試的主觀影響,同時解決測試過程重復執行的高效率實現。
建立自動化測試平臺,一般涉及持續集成平臺的建立、用例驅動的實現、功能/性能自動化實現,測試工具集成與驅動等問題。
相關問題的研究發展非常迅猛,而其中,功能自動化實現是核心問題之一。功能自動化的研究更多著力于界面元素多變問題的解決。當前的研究方法包括如下幾種:
(1)通過測試工具實現基于界面的錄制與回放:典型方法是錄制第一次執行測試用例時的鼠標和鍵盤操作,需要執行時回放。測試工具主要功能是,記錄和回放。(2)基于數據驅動實現測試過程的重入:將測試用到的輸入和輸出值存儲于數據文件中,測試執行時讀取并載入,不同測試用例對應各自的數據文件及控制信息。(3)關鍵字驅動:通過將測試用例抽象為對象、控制、數據,通過封裝關鍵字(特定的測試功能腳本),實現界面控件與測試內部對象名的分離,使測試腳本、測試數據、測試用例的更新和維護更加容易實施。
目前關鍵字驅動,越來越成為功能自動化測試的主流技術,通過對應相關產品系統的業務特征,開發基于業務流程的關鍵字集,實現腳本與用例分離,已經能比較好的解決界面元素變化以及后續開發維護,擴展的問題。
在此基礎上,進一步提高功能測試深度與效果是功能成為功能自動化測試的重要方面。
1.2 功能自動化測試構建思路
考察一般的軟件產品的模型架構如圖1,可以將軟件功能分為界面層、功能層、數據層。傳統的軟件功能測試,通常在最上層構建相關的數據及操作,通過Web界面、本地命令行等形式進行輸入,驅動覆蓋相關的軟件邏輯分支[2]。由于接口、分支的耦合性、關聯性,通過界面能夠構造的輸入是一種受限輸入,無法覆蓋實現中的所有分支,被測對象分支覆蓋不完整,在某些極端、特殊條件下,遺留缺陷,對產品質量形成隱患。
基于這種情況,我們提出將界面層剝離,將功能層模塊的邏輯分支作為測試對象,通過在功能層,直接構造測試輸入,覆蓋相關分支的方法來進行深入的功能測試。
采用本地進程間通信接口來進行測試驅動,包括socket、進程間管道、FIFO等接口,設計開發相關測試工具,將所有后臺的功能邏輯過程,抽象、統一為一種本地協議的方式進行測試的思路,如圖2所示。
進程間通信功能自動化測試工具主要解決中如下問題:
(1)通過將測試用例,抽象為本地協議的方式,解決界面元素多變的問題;(2)通過進程間通信接口的方式,實現測試輸入構造,提升測試覆蓋度及測試深度,覆蓋驅動被動對象更多的分支;(3)提供socket通信、管道、共享內存等形式的進程間通信接口,具有靈活、擴展性,適應多種本地功能自動化測試。
2 主要開發與設計技術
2.1 Python與自動化
Python是一種面向對象的腳步語言,具有良好的開發、迭代的效率,通過內嵌應用層編程功能庫,支撐靈活的開發和三方擴展。python腳本可實現靈活的上層應用程序通信,支持多種平臺和語言,包括c/c++、Java等。Python程序編譯器實現,考慮了不同平臺的字節碼的適應,能夠方便的跨平臺使用,是當前自動化測試中應用最廣的語言之一。進程間通信自動化測試工具采用跨平臺python語言作為開發語言進行開發,兼顧了工具應用的適應性,以及工具集成到自動化平臺的可實施性。
2.2 用例驅動
工具設計基于用例驅動的原理進行。
用例驅動設計原則包括2個方面:(1)測試人員根據用例模板進行測試用例設計,獨立用例操作和用例數據,由測試工具根據用例數據進行接口識別,參數識別和封裝,測試人員不用關心測試腳本的調用和執行;(2)工具接口除了實現自身功能之外,還可實現相關的典型業務測試,與其他接口存在上下文關系,可組合成各種業務測試的邏輯,實現較為復雜的功能測試過程。
2.3 本地協議表示
將本地測試調用的多種形式,抽象為本地協議表示,提供通用的協議模板定制,實現協議數據包生成,并以此為基礎實現工具的主要數據輸入、控制輸入,輸出對比功能。
協議動態測試由通信雙方實體(一端用測試工具模擬測試端,一端作為被測端)和控制端構成,測試控制端根據用例控制測試端與被測端實施動態測試業務,并統計結果形成測試報告,模型見圖3。
2.4 進程間通信技術與測試接口
操作系統的進程間通信方式通常有7種:COM/DCOM、File Mapping文件映射方式、系統消息方式、Pipe管道方式、Mailslots郵件槽、RPC遠程過程調用方式和Windows Sockets網絡套接字方式[3]。
Pipe管道是一種以先進先出的方式保存一定數量數據的特殊文件。Pipe通信是高層的、基于內存的通信系統;通信中,由系統提供再執行寫操作和讀操作的進程之間的同步。在默認情況下,如果一個進程試圖寫入一個已填滿的管道,系統會自動阻塞該進程,直到管道能夠接收數據;如果試圖讀一個空管道,進程會阻塞,直到有可讀數據出現為止;如果一個進程以讀方式打開一個管道,而沒有另外的進程以寫方式打開該管道,則同樣會造成該進程阻塞。
網絡套接字是一種網絡通信、進程間通信的端口抽象標識,是通用操作系統中基本的通信實現技術。套接字的要素包括地址簇、套接字類型、協議,socket在應用程序中串接,通過昂頂與網絡驅動建立關系,并基于接口,實現數據的方式。
在功能測試中,進程間通信,提供了一種有效的測試注入接口,實現測試驅動。從測試驅動的角度,socket套接字、共享內存、是更加理想有效的驅動方式。在本文的xxx工具設計中,重點以socket套接字實現測試接口。后續進一步擴展其他方式的測試驅動。
2.5 實現與設計
2.5.1 功能框架
進程間通訊接口測試需要適應各類進程通訊方式,如socket、共享內存、管道、FIFO等,在通訊方式適應上應有足夠的可擴展性。進程間接口交互多為產品實現需要而定義,接口相對簡單實用,在協議數據格式方面存在多樣性,如XML格式、二進制、十六進制、字符等數據類型,要求工具要能適應不同數據類型,按協議數據要求收發和處理數據。工具功能框圖如圖4。
2.5.2 典型流程實現
主要流程實現實例:
(1)讀取Excel中的用例,獲取報文模板,通信流程,報文內容的邊界值定義以及驗收標準等相關信息;
(2)讀取報文模板;
head.xml
body.xml
(3)構造報文并根據報文內容邊界值進行判斷,調用函數buildPacket進行報文構造,傳入bsid=769表明要修改的字段,構造的報文如下:
(4)發送報文;調用函數sendPacket進行報文發送。
(5)接收并處理報文;調用函數recvPacket進行報文接收,然后調用函數writeRecv進行接收報文處理。接收并被處理后的報文如下:
(6)結果分析;調用函數verify進行對接收報文的分析,傳入rst=0表示要檢查的字段,檢查結果顯示如下:
(7)根據用例中的定義,如果有多個通信交互流程并且滿足繼續執行的則繼續執行;
(8)完成整流流程,用例執行完畢,回寫測試用例執行結果;
(9)日志記錄;
整個測試過程的日志記錄如下:
測試發送/接收的報文存儲如圖5。
3 應用效果
將本工具應用于xx管理系統本地管理模塊的功能測試過程,定制本地管理協議模板,設計測試用例進行功能測試及穩定性測試。基于本地管理協議接口設計用例,提高了用例分支覆蓋度,與手工測試階段相比,測試過程捕獲16項嚴重問題,3項致命缺陷。取得良好的測試效果。與手工測試執行對比圖表如圖6、表1。
4 結語
本文分析當前主流的自動化平臺構建的思路和主要思路,研究了功能自動化測試方法,基于提升測試效率和深度,提出了一種基于進程間通信技術實現功能自動化測試的方法,用python語言實現了進程間通信自動化測試工具,該工具在實際項目中,進行了應用,在測試效率的提高和測試成本的降低方面,取得了良好的效果,是自動化平臺建設,核心功能自動化測試解決方案的有益探索。
參考文獻
[1] 吳振宇,顧曉明,李翔.協議可擴展的軟件接口測試工具的研究與實現[J].數字技術與應用,2017(12):58-60.
[2] 王軍,孟凡鵬.基于關鍵字驅動的自動化測試研究與實現[J].計算機工程與設計,2012(9):3653-3655.
[3] 袁鴻,劉浩,廖文和.進程間通信技術在系統集成中的應用[J].重慶大學學報,2008(4):436-441.