shell调用sqlplus的简单问题,初学者急求帮忙

上一篇 / 下一篇  2011-03-23 19:25:31 / 个人分类:语言脚本

 

我有这么个项目,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

-----------------------------------

 

 

 


 

 

 


TAG:

 

评分:0

我来说两句

日历

« 2024-05-15  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 19057
  • 日志数: 19
  • 建立时间: 2011-03-10
  • 更新时间: 2012-08-25

RSS订阅

Open Toolbar