预提交测试是否应该使用大数据集,如果查询花费的时间太长,是否应该失败,或者使用一个小的测试数据库?

2024-04-25 04:10:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一些Python模块,它们使用mysql数据库插入一些数据并生成各种类型的报告。我正在进行测试驱动开发,目前为止我运行:

  • 有些测试针对临时数据库创建/更新/删除测试,临时数据库在每个测试用例结束时丢弃,并且
  • 有些报表生成测试只执行只读操作,主要是针对生产数据库的副本进行选择,这些测试是基于(在本例中是有效的)假设编写的,即我的数据库中的某些内容不会改变。你知道吗

一些SELECT操作运行得很慢,因此我的测试花费了超过30秒的时间,这破坏了测试驱动开发的流程。我可以看到两种选择:

  1. 只需将我的一小部分数据放入用于测试报表生成的生产数据库副本中,这样测试就可以足够快地进行测试驱动的开发(最适合我的时间不到3秒),或者我可以将测试视为失败。然后我需要做单独的性能测试。你知道吗
  2. 用与主测试数据库一样多的数据填充生产数据库副本,如果时间过长,则添加测试失败的计时代码。你知道吗

我不确定该采取哪种方法。有什么建议吗?你知道吗


Tags: 模块数据数据库内容报表报告时间mysql
2条回答

我两个都愿意。首先对小集合运行以确保所有代码都正常工作,然后对大数据集运行需要进行时间测试的内容,尤其是选择、搜索和报告。如果您在多个行集上执行插入、删除或更新操作,我也会针对大型行集测试这些操作。简单的单行操作查询不太可能花费太长时间,但是如果它们涉及大量的连接,我也会测试它们。如果查询在超时限制内不能在prod上运行,那就是失败,最好尽快知道,这样就可以在prod崩溃之前进行修复。你知道吗

针对真实数据进行测试的问题是,它包含大量重复值,并且没有足够的边缘情况。也很难知道期望值应该是什么(特别是当您的实时数据库非常大时)。哦,根据实时应用程序所做的,将数据用于测试或开发可能是非法的。你知道吗

一般来说,最好的方法是编写测试数据以配合测试。这是费力和无聊的,这就是为什么这么多的TDD从业人员厌恶数据库。但是如果您有一个活动的数据集(可以用于测试),那么就为您的测试获取一个非常精简的数据子集。如果您可以针对30条记录的数据集编写有效的断言,那么针对3万条记录的数据集运行测试只是浪费时间。你知道吗

但是可以肯定的是,一旦查询返回正确的结果,就要对查询进行一些性能测试。你知道吗

相关问题 更多 >