複製鏈接
請複製以下鏈接發送給好友

STAF

鎖定
Software Test Automation Framework (STAF) 是由IBM開發的開源、跨平台、支持多語言並且基於可重用的組件來構建的自動化測試框架。它封裝了不同平台和不同語言間通信的複雜性,提供了消息、互斥、同步、日誌等可複用的服務,使用户可以在此基礎上方便快速地構建自動化測試解決方案。STAF在功能級別實施服務調用,
中文名
STAF
全    稱
SoftwareTestAutomationFrame
公    司
IBM
特    點
開源、跨平台、支持多語言

STAF簡介

STAF (SW Test Automation Framework) 是一個自動化測試框架,用以提升測試用例和測試環境的可重用性以及自動化的程度。STAF 為測試人員提供了一個端到端的自動化測試解決方案。 [1] 
各個服務端點(稱作STAF客户端)是對等的,從一個端點可直接調用另一端點(在另一台機器運行的程序)提供的服務。

STAF服務

STAF 基於可重用的組件來構建自動化測試框架,這些可重用的組件就是 Services(服務)。STAF 中所有的組件都是服務。服務是一系列功能的集合。STAF 本身是一個後台程序 (STAFProc),提供一種輕量級的分發機制,負責把請求轉發給這些服務 [2-3] 
STAF 中的服務分為兩種:internal (內部服務)和 external(外部服務)。內部服務被集成進 STAFProc 中,提供一些關鍵性的功能,比如數據管理和同步。外部服務由 STAFProc 動態裝入,通過共享庫(shared libraries)來訪問。
STAF 提供瞭如下幾種常用服務: 程序調用服務(Process Service):內部服務,利用此服務,STAF 可以調用外部程序。 文件系統服務(FileSystem Service):內部服務,利用此服務,STAF 可以對文件系統進行操作,比如複製,刪除,查看等操作。 日誌服務(Log Service):外部服務,幫助用户進行日誌的記錄和查看。 資源池服務(ResPool Service):外部服務,提供了對於資源池的管理和操作,如查看,創建和刪除操作。 監控服務(Monitor Service):外部服務,提供對於 STAF 運行時的監控功能。 信號量服務(Sem Service):內部服務,提供了兩種信號量的操作,mutex 和 event。 壓縮服務(Zip Service):外部服務,提供了壓縮和解壓的功能。 Ping服務(Ping Service):內部服務,類似於操作系統的 ping 功能,用於檢測遠程的 STAF 是否運行。 變量服務(Var Service):內部服務,提供對於系統或者用户級別的環境變量的操作。 STAF 還提供了延遲(Delay Service), 幫助請求/訪問格式
每個服務都定義了它能接受的請求格式。STAF 通過請求來調用服務的功能,每個請求都以字符串的形式發送,這樣可以保證 STAF 能夠跨平台的運行。 每個請求都有三個參數,以系統-服務-參數的形式出現。第一個參數表示此請求需要被髮送到的 STAF 系統,這個參數被 STAFProc 解析以便確定請求應該被本地處理還是發送到其他的 STAF 系統。 當這個請求被髮送到需要處理的 STAF 系統後,STAFProc 解析第二個參數來判斷哪個服務會被調用。最後,STAFProc 會把第三個參數轉發給需要調用的服務,服務處理這個請求。
當處理完請求後,服務會返回兩種數據:返回碼和特定於請求的信息。返回碼錶示服務處理的結果。特定於請求的信息表示服務返回的具體數據,如果請求成功返回,這些信息將包括這次請求所請求的數據,如果請求出現錯誤,這些信息將包含額外的診斷信息。
完全使用字符串作為請求響應格式可以簡化 STAF 的很多方面,包括與其他語言的接口,服務之間的通信,跨平台的操作等。 其他語言只需要通過一個接口 STAFSubmit() 來請求 STAF 的服務,並且只需傳遞三個字符串參數。服務之間也只需要通過字符串發送接收請求。

STAF技術特點

服務列表 服務列表
1.將環境需求最小化(包括硬件與軟件)2.在各種語言中都很容易使用,包括Java,C/C++,Rexx,Perl,TCL,及命令行shell環境
3.易於擴展,讓用户能方便的創建一個服務插入到STAF體系中
STAF比較適應需要構造複雜測試環境的場合,複雜測試環境通常是分佈式的,通過STAF將測試任務分發到不同的測試環境去執行,可以方便的測試機的測試 腳本,可以方便的收集測試結果,另外,執行引擎STAX(Software Test Automation eXecution Engine)讓STAF的使用變得更簡單,測試人員只需要配置XML文件便實現STAF任務管理

STAF功能

STAX 是基於 STAF 的執行引擎,它提供了一種 XML 格式的工作流語言。用户可以編寫 XML 的腳本文件來通過 STAX 調用 STAF 的服務以完成自動化測試。用户可以不需要和編程語言打交道就可以開發出自己的自動化測試環境。STAX 提供如下的功能:支持並行運行,用户自定義的運行控制粒度,嵌套測試用例,控制運行時間,支持現有的 Java 和 Python 模塊等。STAX 還提供了一個圖形化的監控工具,通過這個工具,用户可以清晰的看出測試運行的位置,狀態和出錯信息等。

STAF安裝配置

STAF 的安裝文件可以從STAF 的網站下載。對於不同的平台和 JVM 環境有不同的安裝文件,請選擇合適的文件下載。如果下載的是 jar 文件,要確保需要安裝 STAF 的機器上已經安裝有相應的 JRE,然後運行如下命令安裝 STAF:java -jar STAF安裝文件.jar。 如果下載的是可執行文件,則直接運行即可。
STAF 的安裝比較簡單,只需要按照嚮導提示進行操作即可。安裝完畢後,可以通過 STAFProc 命令啓動 STAF。關閉 STAF 可以用如下的命令: staf local shutdown shutdown。從這條命令我們可以看出上面提到的 STAF 的命令格式。local 表示 STAF 的本地系統,shutdown 表示服務, 此服務提供了 STAF 的關閉操作。第二個 shutdown 表示傳遞給服務的參數,指示 STAF 把本地的 STAF 服務關閉。
STAX 的安裝文件也可以從STAF 的網站下載。STAX 本身不需要安裝,只需要更改 STAF 的配置文件以便 STAF 在啓動的時候能夠加載 STAX 服務。 從這個角度來説,STAX 是 STAF 的一種外部服務,可以根據需要來決定是否加載它。
下載完 STAX 後,將其解壓到 $STAF_Install_Directory\services\stax 目錄中,然後更改 STAF 的配置文件 STAF.cfg。此文件在 $STAF_Install_Directory\bin 目錄下。 在 STAF.cfg 文件末尾加上如下的代碼,然後重啓 STAF。
代碼1:STAX配置
SERVICE STAX LIBRARY JSTAF EXECUTE \
{STAF/Config/STAFRoot}/services/stax/STAX.jar OPTION J2=-Xmx384m
SERVICE EVENT LIBRARY JSTAF EXECUTE \
{STAF/Config/STAFRoot}/services/stax/STAFEvent.jar
SET MAXQUEUESIZE STAF重啓之後,運行命令staf local service list,查看輸出結果,如果顯示有STAX和EVENT則説明STAX已經成功加載。
圖 1. STAF 服務列表
SERVICE STAX LIBRARY JSTAF EXECUTE {STAF/Config/STAFRoot}/services/stax/STAX.jar通知STAF在啓動時以名字STAX(這樣在STAF服務列表中,我們看到的STAX的服務名字就叫做STAX)來加載STAX.jar,也就是STAX服務。 傳遞的參數J2=-Xmx384m表示更改JVM的堆棧大小。如果STAX會出現OutOfMemory錯誤,則需要調整這個參數,增加JVM的堆棧大小。 建議在加載STAX時總是指定這個參數,並且根據系統環境來調整參數大小。
SERVICE EVENT LIBRARY JSTAF EXECUTE {STAF/Config/STAFRoot}/services/stax/STAFEvent.jar通知STAF在啓動時以名字EVENT來加載STAFEvent.jar。
如果需要在運行STAX的機器上運行STAX Monitor (STAX任務的監控工具),則需要設置MAXQUEUESIZE,以保證STAXMonitor能夠正確運行。
6.1 STAF Java 代碼示例
代碼2所示的是STAF Java代碼示例。
代碼2:STAF Java代碼示例
STAFHandle handle = null;
try {
handle = new STAFHandle("Java_Sample_Test");
} catch (STAFException e) {
System.exit(1);
}
STAFResult result = handle.submit2("Linux1", "process",
"start command ls parms -l wait stdout /root/lsjava.log");
if (result.Ok != result.rc) {
System.out.println("Error starting the process ls, RC: " + result.rc);
}
result = handle.submit2("Linux1", "fs", "copy FILE /root/lsjava.log
TODIRECTORY C:/STAF TOMACHINE windows' % machineName");
if (result.Ok != result.rc) {
System.out.println("Error coping file, RC: " + result.rc);
}
在調用STAF服務之前,首先需要註冊STAFHandle,所有的STAF服務調用都要通過這個句柄來進行,因此一般把這個句柄設置成靜態的。通過handle.submit2()函數可以向STAF服務發送請求並且接收處理結果。
6.2 STAX腳本示例
STAX為我們簡化了調用STAF服務的過程,因此我們通過STAX腳本來調用STAF服務。本節將根據一個簡單的示例來簡要介紹STAX腳本的語法。
代碼3:STAX腳本SampleScript.xml示例
1
2
3
7
8 LinuxMachine = ['Linux1', 'Linux2']
9
10
11
12
13
14
15
16 '%s' % machineName
17 'process'
18 'start command "ls" parms "-l" wait stdout /root/ls.log'
19
20
21
22
23 'List directory successfully on %s' % machineName
24
25
26
27
28 'Error in listing directory on %s' % machineName
29
30
31
32
33 '%s' % machineName
34 'fs'
35 'copy FILE /root/ls.log TOFILE ls%s.log TODIRECTORY C:/STAF
TOMACHINE windows' % machineName
36
37
38
39
40
41
這個示例調用兩台Linux機器上的ls命令,將結果輸出到文件,根據命令返回的結果判斷調用是否成功,然後複製文件到另外的STAF機器中。為了方便描述,為腳本加上行號。
STAX採用現在流行的XML語言作為其腳本語言。第一行是XML語言的標準格式,第二行表示此XML文件使用stax.dtd樣式表進行驗證。所有的STAX腳本文件都應該保留這兩行。
3-6行是XML的註釋,用來描述這個腳本的功能。
第7行是STAX腳本命令的開始符,所有STAX腳本內容都要用它起始。第8行中script類似於編程語言中的定義變量的語句,在這裏定義一個長度為2的數組LinuxMachine,其值為Linux1和Linux2。
第9-10行指定STAX腳本運行時調用的函數。第11-40行是函數的定義體。11行指定函數名為ListDirectory。
第12-39行定義一個循環,類似於Java中的for,但是這個循環是並行的。var="machineName" in="LinuxMachine" 表示此循環從LinuxMachine數組中獲得輸入,並且賦給machineName變量。
13行定義測試用例,在STAX腳本的運行中,可以根據運行結果來決定測試用例的結果,方便用户查看。
第14-37行表示其中的STAX腳本是順序執行的。15-19行執行具體的STAF命令,其中location指定需要運行STAF命令的機器,可以由變量來動態指定,比如'%s' % machineName。 service表示需要調用的服務,在這裏為process進程服務。request為需要傳遞給服務的參數。進程服務的參數分為幾部分,首先是需要調用的命令"ls",parms指定需要傳遞給"ls"的參數"-l"。 wait表示需要等待這個命令結束才能返回。stdout表示將命令運行的結果輸出到文件中去。
20-31行判斷上個命令的返回結果,並根據返回結果的值設定測試用例的狀態,並且記錄日誌以及將消息發送到STAFMonitor。expr="RC==0"判斷返回結果是否為0。 RC表示上個命令的返回結果,0表示命令執行成功。設置測試用例狀態為通過,fail則表示測試用例失敗。 表示不僅將消息記錄到STAX的日誌中,而且將其發送到STAFMonitor(如果STAFMonitor處於運行狀態)。
32-36行是STAF的文件拷貝命令。fs表示文件系統服務,copy FILE指定複製文件操作,TOFILE指定目標文件的名字,STAX會用命令後面的參數% machineName替換%s,因此目標文件的名字為lsLinux1.log和lsLinux2.log。 TODIRECTORY指定目標文件夾,TOMACHINE指定目標機器。
上述STAX腳本可以用staf local stax execute file SampleScript.xml wait執行,或者通過java -jar STAXMon.jar啓動STAXMonitor來調用。

STAF注意

具體的項目經驗中,也發現不少問題,比較需要注意的是:一、是在stax job的XML文件中,其調用WINDOWS的命令時,文件分隔符為"/",而不是"\"。二、在編寫STAX JOB的XML時,如用到Altova XMLSpy等工具,需要STAX的DTD,可以用以下命令得到
set STAF_QUIET_MODE=1 (在Unix中: export STAF_QUIET_MODE=1)
STAF local STAX GET DTD > stax.dtd
set STAF_QUIET_MODE= (在Unix中: unset STAF_QUIET_MODE)

STAF外界評價

STAF(軟件自動化程序框) 提供了一個自動化測試的平台,可與其他測試工具一起,幫助我們進行自動化測試的更新、編譯、部署和測試。STAX為STAF提供了一個執行引擎,幫助加快STAF程序的開發和部署。 因此利用STAF和STAX可以減少測試的工作量和複雜度,加快軟件測試的流程,縮短測試周期。
參考資料