SQL存储过程测试(5)——从T-SQL测试套件里把测试结果直接写入文本文件
2009-10-26 09:58
465 查看
问题
如何让T-SQL测试套件把测试用例结果直接写入文本文件
设计
使用ActiveX技术实例化一个FileSystemObject对象,然后通过OpenTextFile()和WriteLine()方法直接把测试结果写入文件。
方案
declare @fsoHandle int,@fileID int
exec sp_OACreate 'Scripting.FileSystemObject',@fsoHandle out
exec sp_OAMethod @fsohandle,'OpenTextFile',@fileID out,
'C:/pathToResults/Results.txt',8,1
——主测试循环
if(@result = @expected)
exec sp_OAMethod @fileID,'WriteLine',null,'Pass'
else
exec sp_OAMethod @fileID,'WriteLine',null,'FAIL'
——主测试循环结束
exec sp_OADestroy @fileID
exec sp_OADestroy @fsoHandle
我们需要有一个文件句柄和一个文件ID,它们的类型都是Int,SQL Server有一个作sp_OACreate()的存储过程可以实例化ActiveX对象。sp_OACreate()接受一个字符串作为传入的参数,这个字符串就是要创建的ActiveX对象的名字,并且以out参数的形式返回一个已创建对象的引用,这个引用的类型是int。对于Scripting.FileSystemObject的情况来说,返回值是关于文件句柄的一个引用。接下来,可以通过调用sp_OAMethod()方法打开文件。在本例中,第一个参数是sp_OACreate()把创建的句柄,第二个参数是我们想要使用的方法的名称,第三个参数是用于保存返回的文件句柄的变量,第四个参数指定文件的物理名称,第五个参数是可选的,它指定使用的IO模式。
1:以只读方式打开文件(默认)。
2:以写方式打开文件。
3:以追加方式打开文件
第六个参数是可选的,它是一个创建标识,用来指定当给定文件不存在的时候是否创建一个新的文件。
0:不创建新文件(默认)。
1:创建一个新文件。
第八个害数也是可选的,它是一个格式标识,用来指定字符的编码方式。
0:以ASCII方式打开文件(默认)。
1:以Unicode方式打开文件。
2:以系统默认的模式打开文件。
注解
运行T-SQL测试套件的时候,有好几种方法可以用来保存测试结果。如果把测试结果保存成文本文件,常用的技术是先把所有测试结果都保存到一个SQL表里,然后把结果转换成一个文件文件。另一种做法是,在T-SQL套件里直接把测试结果写入文本文件。
上述方案使用了FileSystemObject类的OpenTextFile()方法,这个方案正常工作的前提是要写入的文件已经存在。作为替代,也可以使用CreateTextFile()方法:
declare @fsoHandle int,@fileID int
exec sp_OACreate 'Scripting.FileSystemObject',@fsoHandle out
exec sp_OAMethod @fsohandle,'CreateTextFile',@fileID out,
'C:/pathToResults/Results.txt',0,0
——主测试循环
if(@result = @expected)
exec sp_OAMethod @fileID,'WriteLine',null,'Pass'
else
exec sp_OAMethod @fileID,'WriteLine',null,'FAIL'
——主测试循环结束
exec sp_OADestroy @fileID
exec sp_OADestroy @fsoHandle
CreateTextFile()方法接受一个必填的文件名参数以及两个可选的布尔值。
因为SQL本身并不支持布尔数据类型,因些要使用整数类型0表示False,1表示True。第一个可选的布尔值指定覆盖标识,如果该值为True/1则意味着覆盖已存在的同名文件。如果该值为False/0则意味着不覆盖已存在的同名文件。第二个可选的布尔参数是编码标识。其值为true/1意思是以Unicode编码方式创建创建这个文件。其值为false/0意思是ASCII编码方式创建这个文件。这两个参数的默认值都是false/0,或者换句话说,默认情况下都不覆盖已有文件以及使用ASCII编码方式。
除了从T-SQL把数据写入文本文件,还可以采用这种方法读入文本数据:
declare @fsoHandle int ,@fileID,int
declare @eof int
declare @line varchar(1000)
exec sp_OACreate 'Scripting.FileSystemObject',@fsoHandle out
exec sp_OAMethod @fsohandle,'OpenTextFile',@fileID out,
'C:/pathToResults/Results.txt',1,1
set @eof = 0
while @eof = 0
begin
exec sp_OAMethod @fileID,'ReadLine',@line out
print @line
exec sp_OAM3thod @fileID,'AtEndOfStream',@eof out
end
exec sp_OADestroy @fileID
exec sp_OADestroy @fsoHandle
如何让T-SQL测试套件把测试用例结果直接写入文本文件
设计
使用ActiveX技术实例化一个FileSystemObject对象,然后通过OpenTextFile()和WriteLine()方法直接把测试结果写入文件。
方案
declare @fsoHandle int,@fileID int
exec sp_OACreate 'Scripting.FileSystemObject',@fsoHandle out
exec sp_OAMethod @fsohandle,'OpenTextFile',@fileID out,
'C:/pathToResults/Results.txt',8,1
——主测试循环
if(@result = @expected)
exec sp_OAMethod @fileID,'WriteLine',null,'Pass'
else
exec sp_OAMethod @fileID,'WriteLine',null,'FAIL'
——主测试循环结束
exec sp_OADestroy @fileID
exec sp_OADestroy @fsoHandle
我们需要有一个文件句柄和一个文件ID,它们的类型都是Int,SQL Server有一个作sp_OACreate()的存储过程可以实例化ActiveX对象。sp_OACreate()接受一个字符串作为传入的参数,这个字符串就是要创建的ActiveX对象的名字,并且以out参数的形式返回一个已创建对象的引用,这个引用的类型是int。对于Scripting.FileSystemObject的情况来说,返回值是关于文件句柄的一个引用。接下来,可以通过调用sp_OAMethod()方法打开文件。在本例中,第一个参数是sp_OACreate()把创建的句柄,第二个参数是我们想要使用的方法的名称,第三个参数是用于保存返回的文件句柄的变量,第四个参数指定文件的物理名称,第五个参数是可选的,它指定使用的IO模式。
1:以只读方式打开文件(默认)。
2:以写方式打开文件。
3:以追加方式打开文件
第六个参数是可选的,它是一个创建标识,用来指定当给定文件不存在的时候是否创建一个新的文件。
0:不创建新文件(默认)。
1:创建一个新文件。
第八个害数也是可选的,它是一个格式标识,用来指定字符的编码方式。
0:以ASCII方式打开文件(默认)。
1:以Unicode方式打开文件。
2:以系统默认的模式打开文件。
注解
运行T-SQL测试套件的时候,有好几种方法可以用来保存测试结果。如果把测试结果保存成文本文件,常用的技术是先把所有测试结果都保存到一个SQL表里,然后把结果转换成一个文件文件。另一种做法是,在T-SQL套件里直接把测试结果写入文本文件。
上述方案使用了FileSystemObject类的OpenTextFile()方法,这个方案正常工作的前提是要写入的文件已经存在。作为替代,也可以使用CreateTextFile()方法:
declare @fsoHandle int,@fileID int
exec sp_OACreate 'Scripting.FileSystemObject',@fsoHandle out
exec sp_OAMethod @fsohandle,'CreateTextFile',@fileID out,
'C:/pathToResults/Results.txt',0,0
——主测试循环
if(@result = @expected)
exec sp_OAMethod @fileID,'WriteLine',null,'Pass'
else
exec sp_OAMethod @fileID,'WriteLine',null,'FAIL'
——主测试循环结束
exec sp_OADestroy @fileID
exec sp_OADestroy @fsoHandle
CreateTextFile()方法接受一个必填的文件名参数以及两个可选的布尔值。
因为SQL本身并不支持布尔数据类型,因些要使用整数类型0表示False,1表示True。第一个可选的布尔值指定覆盖标识,如果该值为True/1则意味着覆盖已存在的同名文件。如果该值为False/0则意味着不覆盖已存在的同名文件。第二个可选的布尔参数是编码标识。其值为true/1意思是以Unicode编码方式创建创建这个文件。其值为false/0意思是ASCII编码方式创建这个文件。这两个参数的默认值都是false/0,或者换句话说,默认情况下都不覆盖已有文件以及使用ASCII编码方式。
除了从T-SQL把数据写入文本文件,还可以采用这种方法读入文本数据:
declare @fsoHandle int ,@fileID,int
declare @eof int
declare @line varchar(1000)
exec sp_OACreate 'Scripting.FileSystemObject',@fsoHandle out
exec sp_OAMethod @fsohandle,'OpenTextFile',@fileID out,
'C:/pathToResults/Results.txt',1,1
set @eof = 0
while @eof = 0
begin
exec sp_OAMethod @fileID,'ReadLine',@line out
print @line
exec sp_OAM3thod @fileID,'AtEndOfStream',@eof out
end
exec sp_OADestroy @fileID
exec sp_OADestroy @fsoHandle
相关文章推荐
- SQL存储过程测试(2)——创建测试用例以及测试结果存储
- SQL存储过程测试(7)——当待测存储过程返回out参数时 如何判断测试结果是否通过
- SQL存储过程测试——创建测试用例以及测试结果存储
- 直接在存储过程里面写sql语句的话 ,会返回操作的结果
- SQL和存储过程的结果不一致——小议Oracle的number精度问题
- delphi调用sql存储过程,并获取结果
- delphi如何调用sql存储过程,并获取结果
- SQL 在存储过程中获取另一个存储过程返回的结果集
- 直接从SQL语句问题贴子数据建表并生成建表语句的存储过程
- 利用sqlplus将sql语句查询结果直接导出到文本文件
- mysql 创建存储过程及测试sql
- SQL存储过程测试(6)——当待测存储过程返回行集的时候 如何判断测试结果是否通过
- Sql语句与存储过程查询数据的性能测试实现代码
- 利用存储过程写入测试数据
- 直接从SQL语句问题贴子数据建表并生成建表语句的存储过程
- Sql语句与存储过程查询数据的性能测试
- sql 存储过程接收不定量参数 比较分析写入数据库
- 性能测试:动态生成SQL语句 VS 存储过程
- 分页存储过程(二)在MS SQL Server中返回更加准确的分页结果
- 存储过程测试sql执行时间间隔毫秒级