我有这么个项目,oracle导入dmp数据库文件(空库),检查初始化表和数据内容是否正确,然后,启动tomcat后,有5步操作,每部操作都会写入数据库一些数据。我想把这个 测试过程 写成shell脚本来自动化测试。
比如:shell调用sqlplus的方法:
#!/bin/bash
base=`sqlplus -S /nolog <<EOF
set heading off feedback off pagesize 0 verify off echo off numwidth 4
conn base/zdsoft
select id from base_code;
exit
EOF`
echo $base
比如第一步:检查初始化数据库的表和数据是否正确的脚本:
我现在的情况是:我有5个不同的库,每个库需要检查的表有10-30张,每张表要检查一些关键字段,各库之间的关联数据,数据量等,下面举个例子:
测试用例1:检查base库,cnet库,root库中base_code表的初始化主键是否都相等(因为每个库不同部门提供,因为沟通不够,导致此表的主键不一致从而出现bug)
#!/bin/bash
base=`sqlplus -S /nolog <<EOF
set heading off feedback off pagesize 0 verify off echo off numwidth 4
conn base/password
select id from base_code where unit_id='00000000000000000000000000000000';
exit
EOF`
cnet=`sqlplus -S /nolog <<EOF
set heading off feedback off pagesize 0 verify off echo off numwidth 4
conn cnet/password
select id from base_code where unit_id='00000000000000000000000000000000';
exit
EOF`
root=`sqlplus -S /nolog <<EOF
set heading off feedback off pagesize 0 verify off echo off numwidth 4
conn root/password
select id from base_code where unit_id='00000000000000000000000000000000';
exit
EOF`
if [ "$base" = "$cnet" ] && [ "$base" = "$root" ] && [ "$cnet" = "$root" ]; then
echo "pass"
exit 0
else
echo "nopass,select id from base_code" > logs
fi
echo "脚本运行完毕,共运行测试用例200个,其中测试不通过用例数为:"
cat logs |grep nopass|wc -l
检查3个库的base_code的主键,数量是否相同,是则测试通过,否则测试不通过,并且把不通过的sql语句写入日志
最后统计脚本运行完不通过的测试用例的个数有多少个,详细不通过的用例查看logs文件。
那么,我现在遇到的一个最大的问题就是:一条测试用例 就要写 这么多调用sqlplus方法,写了这么多的代码,那么所有测试用例写下来就不得了了。于是,我要想办法让他参数化,或者 函数调用。
我要同时满足 sql返回的结果变量参数化,链接数据库账号参数化,sql语句参数化,类似:
for result in a b c ;do
for user in base cnet root ;do
for sqlword in select1 select2 select3 ;do
$result=`sqlplus -S /nolog <<EOF
set heading off feedback off pagesize 0 verify off echo off numwidth 4
conn &user/password
$sqlword
exit
EOF`
done
done
done
-----类似上面的$result,&user,$sqlword.非开尝试了上面3次参数化,结果是:conn &user/password 完全不行。$sqlword 好像可以。$result=可以,但是执行的结果不对,被cut了。
----------------------------------
我刚学这个,实在还不懂如何优化好,请教各位高手,该如何写 才能把 代码量大量减少呢?
上面同时满足2种参数化或3种参数化 该如何 去写呢?
能否通过函数实现呢?
把$result,&user,$sqlword当成函数的3个参数,然后调用,这样子应该方便很多吧,嘿嘿,明天试试。
----------------------------------
十分十分感谢高人帮忙,做我师傅更好,加QQ
-----------------------------------