保證資料庫質量安全:從0開始的資料庫測試

博為峰網校 發表於 2022-11-14
資料庫

如今,使用Android等技術以及許多智慧手機應用程式,計算機應用程式變得更加複雜,前端越複雜,後端就越複雜。 加我VX:atstudy-js 回覆“測試”,進入 自動化測試學習交流群~~

保證資料庫質量安全:從0開始的資料庫測試

因此,瞭解資料庫測試、有效地驗證資料庫,以確保資料庫的安全性和質量就顯得尤為重要。

在本文中,您將瞭解有關資料測試的所有資訊——為什麼、測什麼以及如何測。

無論是網路、桌面還是移動、客戶端伺服器、點對點、企業或個人業務、後端等都需要資料庫,同樣,醫療保健、金融、租賃、零售、郵寄應用程式資料庫始終在幕後執行。

隨著應用程式複雜性的增加,對更強大、更安全的資料庫的需求出現了。同樣,對於交易頻率較高的應用程式(例如銀行或金融應用程式),功能齊全的資料庫工具的必要性是相輔相成的。

如今,我們擁有傳統資料庫無法處理的龐大而複雜的大資料。

市場上有幾種資料庫工具,例如MS-Access、MS SQL Server、SQL Server、Oracle、Oracle Financial、MySQL、PostgreSQL、DB2、Toad、Admirer 等。

這些工具在成本、穩健性、功能方面各不相同,這些中的每一個都有其自身的優點和缺點。

測試資料庫的特性

下面,我們將看到驗證資料庫的以下方面:

資料對映

在軟體系統中,資料經常從 UI(使用者介面)到後端資料庫來回傳輸,反之亦然。因此,這些是需要注意的一些方面:

1)檢查 UI/前端表單中的欄位是否與 DB 表中的相應欄位對映一致。通常,此對映資訊在需求文件中定義。

2)每當在應用程式的前端執行某個操作時,都會在後端呼叫相應的 CRUD(建立、檢索、更新和刪除)操作。測試人員必須檢查是否呼叫了正確的操作以及呼叫的操作本身是否成功。

ACID屬性驗證

資料庫執行的每個事務都必須遵守原子性、一致性、隔離性和永續性這四個屬性。

保證資料庫質量安全:從0開始的資料庫測試

1)原子性

意味著事務要麼失敗,要麼透過。這意味著即使交易的單個部分失敗了——也意味著整個交易都失敗了,通常,這被稱為“全有或全無”規則。

2)一致性

事務將始終導致資料庫的有效狀態。

3)隔離性

如果有多個事務並且它們一次全部執行,則資料庫的結果/狀態應該與它們一個接一個地執行一樣。

4)永續性

一旦事務完成並提交,沒有外部因素(如斷電或崩潰)應該能夠改變它。

資料完整性

對於任何CRUD操作,共享資料的更新和最新值/狀態應顯示在所有表單和螢幕上,不應在一個螢幕上更新該值並在另一個螢幕上顯示較舊的值。

當應用程式正在執行時,終端使用者主要利用DB Tool促進的“CRUD”操作。

C:建立——當使用者“儲存”任何新交易時,執行“建立”操作。

R:檢索——當使用者“搜尋”或“檢視”任何儲存的交易時,執行“檢索”操作。

U:更新——當使用者“編輯”或“修改”現有記錄時,執行資料庫的“更新”操作。

D:刪除——當使用者從系統中“刪除”任何記錄時,執行資料庫的“刪除”操作。

終端使用者執行的任何資料庫操作始終是上述四種之一。因此,設計您的資料庫測試用例的方式包括檢查所有地方的資料,看看它是否始終如一。

業務規則一致性

資料庫中的更復雜意味著更復雜的元件,如關係約束、觸發器、儲存過程等,因此測試人員必須提出適當的 SQL 查詢來驗證這些複雜的物件。

測試什麼(資料庫測試清單)

交易

在測試事務時,確保它們滿足ACID屬性很重要。

這些是常用的語句:

開始交易交易#

結束交易交易#

Rollback 語句確保資料庫保持一致狀態。

回滾交易#

執行這些語句後,使用 Select 確保已反映更改。

SELECT * FROM TABLENAME <涉及事務的表>

資料庫模式

資料庫模式只不過是對如何在資料庫中組織資料的正式定義。要測試它:

確定資料庫執行所基於的需求

樣品要求:

在建立任何其他欄位之前要建立的主鍵

外來鍵應該被完全索引以便於檢索和搜尋

以特定字元開頭或結尾的欄位名稱

具有可以或不能插入某些值的約束的欄位

根據相關性使用以下方法之一:

SQL查詢DESC以驗證架構

用於驗證各個欄位的名稱及其值的正規表示式

SchemaCrawler等工具

觸發器

當某個表上發生某個事件時,可以自動指示執行一段程式碼(觸發器)。

例如,一個新學生加入了一所學校,學生正在上數學和科學兩門課。學生被新增到“學生表”中,一旦將學生新增到學生表中,觸發器就可以將他新增到相應的主題表中。

常用的測試方法是先獨立執行Trigger中嵌入的SQL查詢,並記錄結果,跟進執行整個觸發器,比較結果,這些在黑盒和白盒測試階段都進行了測試。

白盒測試

存根和驅動程式用於插入或更新或刪除將導致觸發觸發器的資料,基本思想是在與前端 (UI) 整合之前單獨測試資料庫。

黑盒測試

由於UI和DB,現在可以進行整合,我們可以透過呼叫觸發器的方式從前端插入/刪除/更新資料。之後,可以使用 Select 語句檢索資料庫資料,以檢視觸發器是否成功執行了預期的操作。

第二種測試方法是直接載入將呼叫觸發器的資料並檢視它是否按預期工作。

儲存過程

儲存過程或多或少類似於使用者定義的函式,這些可以透過呼叫過程/執行過程語句呼叫,輸出通常是結果集的形式。

這些儲存在RDBMS中,可供應用程式使用,也在以下期間進行測試:

白盒測試:存根用於呼叫儲存過程,然後根據預期值驗證結果。

黑盒測試:從應用程式的前端 (UI) 執行操作並檢查儲存過程的執行及其結果。

欄位約束

預設值、唯一值和外來鍵:

執行執行資料庫物件條件的前端操作

使用SQL查詢驗證結果

檢查某個欄位的預設值非常簡單,它是業務規則驗證的一部分,可以手動完成,也可以使用QTP等工具。

手動可以執行一個操作,該操作將從前端新增欄位的預設值以外的值,並檢視它是否會導致錯誤。

Function VBScriptRegularexpressionvlaidation(pattern , string_to_match)Set newregexp = new RegExpnewregexp.Pattern = “&amp;lt;Default value as required by the business requirements&amp;gt;”newregexp.Ignorecase = Truenewregexp.Global = TrueVBScriptRegularexpressionvlaidation = newregexp.Test(string_to_match)End FunctionMsgbox VBScriptRegularexpressionvlaidation(pattern , string_to_match)

如果預設值存在,則上述程式碼的結果為True,否則為False。

檢查唯一值可以完全按照我們對預設值所做的方式進行,嘗試從 UI 中輸入違反此規則的值,並檢視是否顯示錯誤。

自動化 VB 指令碼程式碼可以是:

Function VBScriptRegularexpressionvlaidation(pattern , string_to_match)Set newregexp = new RegExpnewregexp.Pattern = “&amp;lt;Unique value as required by the business requirements&amp;gt;”newregexp.Ignorecase = Truenewregexp.Global = TrueVBScriptRegularexpressionvlaidation = newregexp.Test(string_to_match)End FunctionMsgbox VBScriptRegularexpressionvlaidation(pattern , string_to_match)

對於外來鍵約束驗證,使用直接輸入違反約束的資料的資料載入,並檢視應用程式是否限制它們。

在載入後端資料的同時,還要以違反約束的方式執行前端UI操作,並檢視是否顯示相關錯誤。

資料測試活動有哪些

資料庫測試人員應專注於以下測試活動:

確保資料對映

資料對映是資料庫中的關鍵之一,每個軟體測試人員都應該對其進行嚴格測試。

確保AUT的不同形式或螢幕與其DB之間的對映不僅準確,而且符合設計文件 (SRS/BRS) 或程式碼。基本上,您需要驗證每個前端欄位與其對應的後端資料庫欄位之間的對映。

對於所有CRUD操作,驗證當使用者從應用程式的GUI中單擊“儲存”、“更新”、“搜尋”或“刪除”時,相應的表和記錄是否已更新。

您需要驗證的內容:

表對映、列對映和資料型別對映

查詢資料對映

UI 上的每個使用者操作都會呼叫正確的 CRUD 操作

CRUD 操作成功

確保事務的ACID屬性

DB Transactions的ACID屬性指的是“ A tomicity”、“ Consistency ” 、“ Isolation”和“ Durability ”,必須在資料庫測試活動期間對這四個屬性進行適當的測試,需要驗證每個事務是否滿足資料庫的ACID屬性。

讓我們透過下面的SQL程式碼舉一個簡單的例子:

CREATE TABLE acidtest (A INTEGER, B INTEGER, CHECK (A + B = 100));

ACID測試表將有兩列A 和B,有一個完整性約束,即A和B中的值之和應始終為100。

原子性測試將確保在該表上執行的任何事務是全部或無,即如果事務的任何步驟失敗,則不更新記錄。

一致性測試將確保每當更新A或B列中的值時,總和始終保持100,如果總和不是100,它將不允許在 A 或 B 中插入/刪除/更新。

隔離測試將確保如果兩個事務同時發生並試圖修改ACID測試表的資料,那麼這些牽引是隔離執行的。

永續性測試將確保一旦提交了此表上的事務,即使在斷電、崩潰或錯誤的情況下,它也會保持不變。

如果您的應用程式使用分散式資料庫,則該領域需要更嚴格、徹底和敏銳的測試。

確保實施的業務規則的準確性

今天,資料庫不僅僅用於儲存記錄。事實上,資料庫已經發展成為非常強大的工具,為開發人員在資料庫級別實現業務邏輯提供了充足的支援。

強大功能的一些簡單示例是“引用完整性”、關係約束、觸發器和儲存過程。

因此,使用DB提供的這些和許多其他功能,開發人員可以在DB級別實現業務邏輯,測試人員必須確保實現的業務邏輯是正確的並且可以準確地工作。

以上幾點描述了測試資料庫的四個最重要的“做什麼”,現在,讓我們繼續“如何”部分。

如何測試資料庫

通用測試過程測試資料庫與任何其他應用程式沒有太大區別,以下是核心步驟:

準備環境

執行測試

檢查測試結果

根據預期結果進行驗證

將結果報告給各個利益相關者

保證資料庫質量安全:從0開始的資料庫測試

通常SQL查詢用於開發測試,最常用的命令是“選擇”。

Select \ from where *

除了Select,SQL有3種重要的命令型別:

DDL:資料定義語言

DML:資料操作語言

DCL:資料控制語言

讓我們看看最常用語句的語法,資料定義語言使用CREATE、ALTER、RENAME、DROP和TRUNCATE來處理表(和索引)。

資料操作語言包括新增、更新和刪除記錄的語句。

資料控制語言處理授權使用者操作和訪問資料,Grant和Revoke是使用的兩個語句。

授予語法:

Grant select/updateOn To <user id1, user id2…useridn>;

撤銷語法:

Revokeselect/updateon from<user id1, user id2…useridn>;

一些實用技巧

自己編寫查詢

為了準確地測試資料庫,測試人員應該對SQL和DML(資料操作語言)語句有很好的瞭解,測試人員還應該知道AUT的內部資料庫結構。

您可以在各自的表中結合GUI和資料驗證以獲得更好的覆蓋率,如果您使用的是 SQL 伺服器,那麼您可以使用SQL查詢分析器來編寫查詢、執行查詢和檢索結果。

當應用程式具有中小型複雜性時,這是測試資料庫的最佳且穩健的方法。

如果應用程式非常複雜,那麼測試人員可能很難或不可能編寫所有必需的SQL查詢,對於複雜的查詢,可以從開發人員那裡獲得幫助。

我推薦這種方法,因為它可以讓您對測試充滿信心,並提高您的SQL技能。

觀察每個表中的資料

您可以使用CRUD操作的結果執行資料驗證,當您瞭解資料庫整合時,可以使用應用程式UI手動完成此操作,但是當不同的資料庫表中存在大量資料時,這可能是一項繁瑣而繁瑣的任務。

對於手動資料測試,資料庫測試人員必須具備良好的資料庫表結構知識。

從開發人員那裡獲取查詢

這是測試資料庫的最簡單方法,從GUI執行任何CRUD操作,並透過執行從開發人員處獲得的相應SQL查詢來驗證其影響。它既不需要很好的SQL知識,也不需要很好地瞭解應用程式的資料庫結構。

但是這種方法需要謹慎使用,如果開發人員給出的查詢在語義上是錯誤的或沒有正確滿足使用者的要求怎麼辦?該過程將無法驗證資料。

使用資料庫自動化測試工具

有多種工具可用於資料測試過程。您應該根據自己的需要選擇正確的工具並充分利用它。

結論

有了在資料庫上測試的所有這些特性、因素和流程,對測試人員在技術上精通關鍵資料庫概念有很大幫助。

最後:

可以到我的個人V:atstudy-js,可以免費領取一份10G軟體測試工程師面試寶典文件資料。以及相對應的影片學習教程免費分享!其中包括了有基礎知識、Linux必備、Mysql資料庫、抓包工具、介面測試工具、測試進階-Python程式設計、Web自動化測試、APP自動化測試、介面自動化測試、測試高階持續整合、測試架構開發測試框架、效能測試等。

這些測試資料,對於做【軟體測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!

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