案例实践:一篇文章教你学会数据库测试

上一篇 / 下一篇  2022-11-14 17:21:46 / 个人分类:数据库

如今,使用Android技术以及许多智能手机应用程序,计算机应用程序变得更加复杂,前端越复杂,后端就越复杂。加我VX:atstudy-js 回复“测试”,进入 自动化测试学习交流群~~

因此,了解数据库测试、有效地验证数据库,以确保数据库的安全性和质量就显得尤为重要。

在本文中,您将了解有关数据测试的所有信息——为什么、测什么以及如何测。

无论是网络、桌面还是移动、客户端服务器、点对点、企业或个人业务、后端等都需要数据库,同样,医疗保健、金融、租赁、零售、邮寄应用程序数据库始终在幕后运行。

随着应用程序复杂性的增加,对更强大、更安全的数据库的需求出现了。同样,对于交易频率较高的应用程序(例如银行或金融应用程序),功能齐全的数据库工具的必要性是相辅相成的。

如今,我们拥有传统数据库无法处理的庞大而复杂的大数据

市场上有几种数据库工具,例如MS-Access、MS SQL Server、SQL Server、Oracle、Oracle Financial、MySQL、PostgreSQL、DB2、Toad、Admirer 等。

这些工具在成本、稳健性、功能方面各不相同,这些中的每一个都有其自身的优点和缺点。

测试数据库的特性

下面,我们将看到验证数据库的以下方面:

数据映射

在软件系统中,数据经常从 UI(用户界面)到后端数据库来回传输,反之亦然。因此,这些是需要注意的一些方面:

1)检查 UI/前端表单中的字段是否与 DB 表中的相应字段映射一致。通常,此映射信息在需求文档中定义。

2)每当在应用程序的前端执行某个操作时,都会在后端调用相应的 CRUD(创建、检索、更新和删除)操作。测试人员必须检查是否调用了正确的操作以及调用的操作本身是否成功。

ACID属性验证

数据库执行的每个事务都必须遵守原子性、一致性、隔离性和持久性这四个属性。

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级别实现业务逻辑,测试人员必须确保实现的业务逻辑是正确的并且可以准确地工作。

以上几点描述了测试数据库的四个最重要的“做什么”,现在,让我们继续“如何”部分。

如何测试数据库

通用测试过程测试数据库与任何其他应用程序没有太大区别,以下是核心步骤:

准备环境

运行测试

检查测试结果

根据预期结果进行验证

将结果报告给各个利益相关者

通常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知识,也不需要很好地了解应用程序的数据库结构。

但是这种方法需要谨慎使用,如果开发人员给出的查询在语义上是错误的或没有正确满足用户的要求怎么办?该过程将无法验证数据。

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

有多种工具可用于数据测试过程。您应该根据自己的需要选择正确的工具并充分利用它。

结论

有了在数据库上测试的所有这些特性、因素和流程,对测试人员在技术上精通关键数据库概念有很大帮助。

添加微信:atstudy-js  或者扫描下方二维码,备注“博客”邀请你进入Python自动化测试学习交流群~


TAG:

 

评分:0

我来说两句

Open Toolbar