2010-07-28 87 views
6

我知道有辦法可以自動化SQL Server「單元測試」。但我的問題稍有不同。自動SQL Server單元測試

驗證需求時,我們編寫了一系列SQL腳本,如果成功,基本不會返回任何內容。

所以基本上它像

  1. 執行查詢
  2. 執行另一個查詢
  3. 運行SSIS包
  4. 運行查詢。

而且例如多一點的背景下

要求#1描述:展會所以我的問題

  1. 查詢,以檢查是否目標表存在並且是空
  2. 查詢檢查源表存在並且有數據
  3. 運行ETL SSIS包
  4. 查詢檢查數據是否正確傳輸
  5. 查詢斷言業務規則

我們已經找到一種方法通過編寫自定義程序來解析通過執行SQL查詢,負載所需的數據,運行SSIS包等報告,如果我們有自動完成這一過程,然後結果(顯示測試失敗)。

這似乎像一個輪子重新發明......但我一直沒能找到像它這樣的東西。特別是與SSIS集成的一個。

編輯:

有人建議SSISunit,並且很少有它的文檔。如果我們要使用SSIS單元,它更像是設置過程聲明所需條件是否存在,步驟1 & 2以上?我一直認爲安裝過程不做驗證?

回答

0

經過大約一個月的研究,沒有OTS計劃在那裏做這個問題的問題。

我們正在尋找一個工具集,允許您定義如何驗證需求。在我們的例子中,我們需要一個通用例程來執行SQL腳本,加載數據和運行SSIS包,目前唯一的方法是編寫自己的編排工具。

我們使用.NET進行編排,但@Sam確實提供了一種用SSIS實現的有用方法。感謝@JasonHorner的建議,我們現在正在考慮讓它看起來更像SSISUnit,但是在更有組織的層面上。

0

您可以編寫一個執行所有這些步驟的SSIS包。

創建一個名爲myResult的變量。查看>>其他窗口>>變量。確保你處於包的控制流級別,而不是點擊進入某個任務/步驟。您希望將此變量作用於包級別。爲其提供Int32數據類型並將其默認值設置爲錯誤代碼。

執行SQL任務,將resultset屬性設置爲'Single Row'。使用「結果集」窗格將結果放入一個變量。設置結果名稱= 0和變量名稱= User :: myResult。

通過雙擊這兩個SQL任務之間的界限來檢查結果。設置爲計算表達式,並設置表情是這樣的:@myResult == 0

執行下一個SQL任務把結果放入相同的變量

檢查結果爲前

執行包任務(執行您的SSIS)

根據需要繼續進行......

您可以用DTEXEC.exe runtime執行SSIS包。返回代碼在那裏列出,所以你可以集成到另一個進程中。


--Additional stuff--

既然你想這是通用的許多情況下,你既可以寫一些代碼,會拉一個測試用例,它的各個步驟從一個表或者你可以在SSIS中做同樣的事情(也許!)。

在SSIS中,您可以創建一個Foreach循環容器,該容器將對存儲在變量中的ADO結果集進行操作。根據「步驟類型」--SQLCMD或SSIS包,可以使用表達式執行包或執行SQL語句以更改相關信息,例如包路徑或sql語句。爲了簡單起見,您需要爲服務器使用一個字段,sqlcmd和packagename - SQL任務不需要包名,ssis任務不需要sqlcmd。

+0

我想我們試圖完成的是有一組有限的任務,我們想要一種能夠執行與需求相關的「腳本」的方法。在你的情況下,我們會有每個需求的SSIS包?與解析輸入並斷言測試通過的系統相比。那有意義嗎? – Nix 2010-07-29 17:11:14

+0

哦,是的,我明白你的意思。嗯... – Sam 2010-07-29 17:13:10

+0

我想你可以編寫一些自定義代碼來查看一系列步驟,並使用DTEXEC和SQLCMD運行存儲在其中的sql命令或ssis包。 – Sam 2010-07-29 17:15:13

1

它不清楚我是否你的問題是對單元測試SSIS的SSIS包內的業務規則,或者這只是達到目的的手段也許這是有用的:

http://ssisunit.codeplex.com/

大多數xUnit框架支持安裝和拆卸結構。我認爲你想要的是使用測試的設置部分來執行ssis包和拆卸步驟來重置數據庫狀態。

我認爲這是一個起點,因爲它是內置於視覺工作室。

http://msdn.microsoft.com/en-us/library/bb381703(VS.80).aspx

因此,要回答你的問題,是的,我想你是重新發明輪子;但也許現有的車輪不適合你的問題;)