论坛上看到许多测友提到数据库验证的方法,如"我想通过数据驱动方式在系统中插入记录,没插入一条就和数据库进行比较,看插入操作后数据库中是否存在,这个怎么实现啊,我通过设运行时数据库检查点老报错",我想了几个解决方案,希望对大家有用;
基本思路:
一.在ODBC中配置数据源
二.使用WR的db_connect建立数据库连接
三.使用WR的db_excuate_query函数执行SQL语句,查询出要查询的内容
四.比较读取的值与预期的值,得出结果
我写了一个去数据库最后一条信息的函数:
public function db_get_last_row(in ConnectStr,in SQL,in column,out fieldnum,out header_arr[])
{
auto rc,res=0,val,record_num,Row_Content;
rc=db_connect("query1",ConnectStr,30);
if (rc!=E_OK){pause("Database connect fail");res=1;return(res);}
val=db_execute_query("query1",SQL,record_num);
if (val!=0){pause("SQL string is invaild");res=1;return(res);}
db_get_headers("query1",fieldnum,headers);
split (headers, header_arr, "\t");
Row_Content=db_get_field_value("query1","#"&(record_num-1),column);
return(Row_Content);
}
其中column可以使用#+列号获取相应列的值,这样我们可以用一个for循环分别获取从第1列到最后一列的信息,并比较,这里又有个新问题:如何获取一个表的列数,WR提供db_get_headers函数获取列数。
在比较时写以下代码:
db_get_last_row("数据库连接语句","select top 1 * from 数据库表 order by ID(或一个能表示最新值的字段)","",fieldnum,header_arr); //至于升序还是降序则需要根据具体软件了
for(i=0;i<fieldnum;i++)
{
Row_content=db_get_last_row("数据库连接语句","select * from 数据库表",#i,fieldnum);
if (Row_content!="预期结果值")
{
report_msg("数据库内容与预期结果不一致"&"实际结果:"header_arr[i]&"="&Row_content);
continue;
}
}
这样,在数据驱动中加入我写的这个函数可以不断比较添加的值与数据库中的值的问题了!
以上这种方法是使用函数对数据库操作,我觉得还有其他方式,比如使用WR的数据库检查点,后面我会把这些方法都总结写到这里来,希望大家一起来探讨一下;