建立測試用例以及測試結果儲存

iSQlServer發表於2009-11-06

 許多基於Windows的系統都使用了SQL Server作為後臺元件。待測程式(AUT:Application Under Test)或者待測系統(SUT:System Under Test)經常通過儲存過程來訪問資料庫。對於這些應用場景,可以把SQL儲存過程想象成應用程式的輔助函式。有兩種基本的方法可以用來編寫針對SQL儲存過程的輕量級的自動化測試

  第一種方法是在原始的SQL環境中編寫自動化測試程式碼,也就是說測試套件程式碼(harness code)用於T-SQL語言來編寫的,並且在類似於查詢分析器(QueryAnalyzer)或者Management Studio這樣的程式裡被執行。

  第二種方法是在.NET環境下編寫自動測試程式碼,測試套件程式碼是用C#或者其他.NET語言來編寫的,並且在諸如命令列程式等常規的Windows環境下被執行。

  此次介紹如何使用原始的SQL環境來測試SQL儲存過程。

  問題

  如何建立SQL資料庫以及表結構以用來儲存測試用例的輸入資料和測試結果。

  設計

  編寫T-SQL指令碼,建立一個資料庫然後建立一些表用來儲存測試用例的輸入資料和測試結果。如果想通過SQL認證的方式連線到上一步建立的資料庫,則要建立一個專用的SQL登入賬號,然後在查詢分析器裡或者通過osql.exe執行T-SQL指令碼。

  方案

  下面的指令碼建立了一個叫dbTestCasesAndResults的資料庫,它包括一個用於儲存測試用例資料的表和一個勝於儲存測試結果的表,以及一個專用的SQL登入賬號,這個賬號便於程式通過Windows認證或者SQL認證的方式連線資料庫。下面來看程式碼。

--makeDbTestCasesAndResults.sql

use master

go

if exists(select * from sysdatebases where name = 'dbTestCasesAndResults')

      drop database dbTestCasesAndResults

go

if exists(select * from sysxlogins where name = 'testLogin')

      exec sp_droplogin 'testLogin'

go

create database dbTestCasesAndResults

go

use dbTestCasesAndResults

go

create table tblTestCases

(

      caseID char(4) primary key,

      input char(3) not null,-- an empID

      expected int not null

)

go

--下面插入的是用於usp_StatusCode的測試用例資料

--也可以通過BCP,DTS,或者C#程式從文字檔案讀入

insert into tblTestCases values('0001','e11',77)

insert into tblTestCases values('0002','e22',77) ——should be 66

insert into tblTestCases values('0003','e33',99)

insert into tblTestCases values('0004','e44',88)

go

create table tblResults

(

      caseID char(4) not null,

      result char(4) null,

      whenRen datetime not null

)

go

exec sp_addlogin 'testLogin','secret'

go

exec sp_grantdbaccess 'testLogin'

go

grant select,insert,delete on tblTestCases to testLogin

go

grant select,insert on tblResult to testLogin

go

  第一步設定當前的資料庫為SQLServer的主資料庫(master database)。當建立一個新的使用者資料庫的時候,這一步是必不可少的。如果要建立的資料庫已經存在,系統就會給一個錯誤,為了防止這種錯誤,可以在試圖刪除新資料庫的舊版本之前通過查詢sysdatabases表來檢查舊版的資料庫是否存在。然後可以通過資料庫建立用於測試用例儲存的資料庫。用於建立資料庫的語句有許多可選的引數,但是對於輕量級的自動測試來說,接受這些引數的預設值通常就可以滿足需要了。

  註解

  SQL資料庫支援兩種不現的安全模式:使用Windows認證可以通過Windows賬號ID和密碼連線資料庫,使用混合模式認證可以通過SQL登入ID 和SQL密碼來連線資料庫。如果想要通過SQL認證來連線資料庫,應該使用系統儲存過程sp_addlogin()建立一個SQL登入賬號以及相應的密碼。如果要刪除一個SQL登入賬號,可以先查詢sysxlogin()表檢查相應的賬號是否存在,然後呼叫sp_droplogin()來刪除這個賬號。建立好一個SQL登入賬號以後,應該賦予登入賬號連線資料庫的許可。然後需要針對資料庫裡的表,賦予登入賬號與SQL語句相關的許可權許可,比如:SELECT,INSERT,DELETE以及UPDATE。

  SQL登入賬號很容易與SQL使用者搞混。SQL登入賬號是伺服器範圍的物件,它用來控制針對裝有SQL Server的機器的連線許可。而SQL使用者是資料庫範圍的物件,它用來控制資料庫以及它所包含的表,儲存過程和其他一些物件的許可權許可。當為一個SQL 登入賬號分配許可權的時候,會自動建立一個同名的SQL使用者。所以最終會有一個SQL登入賬號和一個SQL使用者,兩個名字相同並且相互關聯。儘管也可以上讓不同名的賬號和使用者相互關聯,但是這太容易讓人迷惑了,所以最好還是使用名字相同的預設機制。

  為了測試儲存過程而測試用例儲存結構的時候,必須決定在什麼時候以及如何往表中插入勝於測試用例的那些資料。最簡單的辦法是在建立表的時候直接加入用於測試用例的資料。使用本解決方案所演示的INSERT語句可以很快的完成這件事情。但是,在測試的過程中幾乎肯定要在很多地方碰上需要新增或者移除測試用例資料的情況,所以更靈活的方法是在後面使用BCP(Bulk Copy Program),DTS(Data Transformation Services)或者一個輔助的C#程式來插入資料。如果想要插入以及刪除測試用例資料,那麼就應當針對儲存測試用例資料的那張表為SQL登入賬號賦予 INSERT和DELETE的許可權許可。

  這個用於建立測試用例和儲存測試結果的指令碼可以通過幾種方法來執行,一種方法是在查詢分析器程式裡開啟並通過Excute命令。第二種方法是使用OSQL.EXE程式來執行這個SQL指令碼。

原文地址:http://www.**ing.com/html/51/n-179451.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-618261/,如需轉載,請註明出處,否則將追究法律責任。

相關文章