• 0
  • 0
分享
  • 没有掌握这些,不用轻易说精通数据库测试——软件测试圈
  • 曼倩诙谐 2024-05-24 11:28:08 字数 3994 阅读 803 收藏 0

  我们平常使用的网站、APP和桌面客户端等软件,都离不开一个叫做数据库的东西的助力,数据库就像一个商店的仓库,如果没有这个仓库,那么商店就不能提供给顾客任何实质性的物品。目前数据库技术已经渗透到比如政务,金融,银行,医疗,军工,互联网行业等,而随着软件体量的增长,曾经被忽略的数据库功能、性能和安全都越来越急需得到更多的质量保障。

  相信很多测试小伙伴一开始做功能测试(黑盒测试)时,更多地关注的是前端UI、主要功能和逻辑的实现,而忽略了数据库的测试,或者说在数据库这块只是进行简单的增删改查检查就草草结束了。其实数据库要测试的方面有很多,今天就列举一些和大家分享。

  首先我们来认识一下目前主流的数据库

  项目开发中主要还是用的关系型数据库:

  比如MySQL,Oracle,MicrosoftSQLServer,DB2,MicrosoftAccess等。

  当然除了关系型数据库还有非关系型数据库:比如Redis,MongoDB等。

  关系型数据库:使用表格(表)来组织数据,表之间通过关系建立连接,数据以结构化的行和列存储,遵循固定的模式(模式定义在数据库的表结构中),使用表格的行和列,表格之间通过外键建立关系,每个表有固定的列,行必须符合表的结构。强调数据一致性,保证任何时刻数据库都处于一致的状态。

  非关系型数据库:使用各种数据模型,例如文档、键值对、列族、图等。数据可以以非结构化或半结构化的形式存储,而且不需要遵循固定的模式,数据结构更灵活,不同类型的数据可以存储在同一数据库中,而且每个记录可以有不同的字段,可能在一定程度上牺牲一致性以获取更高的性能和可用性。

  对于数据库的操作主要集中:

  一、增删改查模块

  增删改查相信大家都是会做的,这边我就捎带提一下即可,有一点倒是需要强调,就是要检查一下字段边界和数据量边界,测试在字段的边界值上插入、更新或删除数据。测试在大型数据集上执行操作的性能和正确性。

  二、数据库索引

  验证数据库中的索引是否被正确使用。测试索引对查询性能的影响,包括索引的创建和删除。

  1)测试基本的SELECT查询,包括涉及索引的查询和不涉及索引的查询。比较有索引和无索引情况下的查询性能,以确定索引对查询速度的影响。

  2)验证索引对于排序操作的性能影响。测试涉及ORDERBY子句的查询,以确保索引在排序操作中的有效性。

  3)如果使用了分区表,测试分区索引的性能。确保分区索引在查询时能够提供高效的性能。

  三、数据库视图

  测试数据库视图定义是否反映了用户的需求,视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

  1)检查视图的返回列是否与设计时定义的列一致。确保视图返回的数据类型符合预期。

  2)如果视图接受参数,测试不同参数组合的情况。确保参数化视图在各种情况下都能正确工作。

  3)测试视图与其他表或视图的连接是否正确。确保关联的数据能够正确地合并到视图中。

  四、空数据库测试

  将数据库表中所有的内容全部清空或者在系统喂数据前就进行测试,只留下一个管理员账户信息,检查系统的所有功能操作是否能够正常实现

  五、测试数据库中数据的正确性或者完整性

  测试数据库中数据的正确性和完整性是数据库测试中非常重要的一部分,涉及确保数据符合预期值、遵循业务规则和约束。

  1)测试数据库表中的主键约束,确保每个记录都具有唯一的主键值。验证外键约束,确保外键引用的数据在关联表中存在。

  2)确保设置了唯一性约束的字段中不允许重复值。确保设置了唯一性约束的字段中不允许重复值。

  3)验证设置了默认值的字段在没有明确提供值的情况下是否能够正确地使用默认值。确保默认值符合业务规则和预期。

  4)验证检查约束,确保字段值满足指定的条件。测试插入或更新数据时检查约束的行为。

  5)确保每个字段的数据类型符合设计规范。测试插入或更新数据时数据类型的强制性。

  6)如果数据库需要存储历史数据,测试历史数据的准确性和完整性。确保历史数据的时间戳和版本号等信息的正确性。

  7)测试更新或删除数据时,确保数据的相关性和完整性得到维护。验证关联数据的级联更新或删除行为。

  六、除了测试数据外,还要关注好数据库设计准则

  数据库设计是确保数据库能够有效存储和管理数据的关键步骤。数据库设计的准则有:明确定义业务需求、标识实体和关系、规范化数据模型、选择适当的数据类型、保持数据的完整性、考虑性能需求、建立适当的索引、灵活考虑数据库范式、考虑安全性、版本控制数据库模式、数据库文档设计、性能测试和优化、备份和恢复策略等等方面,当你成为测试经验丰富后,是可以从这些维度出发给开发提提数据库的设计建议了。

  七、数据库压力测试

  在日常操作中的某一时刻,是否能够可以有效的承受来自多个用户的并发访问,并保持正常工作的过程。这种情况,可以借助于相关的测试工具来实现。

  八、数据库SQL语句优化

  这点在面试过程也是可能被问到的,为了你能全方面掌握SQL优化方法,我这边尽量说得详细点。数据库SQL语句优化是提高数据库查询性能的重要步骤,以下是一些常见的SQL语句优化技巧:

  1)要使用索引:

  -在查询中使用适当的索引,以加速数据检索。确保索引覆盖查询,以避免回表操作。

  例:使用索引

  SELECT*FROMusersWHEREusername='john';

  避免全表扫描

  SELECT*FROMusersWHEREusername='john'ANDstatus='active';

  2)避免使用SELECT:

  只选择实际需要的列,而不是使用`SELECT*`,以减小数据传输量。

  例:只选择需要的列

  SELECTuser_id,usernameFROMusersWHEREstatus='active';

  3)使用JOIN时选择适当的连接方式:

  根据实际需要选择INNERJOIN、LEFTJOIN、RIGHTJOIN等连接方式,以减小结果集。

  例:使用INNERJOIN

  SELECTorders.order_id,customers.customer_name
  FROMorders
  INNERJOINcustomersONorders.customer_id=customers.customer_id;

  4)优化子查询:

  尽量避免在查询中使用过多的子查询,可以考虑使用JOIN或其他连接方式替代。

  例:使用JOIN替代子查询

  SELECTproduct_name
  FROMproducts
  WHEREcategory_idIN(SELECTcategory_idFROMcategoriesWHEREcategory_name='Electronics');

  使用JOIN

  SELECTproducts.product_name
  FROMproducts
  INNERJOINcategoriesONproducts.category_id=categories.category_id
  WHEREcategories.category_name='Electronics';

  5)合理使用索引列:

  在索引中选择最常用于过滤和排序的列。避免在大型表上创建过多的索引。

  例:在WHERE和ORDERBY中使用索引列

  CREATEINDEXidx_last_nameONemployees(last_name);
  SELECT*FROMemployeesWHERElast_name='Smith'ORDERBYhire_date;

  6)使用EXISTS替代IN:

  在子查询中,使用`EXISTS`代替`IN`,因为`EXISTS`通常在子查询找到匹配项后立即返回。

  例:使用EXISTS替代IN

  SELECTcustomer_name
  FROMcustomers
  WHEREEXISTS(SELECT1FROMordersWHEREorders.customer_id=customers.customer_id);

  7)合理使用数据库缓存:

  使用适当的缓存机制,例如缓存查询结果或使用缓存工具,以避免相同的查询频繁访问数据库。

  8)分页查询优化:

  对于分页查询,使用`LIMIT`和`OFFSET`来限制返回的行数,避免一次性检索大量数据。

  例:分页查询

  SELECT*FROMproductsORDERBYproduct_idLIMIT10OFFSET20;

  9)统计和分析执行计划:

  使用数据库提供的工具分析和优化查询执行计划,以便了解查询的瓶颈和潜在问题。

  例:查看执行计划

  EXPLAINSELECT*FROMordersWHEREcustomer_id=123;

  10)定期维护和优化:

  定期进行数据库表的统计、索引的重建和数据库的优化,以确保数据库保持高性能状态。

  这些优化技巧应根据具体的数据库系统和应用场景进行调整。对于复杂的查询和大型数据集,可能需要更深入的优化策略和工具。

  总结:数据库测试是确保数据库系统正常运行、数据一致性、性能可靠以及安全可靠的关键流程。通过进行全面的数据库测试,企业可以确保其数据库系统能够可靠地支持业务需求,并能够及时、准确地提供数据。这有助于提高系统稳定性,减少潜在的安全风险,以及优化数据库性能。



作者:有房车的直男    

来源:http://www.51testing.com/html/96/n-7800896.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 1、什么是Mybatis?Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,加载驱动、创建连接、创建statement等繁杂的过程,开发者开发时只需要关注如何编写SQL语句,可以严格控制sql执行性能,灵活度高。作为一个半ORM框架,MyBatis 可以使用?XML 或注解来配置和映射原生信息,将?POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。称Mybatis是半自动ORM映射工具,是因为在查询关联对象或关联集合对象时,需要手动编写sql来完成。 不像Hibernate这种全自动ORM映射工具,Hibernate查询关联对象或...
            13 13 2105
            分享
          • 作为知名的市场颠覆者之一,亚马逊在医疗健康领域正又一次遭遇失败。最初,亚马逊与摩根大通和伯克希尔哈撒韦共同启动了Haven项目,试图对医疗系统进行改革,但很快就宣布了终止。现在,亚马逊即将关闭远程护理服务AmazonCare。这家公司致力于在美国全国范围内为雇主解决远程医疗和初级保健问题,亚马逊也曾宣传该公司的服务正赢得越来越多的客户。这些情况是否真的证明了过去多年外界的普遍观点:与大多数行业相比,医疗行业更难颠覆?或许并非如此。不过这可能释放了一个信号,表明亚马逊在医疗健康行业的策略发生了变化。关于AmazonCare的关闭,最终问题可能是个简单的选择题:大公司,尤其是那些拥有大笔现金的公司...
            0 0 843
            分享
          • MySQL 官方驱动模块在 Python 语言里,有很多连接 MySQL 数据库的模块,且都能执行 SQL 语句,完成数据的增删改查操作。MySQL Connector 是 MySQL 官方的驱动模块,在兼容性上特别的好;不会有数据乱码的情况的发生,对 MySQL 8.0 的支持也很好。有很多的第三方的模块对 MySQL 8.0 这个版本兼容性非常的不好,特别是 MySQL 8.0 引入的新的安全机制。不少第三方模块由于没有更新,所以是没有办法连接到最新版本的 MySQL上面的,所以这里推荐大家使用 “MySQL Connector” 这个 MySQL 官方的驱动模块,毕竟是官方,更新的速度还...
            0 0 5103
            分享
          • 虽然现在 Git 已经很普及,但是我相信用 SVN 的公司仍然不少,那么作为 SVN 配置管理员的话,就不可避免的涉及到账号维护的问题,今天我们就说说如何通过 Python 脚本实现用户的快捷维护。 如果手动维护用户,一般需要三个步骤:1.手动添加用户2.手动设置属组3.通知用户设置结果 使用脚本后也是三步,但是效率却大大提升:1.输入用户名2.输入要设置的组名3.按下回车,搞定 这里面设置用户和属组是关键点,也是我们需要自动化起来的操作,下面分别给出实现的代码: def add_user(user_name): """如果用户不存在则调用htpasswd.exe添加用户""" ...
            1 2 2456
            分享
          • web兼容性概述定义:软件兼容性测试是指检查软件之间能否正确地进行交互和共享信息。随着用户对来自各种类型软件之间共享数据能力和充分利用空间同时执行多个程序能力的要求,测试软件之间能否协作变得越来越重要。软件兼容性测试工作的目标是保证软件按照用户期望的方式进行交互。平台的兼容性:硬件平台:pc手机pad等,操作系统:AndroidiOSWindowsmaclinux。浏览器:谷歌浏览器火狐浏览器IE浏览器等。web兼容性测试:以浏览器兼容性为主,操作系统和分辨率为辅。明确需求:根据用户需求去找浏览器,市场占有率的浏览器(浏览器最近的三个版本)操作系统:安装虚拟机。浏览器市场占有率浏览器内核阵营操...
            0 0 934
            分享
      • 51testing软件测试圈微信