清单 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 产品测试中使用该框架从而获得了很好的测试效果。
文章来源于领测软件测试网 https://www.ltesting.net/