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