因為工作關系,兩年前本人曾調研過STAF軟件,當時想為VcTester工具構造一個具有對等通信關系的IPC組件,盡管終還是棄用STAF,改用自行開發的SRPC組件,不過仍覺得STAF是不錯的自動化控制框架,尤其是跨機控制,用起來比較方便,而且它是開源的。
關于STAF
STAF(The Software Testing Automation Framework)是發端于IBM的自動化測試框架,如果我沒記錯的話,2000年的時候STAF有版本了,不過那時的STAF比較簡單,做不了多少事情。過去這么多年,STAF現已發展成一個龐大體系了。
STAF主頁(http://staf.sourceforge.net/)對該軟件介紹如下:
STAF是開源、跨平臺、支持多語言的自動化測試框架,它圍繞于組件重用的理念,通過服務調用(比如處理調用、資源管理、登陸、監視等)幫助大家省去繁瑣的自動化架構建設工作,大家只需集中精力在自身自動化實施上。STAF為自動化測試建立了基礎,在高層解決方案提供一種可插撥的機制,支持多種平臺與多種語言。
使用STAF可快速構造自動化測試環境,STAF的服務調用系統也讓大家創建自動用例與管理自動用例更加方便。STAF在功能級別實施服務調用,各個服務端點(稱作STAF客戶端)是對等的,從一個端點可直接調用另一端點(在另一臺機器運行的程序)提供的服務。
換另一個角度看,STAF是一種分布式遠程調用體系,它具有如下特色:
Ø 將環境需求小化(包括硬件與軟件)
Ø 在各種語言中都很容易使用,包括Java,C/C++,Rexx,Perl,TCL,及命令行shell環境
Ø 易于擴展,讓用戶能方便的創建一個服務插入到STAF體系中
STAF比較適應需要構造復雜測試環境的場合,復雜測試環境通常是分布式的,通過STAF將測試任務分發到不同的測試環境去執行,可以方便的測試機的測試腳本,可以方便的收集測試結果,另外,執行引擎STAX(Software Test Automation eXecution Engine)讓STAF的使用變得更簡單,測試人員只需要配置XML文件便實現STAF任務管理。
幾個概念
服務(Services):
STAF是基于服務(Services)來構建自動化框架的,服務是STAF的可重用組件,服務還是一系列功能的集合。
如何理解STAF與服務的關系?STAF是一個小巧的后臺程序,在STAF中使用的所有組件都是服務,STAF提供輕量級分發機制,負責將請求轉發給這些服務。
STAF中服務分兩種:Internal (內部服務)和 External(外部服務)。內部服務被集成進 STAFProc,提供一些關鍵性的功能,比如數據管理與同步,外部服務則由 STAFProc 動態裝入,通過共享庫(shared libraries)來訪問。
STAF中常見服務有:
Ø Process Service:這是內部服務,用來調用外部程序
Ø File System Service:這是內部服務,可以對文件進行復制、刪除、查看等操作
Ø Log Service:這是外部服務,用于日志的記錄和查看
Ø ResPool Service:這是外部服務,提供查看、創建、刪除等針對資源池的管理或操作
Ø Monitor Service:這是外部服務,提供運行監控功能
Ø Sem Service:這是內部服務,提供mutex和event信號量操作
Ø Zip Service:這是外部服務,提供壓縮與解壓
Ø Ping Service:這是內部服務,用來檢測遠程STAF是否在運行
請求/響應:
STAF的服務以字符串形式表達,每個請求都有三個參數(系統、服務、參數),第一個參數指示目標STAF系統,該參數由STAFProc解析以便確定是在本地處理還是發送到遠端STAF系統,第二個參數指示調用哪個服務,第三個參數運行服務的參數。當服務處理結束將返回兩類數據,一是表示服務處理結果的返回碼,二是服務返回特定數據。
執行引擎:
STAX是基于STAF的執行引擎,它采用XML格式描述。在XML文件中可定義測試工作流,可以實現并行執行、嵌套測試用例、控制運行時間等,STAX支持Java 和 Python 模塊。
STAF與VcTester
前兩年我們調研STAF是想拿它構造本機跨進程的通信機制,后來發現STAF無法滿足我們的要求,在本機的IPC我們要求更精細,進程之間要支持更實時的響應能力,通信包可能很小,也可能很大,我們需要一種能平滑自適應系統,對大消息通信,還應自動改由文件方式傳遞,此外,跨進程服務的啟動與關閉、重起等操作,我們有更精細要求。所以,我們自行開發一種基于共享內存通信的SRPC組件,在它之上再疊加跨進程MVC機制,這是大家使用VcSmith或VcTester看到的RemoteUI功能。
當然,這里我講的是STAF的本地服務,STAF的跨機測試控制無疑非常強大,適應平臺與編程接口都很豐富。所以,后續VcTester版本在向自動化測試延伸后,我們將考慮提供基于STAF插件結構的服務調用機制。