[转载]Bourne Shell及shell编程 九
时间:2005-11-26 来源:ghostzhu
版权声明:
本文内容为大连理工大学LINUX选修课讲义,欢迎大家转载,但禁止使用本材料进行
任何商业性或赢利性活动。转载时请保留本版权声明。
作者:何斌武,[email protected],大连理工大学网络中心,April 1999.
[请点击阅读全文]
——by ghostzhu
12. 在每个脚本内,捕获每个行命令所返回码
决定功能测试成功还是失败的一种方法是计算已失败行命令的数量,即返回码不是 0。变
量 "$?" 提供最近所调用命令的返回码;在下面的示例中,它提供了执行 "ls" 命令的返
回码。
代码:
# -------------------------------------------
# The commands are called in a subroutine
# so that return code can be
# checked for possible errors.
# -------------------------------------------
ListFile()
{
echo "ls -al $1"
ls -al $1
if [ $? -ne 0 ]
then
echo "ERROR found in: ls -al $1"
let "errorCounter = errorCounter + 1"
fi
}
13. 记录失败事务的次数
在功能测试中决定其成功或失败的一个方法是计算返回值不是 0 的行命令数量。但是,从
我个人的经验而言,我习惯于在我的 Bash shell 脚本中仅使用字符串而不是整数。在我
所参考的手册中没有清楚地说明如何使用整数,这就是我为什么想在此就关于如何使用整
数和计算错误(行命令失败)数量的方面多展开讲的原因:
首先,需要按如下方式对计数器变量进行初始化:
let "errorCounter = 0"
然后,发出行命令并使用 $? 变量捕获返回码。如果返回码不是 0,那么计数器增加 1(
见蓝色粗体语句):
代码:
ListFile()
{
echo "ls -al $1"
ls -al $1
if [ $? -ne 0 ]
then
echo "ERROR found in: ls -al $1"
let "errorCounter = errorCounter + 1"
fi
}
顺便说一下,与其它变量一样,可以使用 "echo" 显示整数变量。
14. 在输出文件中,为了容易标识,突出显示错误消息
当遇到错误(或失败的事务)时,除了错误计数器的数量会增加外,最好标识出此处有错
。较理想的做法是,字符串有一个如 ERROR 或与之相似的子串(见蓝色粗体的语句),这
个子串允许测试者很快地在输出文件中查找到错误。此输出文件可能很大,而且它对于迅
速找到错误非常重要。
代码:
ListFile()
{
echo "ls -al $1"
ls -al $1
if [ $? -ne 0 ]
then
echo "ERROR found in: ls -al $1"
let "errorCounter = errorCounter + 1"
fi
}
15. 如有可能,"实时"生成文件
在某些情况下,有必要处理应用程序使用的文件。可以使用现有文件,也可以在脚本中添
加语句来创建文件。如果要使用的文件很长,那最好将其作为独立的实体。如果文件很小
而且内容简单或不相关(重要的一点是文本文件而不考虑它的内容),那就可以决定"实时
"创建这些临时文件。
下面几行代码显示如何"实时"创建临时文件:
代码:
cd $HOME/fvt
echo "Creating file softtar.c"
echo "Subject: This is softtar.c" > softtar.c
echo "This is line 2 of the file" >> softtar.c
第一个 echo 语句使用单个的 > 强行创建新文件。第二个 echo 语句使用两个 >> 将数据
附加到现有文件的后面。顺便说一下,如果该文件不存在,那么会创建一个文件。
16. 在执行脚本的过程中提供反馈
最好在脚本中包含 echo 语句以表明它执行的逻辑进展状况。可以添加一些能迅速表明输
出目的的语句。
如果脚本要花费一些时间执行,那或许应在执行脚本的开始和结束的地方打印时间。这样
可以计算出所花费的时间。
在脚本样本中,一些提供进展说明的 echo 语句如下所示:
代码:
# --------------------------------------------
echo "Subject: Product X, FVT testing"
dateTest=`date`
echo "Begin testing at: $dateTest"
echo ""
echo "Testcase: $CALLER"
echo ""
# --------------------------------------------
# --------------------------------------------
echo ""
echo "Listing files..."
# --------------------------------------------
# The following file should be listed:
ListFile $HOME/.profile
...
# --------------------------------------------
echo ""
echo "Creating file 1"
# --------------------------------------------
17. 提供脚本执行的摘要
如果正在计算错误或失败事务的次数,那最好表明是否有错误。此方法使得测试者在看到
输出文件的最后能迅速地辨认出是否存在错误。
在下面的脚本示例中,代码语句提供了上述脚本的执行摘要:
代码:
# --------------
# Exit
# --------------
if [ $errorCounter -ne 0 ]
then
echo ""
echo "*** $errorCounter ERRORS found during ***"
echo "*** the execution of this test case. ***"
terminate
else
echo ""
echo "*** Yeah! No errors were found during ***"
echo "*** the execution of this test case. Yeah! ***"
fi
echo ""
echo "$CALLER complete."
echo ""
dateTest=`date`
echo "End of testing at: $dateTest"
echo ""
exit 0
# end of file
18. 提供一个容易解释的输出文件
在脚本生成的实际输出中提供一些关键信息是非常有用的。那样,测试者就可以很容易地
确定正在查看的文件是否与自己所做的相关以及它是否是当前产生的。附加的时间戳记对
于是否是当前状态是很重要的。摘要报告对于确定是否有错误也是很有帮助的;如果有错
误,那么测试者就必须搜索指定的关键字,例如 ERROR,并确认出个别失败的事务。
以下是一段输出文件样本的片段:
代码:
Subject: CMVC 2.3.1, FVT testing, Common, Part 1
Begin testing at: Tue Apr 18 12:50:55 EDT 2000
Database: DB2
Family: cmpc3db2
Testcase: fvt-common-1
Creating Users...
User pat was created successfully.
...
Well done! No errors were found during the
execution of this test case :)
fvt-common-1 complete.
End of testing at: Tue Apr 18 12:56:33 EDT 2000
当遇到错误时输出文件最后部分的示例如下所示:
代码:
ERROR found in Report -view DefectView
*** 1 ERRORS found during the execution of this test case. ***
The populate action for the CMVC family was not successful.
Recreating the family may be necessary before
running fvt-client-3 again, that is, you must use rmdb ,
rmfamily , mkfamily and mkdb -d ,
then issue: fvt-common-1 and optionally, fvt-server-2.
fvt-client-3 terminated, exiting now with rc=1.
End of testing at: Wed Jan 24 17:06:06 EST 2001
19. 如有可能,提供清除脚本及返回基准线的方法
测试脚本可以生成临时文件;假若这样,最好能让脚本删除所有临时文件。这就会避免由
于测试者也许没有删除所有临时文件而引起的错误,更糟糕的是将所需要的文件当作临时
文件而删除了。
运行功能测试的 Bash shell 脚本
本节描述如何运用 Bash shell 脚本进行功能测试。假设您已经执行了在前面部分中所述
步骤。
设置必要的环境变量
根据需要在 .profile 中或手工指定下列环境变量。该变量用于说明在脚本中如何处理,
所需环境变量的验证必须在脚本执行前定义。
export TEST_VAR=1
将 Bash shell 脚本复制到正确的目录下
Bash shell 脚本和相关文件需要复制到要进行功能测试的用户标识的目录结构下。
登录进某个帐户。您应该在主目录下。假设它是 /home/tester。
为测试案例创建目录:mkdir fvt
复制 Bash shell 脚本和相关文件。获取压缩文件(请参阅参考资料)并将其放在 $HOME
下。然后将其按下列方式解压:unzip trfvtbash.zip
为了执行这个文件,更改文件的许可权:chmod u+x *
更改名称以除去文件的后缀:mv test-bucket-1.bash test-bucket-1
运行脚本
执行下列步骤以运行脚本:
以测试者的用户标识登录
更改目录至所复制脚本的位置:cd $HOME/fvt
从 $HOME/fvt 运行脚本:./test-bucket-1 -s 2>&1 | tee test-bucket-1.out
看一下输出文件 "test-bucket-1.out" 的尾部并查看摘要报告的结论。
--
理论中心主页:10.50.22.96
内有外教课现场录音以及上课所用文本。还有voa,bbc.
latex论文写作工具。
文献查询。
理论物理专业书籍。