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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   今天理想汽车公布2023年第33周(8.7-8.13)销量,理想汽车的周销量达0.72万辆,稳居中国新势力品牌销量榜首。  理想汽车CEO李想表示,三季度每个月产能极限是3.4万辆/月,瓶颈零部件的产能在10月份解决,常州工厂会在国庆放假期间升级改造支撑扩产。  李想还提到,每周交付量的波动因素有两个:一个是车型之间的调整(比如新增理想L9 Pro),另一个是私人出口外贸车的持续增量。总之,三季度就是产多少交多少。  截至8月13日,理想汽车本月销量已达1.35万辆,向3万以上月销目标稳健迈进。  在豪华品牌排名中,理想汽车位居中国市场豪华品牌销量前五,是榜单中排名最高的中国品牌。在中国市...
            0 0 549
            分享
          •   Twitch 正尝试推出类似抖音的视频浏览方式,该公司正在测试一种名为“发现”(discovery)的功能,可以让用户在垂直滚动的视频流中浏览 Twitch 创作者的视频片段。  该功能将于周二开始向“部分用户”推出,Twitch 在 X 上发表了一篇文章介绍了这一功能。目前,“发现”功能只会显示水平方向的视频片段,Twitch 表示用户将在“功能发展”后看到垂直方向的视频片段。“发现”功能目前包括“精选”(featured)和“热门”(popular)两种类型的视频片段,创作者可以标记他们想要加入“精选”池的视频片段。  IT之家注意到,此前 Spotify、Amazon 和 Reddi...
            0 0 847
            分享
          •   1. 测试稳定性问题  理想情况下,我们希望每一个失败的测试用例都是由真正的缺陷引起的。实际情况中,用例失败的原因大多是一些其他的原因:  ·某个服务的版本部署的不对  ·测试执行机的硬盘满了,因为上次运行时写的log没清掉  ·数据库里有脏数据  ·测试用例写得有问题  ·测试运行时有人手工执行了一次定时任务,把流水捞走了  ·消息串了  ...  每次排查都是一堆这种问题,时间久了,开发和测试同学也就疲了。有些同学对失败的用例草草看一眼,就说这是一个“环境问题”,不再排查下去了。如此一来,很多真正的缺陷就被漏过了。  2. 测试稳定性三板斧  如何治理测试稳定性问题?很多人会...
            11 12 2216
            分享
          •    51testing软件测试圈报告征文活动已经结束啦,感谢各位的参与。   本次更文活动时间从2023年4月1日到2023年5月19日!   获奖名单   恭喜:斌宇、Carl_奕然、九哥,各获得测试书籍一本。   请获奖用户3个工作日内联系恬恬圈或天天圈领取奖励!   点击右侧可查看本期更文活动全部文章:“报告征文”   你是否想过我们软件测试行业现状是什么样子的?从未来的趋势来看,我们又该如何规划自己的职业发展道路呢?  《2022软件测试行业现状调查报告》,凝聚了行业内各方精英的心血和汗水,致力于为大家呈现行业现状、趋势和未来发展方向。  本次征文活动,旨在激发测试行业从业者的思考和...
            0 0 4637
            分享
          • 近期,电商下沉市场再起风云。抖音极速版APP日前在商城首页上线了“9块9特价”频道,被视为抖音向低线城市渗透、“杀入”下沉市场的举措,在电商行业引发一阵热议。记者发现,目前该频道内的商品覆盖家居日用、个护家清、服饰鞋包等八个品类,页面设有“爆款专区”“9.9元专区”和“4.9元专区”三大类目。其中,“9.9元专区”的商品价格大多为9.9元,最低在5元左右;“4.9元专区”则主要涵盖5元左右以内的商品,产品最低价仅1元。对抖音而言,这并非其首次“下沉”。在此之前,抖音APP便在商城首页上线了“低价秒杀”频道,内设“9.9封顶”和“19.9封顶”两大类目。抖音极速版“9块9特价”频道的上线,无疑凸...
            0 0 732
            分享
      • 51testing软件测试圈微信