繁体   English   中英

SQL测试最佳实践

[英]SQL testing best practice

除了自动测试之外,SQL测试(存储过程,视图,查询,触发器...)的最佳实践是什么? 大多数情况下,查询有效或返回数千行,因此检查它们有点困难。 我想知道您通常如何测试SQL查询。 您能指出我一个很好的(在线)参考资料吗?

尝试消除额外的变量。

方法:

  • 每次测试应仅测试一个功能(视图,存储过程等)
  • 使用已知的测试数据(它应该来自真实环境(而不是真实环境)
  • 使用最少的测试数据即可充分测试该功能。

对于插入,更新,删除,我在运行proc之前和之后检查表的状态,以查找满足插入更新或删除条件的记录。 因此,如果我要添加7条记录,则它们不应该事先在表中,而应该在表后。

具有数千条记录的选择可能会更加困难。 真正了解您的数据以及您期望获得的结果无可替代。 例如,我知道某个客户大约有2000名销售代表。 如果我运行一个查询,其中应该包含所有代表,而其中只有大约1000个,那么我知道有些问题。 有时,我会将查询结果放在临时表中,这样就可以对其进行统计。 如果我正在做一个与会者报告,那么根据我的查询,可以看到该报告期内该报告中有200个不同的会议。 如果我仅查看该表并看到在同一时间段内有350个会议,那么我会去查看什么是排除会议,通常会查看一个或多个被排除的会议的详细信息以及与之相关的表,以了解其原因没有出现。 通常,您会发现需要说明的状态或某种错误数据。

我还寻找重复的记录。 如果我希望每个会议有一个记录,而同一个会议有两次记录,那么我知道联接表之一的记录比查询条件要多。

我经常要求我们的一些运营人员也查看报表查询的结果。 因为它们比我更接近使用数据,所以它们经常会发现我没有的东西。

另一种技术是将测试的where子句故意限制为较小的数据子集,您可以手动检查这些数据子集,以查看是否期望得到的结果。 如果您有大量计算或复杂计算,这将特别有用。 每当我进行复杂的计算时,我都会查看一种典型情况下的原始数据并根据原始数据手动计算公式,然后可以检查查询中的公式是否正确。

我首先通过将触发器编写为常规查询进行测试(首先创建并填充#inserted和#deleted的临时表之后)。 我确保将多个记录添加到我的临时表中,因为每个触发器都必须能够正确处理多个记录的插入/更新或删除。 然后,我编写代码以显示before状态和after状态,并将其全部放入事务中,以便在测试时将其回滚。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM