数据库测试 - 面试问题
数据库测试包括进行数据有效性、数据完整性测试、与数据库相关的性能检查以及数据库中的过程、触发器和函数的测试。
执行数据库测试的原因有多种。由于后端系统负责存储数据并出于多种目的进行访问,因此需要对数据库进行数据完整性、验证和数据一致性检查。
需要执行数据库测试的一些常见原因如下 -
为了减轻对数据库后端调用的复杂性,开发人员增加了视图和存储过程的使用。
这些存储过程和视图包含关键任务,例如插入客户详细信息(姓名、联系信息等)和销售数据。这些任务需要在多个层面进行测试。
在前端执行的黑盒测试很重要,但很难隔离问题。后端系统的测试增加了数据的稳健性。这就是为什么数据库测试是在后端系统上执行的。
在数据库中,数据来自多个应用程序,并且数据库中可能存储有害或不正确的数据。因此,需要定期检查数据库组件。此外,应定期检查数据的完整性和一致性。
执行数据库测试时需要遵循的步骤如下 -
- 数据库中的数据必须经过验证。
- 验证约束是否得到维持。
- 必须检查过程的性能和触发器的执行。
- 必须检查事务的回滚和提交。
根据数据库的功能和结构,数据库测试可以分为以下几类 -
结构数据库测试- 它涉及表和列测试、模式测试、存储过程和视图测试、检查触发器等。
功能测试- 它涉及从用户的角度检查数据库的功能。最常见的功能测试类型是白盒测试和黑盒测试。
非功能测试- 它涉及负载测试、数据库风险测试、压力测试、最低系统要求以及数据库的性能。
用于执行存储过程测试的最常见工具是 LINQ、SP 测试工具等。
连接用于以某种逻辑方式连接两个或多个表。常见的连接类型包括:内连接、非等连接、外连接、自连接和交叉连接。
您可以将单个表与其自身连接起来。在这种情况下,您将使用同一个表两次。
步骤 1 - 连接到数据库
db_connect(query1 DRIVER {drivername};SERVER server_name;UID uidname; PWD password;DBQ database_name );
步骤 2 - 执行数据库查询 -
db_excecute_query (write the required query that is to execute); Specify the appropriate condition
步骤 3 - 使用以下命令断开数据库连接
db_disconnect(query);
使用输出数据库检查点,必须选择 SQL 手动查询选项。在这里,可以编写选择查询。
首先,检查存储过程的要求。下一步是与存储过程中提到的表进行比较,检查索引、联接、删除、更新是否正确。
接下来,执行以下任务 -
验证不同输入参数集的调用过程名称、调用参数和预期响应。
使用 TOAD 或 MySQL 或查询分析器执行该过程。
通过发送不同的参数重新执行可用的过程,并根据预期值检查结果。
完成该过程后,使用 WinRunner 自动化测试。
测试人员应使用 EXEC 命令调用数据库中的存储过程。如果需要任何参数,则必须传递它们。必须传递不同的参数值来确认存储过程是否执行。调用此命令时,它必须检查并验证数据库的性质和Behave。
示例- 如果编写存储过程来填充某个表,则必须检查表值。
我们有三种类型的 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 语句,包含在另一个 SQL SELECT 语句的 WHERE 子句中,并通过括在括号中进行分隔。某些子查询具有等效的 SQL 连接结构,但相关子查询不能通过连接重复
在这种情况下,您需要测试以下几个方面 -
- 多值依赖
- 函数依赖
- 候选键
- 主键
- 外键
您可以转到数据库并运行相关的 SQL 查询。在WinRunner中,可以使用数据库检查点功能。如果应用程序提供了查看功能,那么您可以从前端进行同样的验证。
数据驱动测试被定义为一种自动化测试过程,其中应用程序将使用多个测试数据进行测试。这比重新测试简单容易,测试人员只需坐在系统前面并从前端界面手动输入不同的新输入值。
一旦执行测试用例并找到已检测到并修复的缺陷。使用不同的输入值重新执行相同的测试以确认原始缺陷已成功消除称为重新测试。
重新测试也称为数据驱动测试,但略有不同 -
重新测试- 这是一个手动测试过程,而应用程序测试则使用全新的数据集完成。
数据驱动测试- 这是一个自动化测试过程,其中应用程序将使用多个测试数据进行测试。这比重新测试简单容易,测试人员只需坐在系统前面并从前端界面手动输入不同的新输入值。
有四种类型的数据驱动测试 -
- 通过键盘动态提交测试数据
- 通过 .txt、.doc 平面文件进行数据驱动测试
- 通过前端对象进行数据驱动测试
- 通过 Excel 表进行数据驱动测试
性能测试是一种软件测试技术,用于确定系统在繁重工作负载下的速度、灵敏度和稳定性方面的表现。
执行数据库恢复测试时要考虑以下要点 -
数据库系统发生变更或修改的时间跨度。
您希望执行恢复计划的时间段。
数据库系统中数据的敏感性。数据越重要,您就越需要定期测试软件。
以下工具用于生成测试数据 -
- 数据工厂
- DTM 数据生成器
- 涡轮数据
可以使用两种类型的备份 -
物理备份- 物理备份包括使用第 3方备份工具(例如 Veritas net back、IBM Tivoli Manager)或使用操作系统实用程序的用户管理器备份进行备份。
逻辑备份- 数据库的逻辑备份包括备份表、索引、过程等逻辑对象。
进行数据备份的常用工具是 Oracle Recovery Manager (RMAN),它是一种用于进行数据库备份的 Oracle 实用程序。
在数据库恢复测试中执行以下操作 -
- 数据库系统测试
- SQL 文件的测试
- 测试部分文件
- 数据备份测试
- 备份工具测试
- 测试日志备份
数据库安全测试的目的是发现安全机制中的漏洞,也可以发现数据库系统的漏洞或弱点。
执行数据库安全测试是为了检查以下方面 -
- 验证
- 授权
- 保密
- 可用性
- 正直
- 弹力
SQL注入威胁是数据库系统中最常见的攻击类型,其中恶意SQL语句被插入到数据库系统中并执行以从数据库系统获取关键信息。这种攻击利用了用户应用程序实现中的漏洞。为了防止这种情况,应仔细处理用户输入字段。
以下工具可用于执行数据库安全测试:Zed Attack Proxy、Paros、Social Engineer Toolkit、Skipfish、Vega、Wapiti 和 Web Scarab。
执行数据库测试时面临的常见挑战如下 -
- 测试范围太大
- 缩小测试数据库
- 数据库结构的变化
- 复杂的测试计划
- 对 SQL 有很好的理解