数据库测试 – 面试问题
数据库测试包括执行数据有效性、数据完整性测试、与数据库相关的性能检查以及对数据库中的过程、触发器和函数的测试。
执行数据库测试的原因有多种。由于后端系统负责存储数据并用于多种目的,因此需要对数据库执行数据完整性、验证和数据一致性检查。
需要执行数据库测试的一些常见原因如下 −
为了减轻对数据库后端调用的复杂性,开发人员增加了视图和存储过程的使用。
这些存储过程和视图包含关键任务,例如插入客户详细信息(姓名、联系信息等)和销售数据。这些任务需要在多个级别进行测试。
在前端执行黑盒测试很重要,但很难隔离问题。在后端系统进行测试可以提高数据的稳健性。这就是在后端系统上执行数据库测试的原因。
在数据库中,数据来自多个应用程序,并且有可能在数据库中存储有害或不正确的数据。因此,需要定期检查数据库组件。此外,应定期检查数据的完整性和一致性。
执行数据库测试时需要遵循的步骤如下 −
- 必须验证数据库中的数据。
- 验证是否维护了约束。
- 必须检查过程的性能和触发器的执行。
- 必须检查事务的回滚和提交。
根据数据库的功能和结构,数据库测试可分为以下几类 −
结构数据库测试 − 它涉及表和列测试、模式测试、存储过程和视图测试、检查触发器等。
功能测试 − 它涉及从用户的角度检查数据库的功能。最常见的功能测试类型是白盒测试和黑盒测试。
非功能测试 − 它涉及负载测试、数据库风险测试、压力测试、最低系统要求,并处理数据库的性能。
用于执行存储过程测试的最常见工具是 LINQ、SP 测试工具等。
连接用于以某种逻辑方式连接两个或多个表。常见的连接类型包括:内连接、非等值连接、外连接、自连接和交叉连接。
您可以将单个表与其自身连接。在这种情况下,您两次使用同一张表。
步骤 1 − 连接到数据库
db_connect(query1 DRIVER {drivername};SERVER server_name;UID uidname; PWD password;DBQ database_name );
步骤 2 − 执行数据库查询 −
db_excecute_query(编写要执行的所需查询);指定适当的条件
步骤 3 −使用以下命令断开数据库连接
db_disconnect(query);
使用输出数据库检查点,必须选择 SQL 手动查询选项。在这里,可以编写选择查询。
首先,检查存储过程的要求。下一步是检查索引、连接、删除、更新与存储过程中提到的表相比是否正确。
接下来,执行以下任务 −
验证调用过程名称、调用参数和不同输入参数集的预期响应。
使用 TOAD 或 MySQL 或查询分析器执行该过程。
通过发送不同的参数重新执行可用的过程,并根据预期值检查结果。
完成该过程后,使用 WinRunner 自动化测试。
测试人员应使用 EXEC 命令调用数据库中的存储过程。如果需要任何参数,则必须传递它们。必须传递不同的参数值以确认存储过程是否执行。调用此命令时,必须检查并验证数据库的性质和行为。
示例 − 如果存储过程是为了填充某个表而编写的,则必须检查表值。
我们有三种类型的 SQL 语句 −
- 数据操作语言 (DML)
- 数据定义语言 (DDL)
- 数据控制语言 (DCL)
DDL 语句用于定义数据库结构或模式。一些示例 −
CREATE − 在数据库中创建对象
ALTER − 更改数据库的结构
DROP −从数据库中删除对象
运算符用于在 SQL 语句中指定条件,并用作语句中多个条件的连接词。
- 算术运算符
- 比较/关系运算符
- 逻辑运算符
- 集合运算符
- 用于否定条件的运算符
Union 用于合并两个或多个 Select 语句的结果。但是它会消除重复的行。Union 是一个集合运算符。
Union 用于合并两个或多个 Select 语句的结果。但是它会消除重复的行
Union All 操作与 Union 类似,但它还会显示重复的行。
触发器用于维护数据库的完整性。要检查触发器是否已触发,您可以检查审计日志。
触发器不能按需调用。当在定义它们的表上发生相关操作(插入、删除和更新)时,它们将被调用。触发器用于应用业务规则、审计以及引用完整性检查。
首先,获取功能需求。然后,了解表结构、连接、游标和触发器、使用的存储过程以及其他参数。接下来,您可以编写一个测试用例,使用不同的值作为这些对象的输入。
数据库测试涉及测试用户不可见的后端组件。它包括数据库组件和 DBMS 系统,例如 MySQL 和 Oracle。
前端测试涉及检查应用程序及其组件(如表单、图形、菜单、报告等)的功能。这些组件是使用前端开发工具(如 VB.net、C#、Delphi 等)创建的。
执行数据库测试的过程与其他应用程序的测试类似。数据库测试可以用以下关键过程来描述 −
- 设置环境
- 运行测试
- 检查测试结果
- 根据预期结果进行验证
- 向相关利益相关者报告结果
各种 SQL 语句用于开发测试用例。用于执行数据库测试的最常见 SQL 语句是 select 语句。除此之外,还可以使用各种 DDL、DML、DCL 语句。
示例 −创建、插入、选择、更新等。
视图是一种本身并不真正存在的表,而是从一个或多个基表派生而来的表。换句话说,没有直接表示视图的存储文件,而是将视图的定义存储在数据字典中。
基表的增长和重组不会反映在视图中。因此,视图可以将用户与数据库中的更改隔离开来。因此解释了逻辑数据独立性。
它指定用户视图及其到概念模式的映射。
它是一个将一个表分解为多个表而不丢失任何信息的过程。进行规范化是为了实现以下目标 −
- 尽量减少冗余。
- 尽量减少插入、删除和更新异常。
索引是一种确定特定数据查找速度的技术。它用于查询性能优化。索引可以是以下类型 −
- 二进制搜索样式索引
- B 树索引
- 倒排列表索引
- 内存驻留表
- 表索引
SQL 是一种结构化查询语言,专门用于在规范化关系数据库结构上进行数据访问操作。
SQL 与其他传统编程语言的主要区别在于,SQL 语句指定应执行哪些数据操作,而不是如何执行这些操作。
存储过程用于执行用户定义的操作。存储过程可以有一组复合 SQL 语句。存储过程执行 SQL 命令并将结果返回给客户端。
PL/SQL 将游标用于所有数据库信息访问语句。该语言支持使用两种类型的游标:隐式和显式。
冷备份 − 冷备份是指在实例关闭时备份数据库文件、重做日志和控制文件。这是一个文件复制,通常从磁盘直接复制到磁带。您必须关闭实例才能保证副本的一致性。
如果执行了冷备份,则在数据文件丢失的情况下,唯一可用的选项是从最新备份中恢复所有文件。上次备份后执行的所有更改都将丢失。
热备份 − 某些数据库在制作文件备份时无法关闭,因此冷备份不是可用选项。对于这些类型的数据库,我们使用热备份。
SQL 子查询是一种同时查询两个或多个表的方法。子查询本身是包含在另一个 SQL SELECT 语句的 WHERE 子句中的 SQL SELECT 语句,并通过括在括号中分隔。一些子查询具有等效的 SQL 连接结构,但相关子查询不能通过连接复制
在这种情况下,您需要测试以下方面 −
- 多值依赖关系
- 功能依赖关系
- 候选键
- 主键
- 外键
您可以转到数据库并运行相关的 SQL 查询。在 WinRunner 中,您可以使用数据库检查点功能。如果应用程序提供查看功能,那么您可以从前端验证该功能。
数据驱动测试被定义为一种自动化测试过程,其中应用程序将使用多个测试数据进行测试。它比重新测试更简单、更容易,在重新测试中,测试人员只需坐在系统前面,从前端界面手动输入不同的新输入值。
一旦您执行测试用例并发现已经检测和修复的缺陷。使用不同的输入值重新执行相同的测试以确认原始缺陷已成功消除,这称为重新测试。
重新测试也称为数据驱动测试,但略有不同 −
重新测试 − 这是一个手动测试过程,而应用程序测试则使用整个新数据集完成。
数据驱动测试 − 这是一个自动化测试过程,其中应用程序将使用多个测试数据进行测试。它比重新测试简单易行,测试人员只需坐在系统前面并从前端界面手动输入不同的新输入值即可。
数据驱动测试有四种类型 −
- 通过键盘动态提交测试数据
- 通过 .txt、.doc 平面文件进行数据驱动测试
- 通过前端对象进行数据驱动测试
- 通过 excel 表进行数据驱动测试
性能测试是一种软件测试技术,用于确定系统在高负载下的速度、灵敏度和稳定性方面的表现。
执行数据库恢复测试时需要考虑以下关键点 −
数据库系统中发生更改或修改的时间跨度。
您希望执行恢复计划的时间段。
数据库系统中数据的敏感性。数据越重要,您就越需要定期测试软件。
以下工具用于生成测试数据 −
- 数据工厂
- DTM 数据生成器
- Turbo 数据
有两种类型的备份可供使用 −
物理备份 −物理备份包括使用第三方备份工具(如 Veritas Net Back、IBM Tivoli Manager 或使用 OS 实用程序的用户管理器备份)进行备份。
逻辑备份 − 数据库的逻辑备份包括备份逻辑对象(如表、索引、过程等)。
进行数据备份的常用工具是 Oracle Recovery Manager (RMAN),它是用于进行数据库备份的 Oracle 实用程序。
数据库恢复测试中执行以下操作 −
- 数据库系统测试
- SQL 文件测试
- 部分文件测试
- 数据备份测试
- 备份工具测试
- 测试日志备份
执行数据库安全测试是为了查找安全机制中的漏洞,也是为了查找数据库系统的漏洞或弱点。
执行数据库安全测试以检查以下方面 −
- 身份验证
- 授权
- 机密性
- 可用性
- 完整性
- 弹性
SQL 注入威胁是数据库系统中最常见的攻击类型,其中恶意 SQL 语句被插入数据库系统并执行以从数据库系统获取关键信息。这种攻击利用了用户应用程序实施中的漏洞。为了防止这种情况,应谨慎处理用户输入字段。
以下工具可用于执行数据库安全测试:Zed Attack Proxy、Paros、Social Engineer Toolkit、Skipfish、Vega、Wapiti 和 Web Scarab。
执行数据库测试时面临的常见挑战如下 −
- 测试范围太大
- 缩小测试数据库
- 数据库结构的变化
- 复杂的测试计划
- 对 SQL 有良好的理解