关闭

SQL存储过程测试(3)——创建T-SQL测试套件

发表于:2009-11-10 16:24

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:igoone    来源:51Testing软件测试博客

  问题

  如何创建一个T-SQL测试套件用于测试SQL存储过程。

  设计

  首无,通过插入大量测试平台数据准备好一个包含待测存储过程的底层数据库。接下来,使用一个SQL游标(cursor)遍历这个测试用例数据表。针对每个测试用例,调用待测存储过程并且取得它的返回值,把实际返回值与期望值进行比较,从而判定测试结果是通过与否,然后显示或保存测试结果。

  方案

——testAuto.sql

——为dbEmployees填充数据

truncate table dbEmployees.dbo.tblEmployees

insert into dbEmployees.dbo.tblEmployees values('e11','Adams','15/10/2009')

insert into dbEmployees.dbo.tblEmployees values('e22','Baker','15/10/2009')

insert into dbEmployees.dbo.tblEmployees values('e33','Young','15/10/2009')

insert into dbEmployees.dbo.tblEmployees values('e44','Zetta','15/10/2009')

——此处插入更多数据

declare tCursor cursor fast_forward

    for select caseID,input,expected

    from dbTestCasesAndResults.dbo.tblTestCases

    order by caseID

declare @caseID char(4),@input char(3),@expected int

declare @actual int,@whenRun datetime

declare @resultLine varchar(50)

set @whenRun = getdate()

open tCursor

fetch next

    from tCursor

    into @caseID,@input,@expected

while @@fetch_status = 0

    begin

    exec @actual = dbEmployees.dbo.usp_StatusCode @input

    if (@actual = @expected)

        begin

            set @resultLine = @caseID + ': Pass'

            print @resultLine

        end

    else

        begin

            set @resultLine = @caseID + ': FAIL'

            print @resultLine

        end

    fetch next

        from tCursor

        into @caseID,@input,@expected

end

close tCursor

deallocate tCursor

——end script

  如果待测存储过程依赖于外部数据(大多数情况下都是这样的),则必须把大量的测试平台数据填充到底层的数据库表。在SQL测试环境下,通常有两个数据库:开发数据库供开发者在编写代码时使用,测试数据库供测试者在测试时使用。因为对存储过程进行测试经常会改变包含存储过程的这个数据库(因为存储过程经常对数据进行插入、更新、删除),因此不希望在开发数据襄轴上运行测试程序。因此,应该复制一份开发数据库的拷贝,并且使用这个拷贝来做测试。这样,开发数据库的表里面保存的就是供开发者使用的数据。这些数据对于在开发待测系统(SUT)的过程中进行基本的验证测试(verification testing)是非常有必要的。但是,这些数据对于进行全面而严格的测试来说,通常是不够丰富的。

  有好几种方法可以遍历一个存储测试用例数据的数据库表,使用SQL游标是其他简单有效的一种。SQL游标被设计用来处理单个数据而不是像其他SQL操作(比如SELECT和INSERT)那样处理行集(rowset)。首先应该声明一个指向保存测试用例数据的SQL表的游标:

declare tCursor cursor fast_forward

    for select caseID,input,expected

    from dbTestCasesAndResults.dbo.tblTestCases

    order by caseID

  注意:与其他SQL变量不同,游标变量的名字前面并没有@字符。可供声明的游标有好几种。FAST_FORWARD最适合用来读取测试用例数据。其他游标类型包括FORWARD_ONLY,READ_ONLY,以及OPTIMISTIC。FAST_FORWARD实际上就是FORWARD_ONLY加上 READ_ONLY的别名。

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号