清單 2. 生成任務參數文件并啟動任務隊列的代碼
MILY: Verdana, Arial, 新宋體; BACKGROUND-COLOR: rgb(230,230,230); WORD-WRAP: break-word">$isTestStarted = false;
$testQueueDir=opendir("$testQueuePath");
while($fileName=readdir($testQueueDir)){
if ($fileName!="." and $fileName!="..") {
$isTestStarted = true;
break;
}
}
//Here should be the code to create a parameter file for this task, using parameters set
by user from the web UI.
if(!$isTestStarted){
exec("STAF local STAX EXECUTE FILE /usr/local/staf/xml/queuemanager.xml CLEARLOGS");
}
header('Location: / viewTestList.PHP');
在這里我們并沒有去檢查任務處理進程是否在系統中存在,而是根據任務文件文件夾是否為空來判斷。這一判斷是基于若隊列中有未執行完的任務,則應該有隊列處理進程在進行處理的簡單假設。當然偶爾也會有測試任務出錯,任務處理進程非正常中止的情況發生,使得該假設失準。因此,我們要在 PHP 代碼中查詢任務處理進程的日志,判斷其運行狀態,并在頁面中向測試執行人員顯示出來。如果任務文件夾中尚有文件未執行,而隊列處理進程又處于停止狀態,就要提示測試人員排查錯誤并手動重啟任務隊列處理進程。
STAX 任務啟動后,我們也可以隨時讓 PHP 代碼執行 exec("STAF local STAX TERMINATE JOB $JobID") 來中止任務編號為 JobID 的 STAX 任務。
監控 STAX 運行情況:
STAX 一旦出錯,意味著任務無法運行,如果能夠實時監控 STAX 任務運行狀態,可提高可靠性。
清單 3. 監控 STAX 任務狀態
exec("./viewStaxLog.sh $staxJobID 2>&1", $outPut);
$isStopped = false;
foreach($outPut as $outputline){
$pos = strpos($outputline, "Stop JobID:");
if($pos !== false){
$isStopped = true;
}
}
if($isStopped){
echo "<fond color="blue">Stopped</font><br>";
}
else{
echo "<fond color="red">Running</font><br>";
}
上面清單中調用了查看 STAX 日志的 shell 腳本。STAX 日志分為兩種,一種是系統對任務運行情況和錯誤的自動記錄,另一種是測試開發人員在 STAX 任務腳本中用 <log></log> 標簽主動記錄的日志?梢酝ㄟ^ STAF 命令實時查詢任何 STAX 任務的日志。在獲得日志后可以根據日志中的關鍵字(如上面代碼中的“Stop JobID: ”)判斷 STAX 任務的狀態。
STAX 的日志可以用 STAF 命令進行查詢,其代碼如下。
清單 4. 查詢 STAX 日志
if [ $1 = “user” ]
then
staf local log query machine mytest.cn.ibm.com logname STAX_Job_$2_User
else
staf local log query machine mytest.cn.ibm.com logname STAX_Job_$1
fi
遠程程序調用:
在測試過程中,可以讓 STAX 遠程執行要運行的程序,這里給出實際應用中經常會調用 shell 腳本的示例,其 STAX 代碼如下。
清單 5. STAX 遠程調用 shell 腳本
<process>
<location>'local'</location>
<command mode="'shell'" >'"./%" result %s %s'
% (testScriptName,testParam1,testParam2)</command>
<workdir>'%s' % testScriptDir</workdir>
<stderr mode="'stdout'"/>
<returnstdout/>
</process>
<if expr="RC != 0">
<log>'Error: RC=%s, STAXResult=%s, Error running test script'
% (RC, STAXResult)</log>
<else>
<log>'Running test script: STAXResult=%s' % (STAXResult)</log>
</else>
</if>
分析測試結果:
STAX 使用 Python 處理其腳本中的表達式。為了便于文本分析,使用者可以在 STAX 腳本中嵌入 Python 腳本。用這種方式可以方便地利用 Python 強大的正則表達式處理能力。下面的代碼示范如何從日志文件中提取相關文字并進行對比判斷。
<stafcmd>
<location>'%s' % logServer</location>
<service>'fileman'</service>
<request>'grep file "%s" machine "%s" for "%s" last CODEPAGE ascii'
% (testLogName,logServer,testCaseName)</request>
</stafcmd>
<!—- Some other code here -->
<script>
import re
import string
result = str(STAFResult[0])
testCaseMatch = re.search("%s %s"
% (testCaseName.upper(),expectedResult.upper()),result.upper())
</script>
配置使用
配置這樣一個自動化測試框架,需要安裝 Apache Server,MySQL,PHP,如何安裝該環境,這里就不贅述。我們開發的測試框架由于其功能比較多,也需要在測試中不斷的更改配置,有時還要增加測試內容。為了便于其配置,我們將PHP代碼中有可能需要修改的變量都放在一個單獨的 PHP 文件中,而與測試用例相關的變量用 PHP 數組的形式存放在另一個 PHP 文件中。所有要用到這些配置的 PHP 文件對其進行包含。
總結
LAMP 是功能強大的 Web 應用程序平臺,STAF/STAX 具有很好的自動測試功能,把二者結合起來就可以形成更加靈活可靠,易于功能擴展的新的自動化測試框架,本文也通過在 WVS 產品測試中使用該框架從而獲得了很好的測試效果。
文章來源于領測軟件測試網 http://www.kjueaiud.com/