《测试框架》摘选-9 高质量测试脚本范例

“不积跬步,无以至千里;不积小流,无以成江海”。
—荀子《劝学》
如果说自动化测试的成功实施是一副壮丽的山水画卷,那么测试脚本/程序的一行行代码就是这幅画卷里一个个彩色元素;如果自动化测试框架是一幢雄伟坚实的大厦,那么函数代码就是其中的一砖一瓦。
因此,对于我们自动化测试开发人员来说,要想成功地构建并实施自动化测试框架,切勿好高骛远,必须要踏踏实实地掌握基本功,从学习开发高质量的测试程序或脚本代码开始,这才是一个训练有素自动化测试开发人员的成长之道。
什么样的代码才算得上是高质量的代码?高质量的代码到底是怎样开发出来的呢?本章将以案例进行介绍并点评。

1.1  案例1:脚本开始处首先进行环境检查
下面是一段linux系统上运行的perl脚本代码,功能是调用产品后台管理位于$ORACLE_HOME/bin目录下的add_user命令,根据存储在users.txt中的用户信息列表,依次在产品系统中创建测试账户。

my $data;
open FH, “< users.txt”;
while (<FH>) {
 chomp;
 print “users are $_\n”;
 $data=$_;
}
my @users=split(’,', $data);
foreach my $val (@users){
print “$ORACLE_HOME/bin/add_user –firstname $val –loginid $val –initial_password 123456 –email_address $val@gmail.com“;
}

上面的这段脚本由负责产品安装测试的工程师小李开发,每次安装完被测软件系统版本后,自动地运行这段脚本,就能直接把测试用户信息等初始数据创建到数据库中去。
但,可以看出要想能够成功运行该脚本,其前提条件是$ORACLE_HOME必须已经在linux系统环境变量设定,如下:
export ORALCE_HOME=/home/oracle/10123/Orahome1
这时,脚本代码
print “$ORACLE_HOME/bin/add_user –firstname $val –loginid $val –initial_password 123456 –email_address $val@gmail.com“;
会将$ORACLE_HOME替换成环境变量里设定的实际目录,实际执行如下:
print “/home/oracle/10123/Orahome1/bin/add_user –firstname $val –loginid $val –initial_password 123456 –email_address $val@gmail.com“;

但这段脚本显然忽略了一个很有可能发生的场景,那就是在脚本运行之前,如果测试人员忘了设定或者设错了$ORACLE_HOME环境变量,脚本就会因为找不到add_user命令,报出一堆莫名其妙的错误。这会降低测试脚本执行的效率,提高诊断错误的难度。
要想解决这个问题,就应该增强脚本的健壮性,在脚本开始处检测$ORACLE_HOME环境变量是否存在,并作相应地处理。修改如下:

#detect the $ORACLE_HOME, if not exist, then prompt info to user and exit
if($ORACLE_HOME eq “”)
{
        print “Error: Please specify the Beehive Home\n”;
        print “\n”;
        print “Usage:\n”;
        print “  perl create_user.pl -beehome <BEE_HOME>\n”;
        print “- beehome: The location of the Beehive Home.\n”;
        exit;
}
#end detect
my $data;
open FH, “< users.txt”;
while (<FH>) {
 chomp;
 print “users are $_\n”;
 $data=$_;
}
my @users=split(’,', $data);
foreach my $val (@users){
print “$ORACLE_HOME/bin/add_user –firstname $val –loginid $val –initial_password 123456 –email_address $val@gmail.com“;
}

修订后,脚本能够在第一时间内检测到环境变量的错误,并提示用户,然后退出,避免了错误扩散。

【思考1】
一个产品安装脚本,在脚本开始处应该考虑做哪些环境检查?
【思考2】
在脚本开始时进行环境检测,那么在脚本结束时应该做哪些操作?