SQL server資料庫存儲過程測試方法

2020-11-28 IT168

  【IT168 技術文檔】許多基於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認證的方式連接資料庫。下面來看代碼。

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

--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

  註解

  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腳本。

相關焦點

  • 三方法解決SQL Server與雲端資料庫連接
    按鈕後只需要輸入資料庫的名稱和選擇資料庫的最大大小即可。在圖1的實例中,已經創建了一個名稱為testDb,大小為1G的資料庫。注意創建完資料庫後,需要配置防火牆的規則以允許你從遠端訪問SQL Azure裡的伺服器。  在SQL Azure上創建資料庫以後,我們需要連接到SQL Azure資料庫,要在SQL Azure上做一些開發,也同樣需要連接到SQL Azure資料庫庫。
  • SQL Server 首次登陸 Linux 平臺
    近年來, SQL Server 正在一直演化,除了想一改 DMS(資料庫管理系統)的角色,還想介入到數據分析、機器學習和數據科學領域。2017 年 4 月份, SQL Server 發布了一個重要組件,支持在 SQL Server 中用 Python 運行機器學習負載。
  • SQL Server 2016新亮點全揭秘
    Hybrid Cloud Features  我們都知道, SQL Server 2016提供了Stretch Database功能,Stretch Database提供了把內部部署資料庫擴展到Azure SQL 資料庫的途徑,它支持資料庫將將使用頻率較高的數據存儲在本地,使用頻率低的數據存儲在Azure Cloud。
  • 微軟 SQL Server 2016 SP1 發布
    資料庫克隆 - 克隆資料庫是一個新的 DBCC 命令,允許 DBA 並支持團隊通過克隆的模式和元數據來解決現有的生產資料庫的沒有數據統計的故障。克隆資料庫並不意味著在生產環境中使用。SQL 2016 SP1 中的 DBCC CLONEDATABASE 使您能夠僅生成查詢存儲、僅統計信息,或僅圖標克隆而無需統計信息或查詢存儲。CREATE OR ALTER - 新的 CREATE OR ALTER 支持使得修改和部署對象更容易,如存儲過程、觸發器、用戶定義的函數和視圖。 這是開發人員和SQL社區非常需要的功能之一。
  • server sql 作業 使用專題及常見問題 - CSDN
    use masterGO/* --開啟sql server代理sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Agent XPs', 1; GO RECONFIGURE GO*/--定義創建作業
  • SQL-server資料庫管理系統試卷及答案A
    C、SYS開頭的系統表中的數據用戶不能直接修改,但可以通過系統存儲過程、系統函數進行改動、添加。D、12AM是中午,12PM是午夜。4、資料庫系統不僅包括資料庫本身,還要包括相應的硬體,軟體和( )。
  • SQL Server 管理常用的SQL和T-SQL
    =] ''object'', [@newowner =] ''owner'' 注意: 更改對象名的任一部分都可能破壞腳本和存儲過程。把一臺伺服器上的資料庫用戶登錄信息備份出來可以用add_login_to_aserver腳本 查看某資料庫下,對象級用戶權限 sp_helprotect 7.
  • 動態創建MSSQL資料庫表存儲過程
    System.Drawing.Point(19, 9)     Me.CreateDBBtn.Name = "CreateDBBtn"     Me.CreateDBBtn.Size = New System.Drawing.Size(104, 23)     Me.CreateDBBtn.TabIndex = 0     Me.CreateDBBtn.Text = "創建資料庫
  • R+SQL Server的大數據管理
    在學習和使用R語言的過程中,在數據文件的選擇方面,由於csv文件在各大資料庫軟體以及統計分析軟體都有很好的兼容性,所以一直被廣泛地用作數據儲存傳輸
  • SQL Server跨伺服器操作資料庫?其實很簡單! - Excel教案
    創建SQL Server遠程連結方法一第一步打開SSMS—>登錄到本地資料庫—>伺服器對象—>連結伺服器(右鍵)—>新建連結伺服器,如下圖1:圖1 開始創建連結伺服器第二步在彈出的對話框中輸入相關信息
  • 最詳細的SQL注入相關的命令整理
    4、 判斷xp_cmdshell擴展存儲過程是否存在:https://192.168.1.5/display.asp?現在,我們用同樣的方法判斷該目錄是否為根目錄:and (select count(*) from temp2 where dir<>'user')<(select count(*) from temp2)如果返回為真,為了確定我們的判斷,多測試幾個例子,方法上面都講到了,如果多個例子都返回為真,那麼就確定了該目錄為WEB根目錄。
  • 資料庫是什麼?怎樣學習SQL Server資料庫?
    因為資料庫就是一種服務。資料庫就是一種服務拿SQL Server資料庫來說,你下載、安裝SQL Server之後,系統服務中就會多出來好幾個和SQL Server相關的服務。SQL Server服務是這些服務的核心,它提供數據的存儲、處理和訪問。為什麼叫做資料庫?
  • 資料庫大戰,AWS又將目標瞄準了微軟SQL Server
    正如亞馬遜re:Invent歷年的傳統一樣,今年大會第一天,Amazon Web Services (AWS) CEO Andy Jassy在他的主題演講中,一如既往的抨擊了甲骨文,但從其推出的資料庫新品來看,真正目標顯然是微軟。
  • 資料庫遷移搞炸了!沒用這款開源神器的鍋?
    相關概念工作原理使用Flyway時我們需要編寫好資料庫遷移的SQL腳本,比如V1__Initial_Setup.sql中初始化了三種表,V2__First_Changes.sql中又新增了兩種表。Flyway會創建flyway_schema_history表,用於存儲這些SQL腳本的執行情況,從而對資料庫進行版本控制。
  • 詳解Python在資料庫測試中的應用
    因此,DM對外提供的基於c/c++的接口都可以通過這個方法得到訪問,如果使用Python作為接口測試的載體,得到的測試用將比使用編譯型語言的測試程序更易於修改調試。  以上是針對c/c++接口而言,對於.net平臺和JAVA平臺,我們可以分別使用Python for .Net 和 Jython。
  • SQL Server 2008 R2進行VS2010應用開發
    資料庫應用層程序(DAC)是一個包含了幾乎某一應用所需要的資料庫及實例對象的實體,如表、視圖、存儲過程、登錄等等。有了實體以後,開發人員或資料庫管理員就可以把DAC打包成為一個單一實體,這個單一實體就是DAC包。 DBA可以把DAC包部署到SQL Server上,資料庫管理員就可以把原本獨立的對象視為一個資料庫應用層的程序來進行部署、監控和管理。
  • SQL Server2008中的9種數據挖掘算法淺析
    決策樹是用樣本的屬性作為結點,用屬性的取值作為分支,也就是類似流程圖的過程,其中每個內部節點表示在一個屬性上的測試,每個分支代表一個測試輸出,而每個樹葉節點代表類或類分布。它對大量樣本的屬性進行分析和歸納。根結點是所有樣本中信息量最大的屬性,中間結點是以該結點為根的子樹所包含的樣本子集中信息量最大的屬性,決策樹的葉結點是樣本的類別值。
  • 這個函數讓SQL效率提升99%
    如果是之前的版本,就只支持-- 聚合函數 over(partition by 分組欄位) as 別名優點SQL更加簡潔執行效率更高實例實例的數據使用的是和 SQL筆試50題同樣的數據, 使用的平臺是SQLFIDDLE(提供在線資料庫),鑑於近期全球病情的影響,各種網站都有一定機率無法提供服務,本次提供了SQLite資料庫,已存入測試數據
  • 對SQL Server跨文件組的表進行分區
    先決條件  在開始此實驗之前,您必須:  使用 Transact-SQL 在 Microsoft® SQL Server® 資料庫中創建資料庫對象的經驗。  實驗設置  實驗場景  Adventure Works Cycles 的數據倉庫中有幾個非常大的表。
  • Visual Studio Code: 利用 MSSQL 插件創建資料庫 IDE
    此外,還可以存儲不同的連接,然後使用「管理連接配置文件」功能輕鬆進行連接。 與 mssql 進行交互的最簡便方法是,打開文件進行編輯,並確保 VS Code 知道你正在編輯 SQL。藉助新增的查詢命令,無論打開的是文件夾還是項目,都可以這樣做。這會創建 SQLQuery.sql 文件,並且 sql 插件會讓 VS Code 切換到 mssql 編輯器。