数据库测试

2025年3月17日 | 阅读 14 分钟

在本节中,我们将了解数据库测试,它用于检查被测数据库的模式、表、触发器等。

我们还将学习数据库测试的以下概念

  • 为什么我们需要使用数据库测试
  • 数据库测试流程
  • 数据库测试的类型
  • 如何手动进行数据库测试以及如何使用自动化工具进行数据库测试
  • 在数据库测试过程中,我们可能会面临哪些不同的挑战?
  • 数据库测试的组成部分。

在讨论数据库测试之前,首先,我们将理解数据库的定义。

什么是数据库?

数据库是预先组织好的数据集合,包含信息并有助于数据操作。用户可以轻松地管理和检索数据库。我们可以将数据组织成表、行、列和索引,从而更容易地识别适当的数据。

在数据库中,数据管理变得非常容易,因为我们可以将数据库用作检索数据的数据库,例如用于存储数据的表、用于数据操作的函数、触发器以及用于数据表示的视图

注意:随着软件系统中存储的数据量越来越大,数据库的复杂性也在随之增加。

在理解了数据库概念后,我们现在进入关于数据库测试的主要讨论。

数据库测试简介

软件测试中,数据库测试是一种测试,用于分析被测数据库的模式、表、触发器等。它还评估数据的完整性和一致性,这可能包括创建复杂的查询来加载和压力测试数据库并审查其响应能力。

通常,它包含一个分层流程,涉及数据访问、用户界面 [UI]、业务层以及数据库层

在数据库测试期间,我们可以涵盖以下数据库活动,例如

  • 测试数据完整性
  • 检查数据有效性
  • 性能检查相关
  • 数据库中的触发器和函数
  • 测试各种存储过程

为什么我们需要执行数据库测试?

如果我们进行了数据库测试,它将确保数据库的效率、最大稳定性、性能和安全性。

这些特性可以偶尔进行检查,以确认软件应用程序在部署到竞争性环境时是稳定的。要执行数据库测试,我们必须具备基本的SQL知识。

要获取有关 SQL 的更多信息,您可以参考以下链接:sql-tutorial

数据库测试的目的是什么?

执行数据库测试的主要目标是确保它们遵循各个方面

  • 事务的 ACID 属性
  • 数据映射
  • 业务规则的准确性
  • 数据完整性
Database Testing

1. 事务的 ACID 属性

数据库测试将确保事务的 ACID 属性

数据库执行这四个 ACID 属性。ACID 属性如下

  • 原子性
  • 一致性
  • 隔离
  • 耐用性

原子性

  • 原子性事务中的术语指定数据保持原子性,这意味着如果对数据执行了任何操作,它应该完全执行或实现,或者根本不执行。
  • 它也称为全有或全无

一致性

  • 一致性术语指定在事务完成后,值在事务中应始终保持不变。
  • 并且数据的完整性非常重要,因此数据库在事务之前和之后都保持一致。数据应始终正确。

隔离

  • 在事务中,隔离术语表示分离,它指定多个事务可以同时执行,而不会相互影响并改变数据库状态。
  • 或者,如果两个或多个事务并发发生,则应保持一致性。

耐用性

  • 持久性一词确保事物的永久性,进一步表示如果提交了事务,它将毫无失败地保留修改,而无论外部因素的影响如何。
  • 并且数据的持久性应该是如此完美,即使系统发生故障,数据库仍然可以幸存。

2. 数据映射

数据映射是数据库测试中的一项重要功能,主要侧重于验证在应用程序和后端数据库之间传递的数据。

以下是数据映射中测试的一些重要功能

  • 我们分析用户界面或前端方法是否与数据库表中的相应字段一致映射。
  • 通常,此映射信息在需求文档中指定。
  • 当在应用程序的前端执行特定操作时,后端会使用相应的创建、检索、更新和删除 [CRUD]活动。
  • 然后,测试工程师需要评估是否使用了正确的活动以及用户操作本身是否有效。

3. 业务规则的准确性

  • 数据库测试确保业务规则的准确性,因为我们知道复杂的数据库会导致复杂的组件,例如存储过程触发器和关系约束
  • 因此,测试工程师将提出适当的 SQL 命令来验证复杂对象。

4. 数据完整性

  • 数据库测试还确保数据完整性,在其中我们可以更新,并且最新的共享数据值应显示在所有表单和屏幕上。
  • 如果某个值在一个屏幕上未被修改,而在另一个屏幕上显示旧值,则状态可以同时更新。

如何执行数据库测试

我们可以手动执行数据库测试,也可以借助一些自动化工具执行。

如何手动执行数据库测试

要手动执行数据库测试,需要遵循以下流程

  • 首先,我们将打开本地系统中的SQL Server
  • 之后,我们将打开查询分析器来编写命令并检索数据。
  • 一旦我们可以检索到指定的数据,我们将把详细数据与预期结果进行比较。
  • 然后,我们可以更新或删除数据以检查软件应用程序的性能。
  • 数据库测试的通用测试流程与其他任何应用程序的测试流程并无不同。因此,要运行测试,我们可以遵循以下步骤
Database Testing

步骤 1:设置测试环境

首先,我们需要准备测试环境来测试软件应用程序。

步骤 2:执行测试

一旦我们设置好测试环境,我们将运行特定的测试用例。

步骤 3:检查结果

当测试用例成功执行且没有任何问题时,我们将检查指定的测试用例结果。

步骤 4:将输出与预期值进行验证

在检查测试用例结果后,我们将把相同的输出与预期值进行验证。如果结果符合预期输出,则测试用例将被视为通过;否则,将被标记为失败。

步骤 5:向利益相关者报告结果

最后,我们将向特定软件应用程序的利益相关者报告结果。

注意:如果我们设置了环境,测试工程师和开发人员将开发可以通过应用程序执行的所有可能场景。

然后,测试将涉及运行这些查询并检查数据完整性,这意味着结果数据将需要是真实、准确、完整、可检索和可验证的。

并且测试还可以包括监控数据映射、不同的 ACID 属性,并确保已实现的业务规则的准确性。

自动化如何帮助数据库测试

在软件测试中,自动化测试用于减少重复的手动工作,这有助于测试工程师更专注于关键功能,而数据库测试的工作方式相同。

让我们来看一些自动化对测试工程师非常有用的场景

  • 数据库模式修改

每次修改模式时,数据库都需要深入测试以确保一切就绪。并且需要覆盖的场景数量取决于数据库的大小。如果手动完成此过程,则会非常耗时。

  • 监控数据完整性问题

由于人为错误或其他问题,可能出现数据集在恢复或其他操作中损坏的情况。

但是,如果我们考虑自动监控流程,则更容易发现这些差异,并可以尽快修复它们。

  • 新应用程序或频繁更改的应用程序

正如我们所知,敏捷方法是测试的新时代,在每个冲刺结束时,我们都会有一个新的发布到生产环境,这意味着完成一轮测试需要 2-3 周时间。

但是,借助自动化功能,这些功能在最近的冲刺中是完全一致且不变的,我们可以专注于新的修改需求。

数据库测试组件

以下是数据库测试的组成部分

  • 数据库模式
  • 交易
  • 存储过程
  • 字段约束
  • 触发器
Database Testing

1. 数据库模式

数据库模式用于描述数据库中数据的运行方式及其组织。换句话说,我们可以说它只不过是对数据如何在数据库中规划的一种恰当的分类。

要测试这些条件,我们有两种方法,如下所述

可以根据工具的重要性使用以下任一方法

  • 我们可以使用SchemaCrawler工具,这是一个免费的数据库模式发现和理解工具。
  • 正则表达式是验证特定字段名称及其值的良好方法。
  • 要验证模式,我们可以使用以下 SQL 命令

根据数据库操作查找需求

  • 字段名以特定字符开头或结尾。
  • 主键需要在设计任何其他字段之前生成。
  • 具有约束的字段可以插入或不能插入特定值。
  • 为了方便恢复和搜索,外键必须完全索引。

2. 事务

最重要的数据库测试组件之一是事务,因为在执行数据库测试时,需要满足 ACID 属性。

  • 最常用的语句如下
  • 为了确保数据库保持一致状态,我们可以使用以下ROLLBACK命令
  • 为了确保修改已重现,我们可以在执行上述命令后使用SELECT命令

注意:在上述语句中,Transaction 表是包含事务的表。

3. 存储过程

存储过程与用户定义函数相对平行。并且整个系统以最一致和正确的结果运行。

它可以通过Execute 或 Call Procedure命令使用,并且通常输出是结果集的格式。存储过程系统用于数据存储在 RDBMS 中的多个应用程序。

我们可以通过白盒和黑盒测试来测试存储过程。

  • 白盒测试:在白盒测试中,使用存根来调用存储过程,然后根据预期值验证输出。
  • 黑盒测试:在此,我们可以操作应用程序的前端 (UI)。并评估存储过程的实现及其输出。

4. 字段约束

下一个数据库测试组件是字段约束,其中整个系统围绕默认值、唯一值和外键运行。

在这里,我们可以轻松验证从 SQL 命令中检索到的结果,并且

为了确保数据库中的对象条件已实现,我们可以执行前端(用户界面)操作。

5. 触发器

触发器组件用于独立执行整个表以记录输出。换句话说,我们可以说一个触发器(一段代码)可以在特定表上发生特定事件时自动执行。

让我们看一个示例,从中我们可以理解数据库测试中触发器组件的工作原理

  • 假设一名新员工加入公司。该员工从事两项工作,即开发和测试。然后,该员工被添加到Employee 表
  • 一旦他/她被添加到Employee 表,一个触发器就可以将该员工添加到相应的任务中。
  • 之后,我们可以遵循通用流程来测试它,首先独立执行触发器中嵌入的 SQL 命令,然后记录结果。
  • 最后,我们可以遵循此流程来执行整个系统中的触发器,然后比较结果。

这些类型的测试以两种方式完成,如下所示

白盒测试和黑盒测试都有其自身的流程和规则集,有助于我们获得精确的结果。

数据库测试的类型

数据库测试分为三种不同的测试类型,如下所示

Database Testing

让我们逐一了解每种类型

结构数据库测试

  • 是最重要的数据库测试技术,用于验证数据存储库中的所有元素,这些元素主要用于数据存储,并且不允许最终用户直接操作。
  • 如果我们希望此测试取得圆满成功,我们必须完全了解 SQL 命令。
  • 在结构数据库测试中,我们可以测试用户看不见的数据库组件。
  • 结构数据库测试主要用于验证数据库。

功能数据库测试

  • 最重要的数据库测试方法是功能数据库测试,它用于从最终用户的角度授权数据库的功能需求。
  • 功能数据库测试的主要目的是测试最终用户的事务和操作是否按预期连接到数据库工作。

非功能测试

在数据库测试主题中,非功能测试可根据业务需求分为多种类型。

以下列出了一些非功能测试的重要部分

注意:负载测试和压力测试属于性能测试,有助于实现两个特定的非功能测试目标。

数据库测试有哪些不同的挑战?

在进行数据库测试时,我们可能会遇到以下挑战。

在下表中,我们列出了一些常见挑战及其解决方案

不同的挑战解决方案
测试海量数据和模拟生产数据库
  • 缩小的或增强的数据库将是最佳解决方案,因为它尽可能接近生产数据集。
  • 虽然在类似生产的环境中进行测试是一个好方法,但有时在海量数据上进行测试可能是一个非常具有挑战性且耗时的过程。
测试数据的重用和测试数据创建
  • 为了解决这个特定问题,我们需要一个更好的策略来为所有持续的重复生成所有必需的数据。然后,我们可以仔细使用详细数据。
  • 所有命令都需要相互独立;例如,一个命令的输入数据和输出不会修改另一个命令的输出。
数据和查询分离
  • 软件产品的质量取决于成本。
从海量数据库获取数据所需的时间和成本
  • 因此,在项目时间表、预期质量和数据负载以及其他因素之间保持平衡至关重要。
频繁更改数据库结构
  • 在进行数据库测试时,数据库测试工程师最常面临此挑战。
  • 针对此特定挑战的最佳解决方案是,数据库测试人员需要创建测试用例和 SQL 命令,这些命令源自特定的结构,该结构在实现过程中或通过任何其他重新测试时会发生变化。
  • 为了避免最终延迟,我们需要尽早拦截修改及其影响。
不必要的数据修改
  • 数据库测试中不必要数据修改的最佳解决方案是访问控制。
  • 我们可以只允许有限数量的人员进行修改。
  • 并且编辑和删除选项的访问权限应受到限制。

关于数据库测试的误解或迷思

在进行数据库测试时,我们可能会对数据库测试产生一些误解。

让我们逐一了解它们,并理解相关迷思的现实

误解或迷思现实
由于数据库测试,整个开发过程将放缓。对于这个特定的迷思,现实是数据库测试有助于我们提高数据库应用程序的整体质量。
数据库测试是一项单调的工作,涉及大量的专业知识。在软件测试中,数据库测试是一个高效的过程,它为整个应用程序提供了长期的功能稳定性。
数据库测试是一项昂贵的流程。数据库测试的开销是必需的,因为任何数据库测试的开销都是一项长期投资,可带来应用程序的长久健壮性和一致性。
数据库测试增加了瓶颈的额外工作。相反,通过数据库测试识别隐藏的缺陷为整体工作增加了更多价值。

数据库测试中使用的自动化工具

市面上有几种数据库测试工具,但在这里我们讨论一些最常用的数据库测试自动化工具,如下所示

  • Data Factory
  • SQL Test
  • Mockup Data
  • MS SQL Server
  • DbUnit
Database Testing

数据工厂

Database Testing
  • Data Factory 是最受欢迎的数据库测试工具之一。
  • 它主要用于商业数据库测试工具,这意味着大型项目可以通过 Data Factory 工具进行测试。
  • 在数据库测试的上下文中,它充当数据生成器和数据管理器。
  • 对于处理大量数据的复杂命令,它是最高效的工具。
  • 此工具为我们提供了一个平台,可以轻松地对数据库执行压力或负载测试。

SQL Test

Database Testing
  • SQL Test 是市场上最常用的数据库测试工具。
  • 它是一个开源工具tSQLt框架,这意味着所有数据库测试工程师至少都可以使用一次。
  • 它允许我们为 SQL Server 数据库执行单元测试。
  • 借助此工具,我们可以轻松执行广泛的 SQL 测试。
  • 此工具的主要缺点是与市场上其他数据库测试工具相比,它速度较慢。

Mockup Data

Database Testing
  • Mockup Data 测试工具也属于测试数据生成器类别,并且它是一个商业测试工具。
  • 在此工具中,我们需要在表中添加列来验证输出。
  • 它帮助我们创建大量数据、CSV 文件和具有准确数据的数据库。
  • 它快速创建大量数据,并测试多个表与外键的关系。

MS SQL Server

Database Testing
  • Microsoft SQL Server 工具广泛用于执行单元测试。
  • 它是一个商业工具,我们可以在 VB 或 C# 项目中生成,并且期望测试工程师在开始测试之前了解项目模式。
  • 即使我们从数据库项目中创建测试,我们也可以使用 SQL Server 对象资源管理器。
  • 此工具的主要缺点是它没有良好的用户界面。

DbUnit

Database Testing
  • 它是一个开源工具,也称为JUnit 扩展
  • 它帮助我们将数据导入和导出到数据库,从 XML 数据集导入和导出,并处理大型数据库。
  • 它最初执行CLEAN-INSERT操作;因此,它不再执行任何清理。
  • 借助DBUnit工具,我们可以探索数据并连接关系型和多维数据库。

结论

数据库测试部分,我们学习了以下主题

  • 数据库测试是一种测试,用于分析被测数据库的模式、表、触发器等。
  • 要理解数据库测试流程的关键概念,数据库测试工程师必须了解数据库测试的各种功能、类型、手动和自动化流程以及数据库测试工具。
  • 借助本教程,我们了解了数据库测试的误解或其解决方案。

下一主题Mainframe 测试