数据测试指南

作者: python测试开发 | 来源:发表于2019-06-16 23:51 被阅读44次

    为什么要测试数据库?

    • 数据映射

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

    只要在应用程序的前端执行某个操作,就会在后端调用相应的CRUD(创建,检索,更新和删除reate, Retrieve, Update and Delete)操作。测试人员必须检查是否调用了正确的操作以及调用的操作本身是否成功。

    • ACID属性验证

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


    image.png

    原子性意味着交易失败或通过。这意味着即使事务的单个部分失败,也意味着整个事务都失败了。通常,这被称为“全有或全无”规则。

    一致性:事务将始终导致DB的有效状态

    隔离:如果有多个事务并且它们一次全部执行,则DB的结果/状态应该与它们一个接一个地执行相同。

    持久性:交易完成并提交后,没有外部因素(如断电或崩溃)能够改变它

    • 数据完整性

    对于任何CRUD操作,共享数据的更新和最新值/状态应出现在所有表单和屏幕上。不应在一个屏幕上更新该值,并在另一屏幕上显示较旧的值。

    当应用程序正在执行时,最终用户主要利用数据库工具促成的“CRUD”操作。

    C:创建 - 当用户“保存”任何新事务时,执行“创建”操作。
    R:检索 - 当用户“搜索”或“查看”任何已保存的事务时,将执行“检索”操作。
    U:更新 - 当用户“编辑”或“修改”现有记录时,将执行DB的“更新”操作。
    D:删除 - 当用户从系统中“删除”任何记录时,执行DB的“删除”操作。

    最终用户执行的任何数据库操作始终是以上四种之一。

    因此,设计数据库测试用例的方法包括检查所有位置的数据,看它是否始终相同。

    • 业务规则合规性

    数据库中更复杂意味着更复杂的组件,如关系约束,触发器,存储过程等。因此,测试人员必须用适当的SQL查询才能验证这些复杂的对象。

    测试内容(数据库测试清单)

    • 事务

    在测试事务时,确保它们满足ACID属性非常重要。

    这些是常用的语句:

    BEGIN TRANSACTION TRANSACTION#
    END TRANSACTION TRANSACTION#
    ROLLBACK TRANSACTION#
    SELECT * FROM TABLENAME <tables which involve the transactions>
    
    • 数据库模式

    数据库模式只不过是如何在数据库中组织数据的正式定义。测试它:

    确定数据库运行所依据的要求。比如:在创建任何其他字段之前创建的主键。外键应完全编入索引,以便于检索和搜索。以某些字符开头或结尾的字段名称。具有约束的字段,可以插入或不插入某些值。

    根据相关性使用以下方法之一:
    SQL Query DESC <table name>用于验证架构。
    用于验证各个字段及其值的名称的正则表达式
    SchemaCrawler之类的工具

    • 触发器
      当特定事件发生在某个表上时,可以自动指示执行一段代码(触发器)。

    例如,一名新学生加入了一所学校。这名学生正在上两门课:数学和科学。学生被添加到“学生表”中。一旦将学生添加到学生表中,触发器就可以将学生添加到相应的主题表中。

    测试的常用方法是首先独立执行嵌入在触发器中的SQL查询并记录结果。通过执行整个触发器来跟进此操作。比较结果。

    这些都在黑盒和白盒测试阶段进行了测试。

    白盒测试:桩和驱动程序用于插入或更新或删除将导致触发器被调用的数据。基本思想是在与前端(UI)集成之前,仅测试数据库。

    黑盒测试:
    a)自UI和DB以来,集成现已可用;我们可以以调用触发器的方式从前端插入/删除/更新数据。然后,可以使用Select语句检索DB数据,以查看触发器是否成功执行了预期的操作。

    b)测试它的第二种方法是直接加载调用触发器的数据,看它是否按预期工作。

    • 存储过程
      存储过程或多或少类似于用户定义的函数。这些可以通过Call Procedure / Execute Procedure语句调用,输出通常采用结果集的形式。

    它们存储在RDBMS中,可用于应用程序。

    这些也在以下期间测试:

    白盒测试:桩用于调用存储过程,然后根据预期值验证结果。
    黑盒测试:从应用程序的前端(UI)执行操作,并检查存储过程及其结果的执行。

    • 域约束
      默认值,唯一值和外键:

    执行执行数据库对象条件的前端操作;
    使用SQL查询验证结果。
    检查某个字段的默认值非常简单。它是业务规则验证的一部分。您可以手动执行,也可以使用工具。您可以手动执行一项操作,该操作将从前端添加除字段默认值以外的值,并查看是否会导致错误。

    检查唯一值可以完全按照我们对默认值的方式进行。尝试从UI中输入违反此规则的值,并查看是否显示错误。

    对于外键约束验证,使用直接输入违反约束的数据的数据加载,并查看应用程序是否限制它们。与后端数据加载一起,也会以违反约束的方式执行前端UI操作,并查看是否显示相关错误。

    数据测试活动

    数据库测试人员应关注以下测试活动:

    • 确保数据映射:

    数据映射是数据库中的关键方面之一,应该由每个软件测试人员严格测试。

    确保AUT及其DB的不同表格或屏幕之间的映射不仅准确,而且还符合设计文档(SRS / BRS)或代码。基本上,您需要验证每个前端字段与其对应的后端数据库字段之间的映射。

    对于所有CRUD操作,当用户从应用程序的GUI单击“保存”,“更新”,“搜索”或“删除”时,验证是否更新了相应的表和记录。

    您需要验证的内容:

    表映射,列映射和数据类型映射。
    查找数据映射。
    在UI处为每个用户操作调用正确的CRUD操作。
    CRUD操作成功。

    • 确保交易的ACID属性:

    DB事务的ACID属性指的是'原子性','一致性','隔离'和'耐久性'。必须在数据库测试活动期间对这四个属性进行适当的测试。您需要验证每个事务是否满足数据库的ACID属性。

    ACID属性

    image.png

    让我们通过下面的SQL代码举一个简单的例子:

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

    原子性测试将确保在该表上执行的任何事务都是全部或没有,即如果事务的任何步骤失败则不更新记录。

    一致性测试将确保无论何时更新A列或B列中的值,总和始终保持为100.如果总和不是100,则不允许在A或B中插入/删除/更新。

    隔离测试将确保如果两个事务同时发生并尝试修改acidtest表的数据,则这些跟踪将单独执行。

    持久性测试将确保一旦提交了此表上的事务,即使在断电,崩溃或错误的情况下,它也将保持不变。

    如果您的应用程序使用分布式数据库,则此区域需要更严格,彻底和敏锐的测试。

    • 确保数据完整性

    考虑应用程序的不同模块(即屏幕或表单)以不同方式使用相同数据并对数据执行所有CRUD操作。

    在这种情况下,请确保最新的数据状态反映在任何地方。系统必须在所有表单和屏幕上显示更新的和最新的值或此类共享数据的状态。这称为数据完整性。

    image.png

    验证数据库数据完整性的测试用例:

    检查是否所有触发器都已到位以更新参考表记录。
    检查每个表的主要列中是否存在任何不正确/无效的数据。
    尝试在表中插入错误数据并观察是否发生任何故障。
    检查如果在插入子节点之前尝试插入子节点(尝试使用主键和外键),请检查会发生什么。
    如果删除仍由任何其他表中的数据引用的记录,请测试是否发生任何故障。
    检查复制的服务器和数据库是否同步。

    • 确保实施的业务规则的准确性:

    今天,数据库并不仅仅意味着存储记录。实际上,数据库已经发展成为非常强大的工具,可以为开发人员提供足够的支持,以便在数据库级别实现业务逻辑。

    强大功能的一些简单示例是“参照完整性”,关系约束,触发器和存储过程。

    因此,使用DB提供的这些和许多其他功能,开发人员在数据库级别实现业务逻辑。测试人员必须确保实现的业务逻辑正确且准确。

    以上几点描述了测试DB的四个最重要的“What To”。现在,让我们继续讨论“如何”。

    参考资料

    如何测试数据库(逐步过程)

    • 准备环境
    • 运行测试
    • 检查测试结果
    • 根据预期结果进行验证
    • 将结果报告给各利益相关方
    image.png

    通常,SQL查询用于开发测试。最常用的命令是“选择”。

    Select * from <tablename> where <condition>
    

    除了Select之外,SQL还有3种重要的命令:

    DDL:数据定义语言
    DML:数据操作语言
    DCL:数据控制语言

    让我们看看最常用语句的语法。

    数据定义语言使用CREATE,ALTER,RENAME,DROP和TRUNCATE来处理表(和索引)。

    数据操作语言包括添加,更新和删除记录的语句。
    数据控制语言:处理授权用户操作和访问数据。 Grant和Revoke是使用的两个语句。

    授权语法:

    Grant select/update
    On <table name>
    To <user id1, user id2…useridn>;
    

    撤销语法:

    Revokeselect/update
    on <table name>
    from<user id1, user id2…useridn>;
    

    一些实用技巧

    • 自己写查询:

    为了准确地测试数据库,测试人员应该非常了解SQL和DML(数据操作语言)语句。测试人员还应该知道AUT的内部DB结构。

    您可以在各个表中组合GUI和数据验证,以获得更好的覆盖率。如果您使用的是SQL Server,则可以使用SQL查询分析器编写查询,执行查询并检索结果。

    当应用程序具有中小复杂度时,这是测试数据库的最佳且最强大的方法。

    如果应用程序非常复杂,那么测试人员可能很难或不可能编写所有必需的SQL查询。对于复杂查询,您需要开发人员的帮助。我总是推荐这种方法,因为它让你对测试充满信心,同时也增强了你的SQL技能。

    • 观察每个表中的数据:

    您可以使用CRUD操作的结果执行数据验证。当您知道数据库集成时,可以使用应用程序UI手动完成此操作。但是,当不同数据库表中存在大量数据时,这可能是一项繁琐且繁琐的任务。

    对于手动数据测试,数据库测试人员必须具备良好的数据库表结构知识。

    • 从开发人员处获取查询:

    这是测试数据库的最简单方法。从GUI执行任何CRUD操作,并通过执行从开发人员获得的相应SQL查询来验证其影响。它既不需要熟悉SQL,也不需要熟悉应用程序的DB结构。

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

    • 利用数据库自​​动化测试工具:

    有几种工具可用于数据测试过程。您应该根据自己的需要选择正确的工具并充分利用它。
    TOP DB Testing Tools you should check

    小姐

    利用在数据库上测试的所有这些特征,因素和过程,对测试人员的要求越来越高,以便在技术上熟练掌握关键数据库概念。尽管一些负面信念认为测试数据库会产生新的瓶颈并且需要大量额外支出 - 这是一个吸引大量关注和需求的测试领域。

    我希望本教程有助于关注为什么会这样,并且还为您提供了测试数据库的基本细节。

    如果您正在进行数据库测试,请告诉我们您的反馈意见并分享您的个人经验。

    相关文章

      网友评论

        本文标题:数据测试指南

        本文链接:https://www.haomeiwen.com/subject/htwnfctx.html