python - pre-commit 测试应该使用大数据集并在查询时间过长时失败,还是应该使用小型测试数据库?

标签 python sql mysql tdd automated-tests

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

  • 针对在每个测试用例结束时丢弃的临时数据库进行一些 CREATE/UPDATE/DELETE 测试,以及
  • 一些报告生成测试专门针对生产数据库的副本执行只读操作,主要是 SELECT,这些测试基于(在本例中有效)假设我的数据库中的某些内容不会改变。<

一些 SELECT 操作运行缓慢,以至于我的测试花费了 30 多秒,这破坏了测试驱动开发的流程。我可以看到两个选择:

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

我不确定该采用哪种方法。有什么建议吗?

最佳答案

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

关于python - pre-commit 测试应该使用大数据集并在查询时间过长时失败,还是应该使用小型测试数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2273414/

相关文章:

python - 命令 python setup.py egg_info 失败,错误代码为 1

python - 如果项目位于表中,则返回该项目在表中的位置。 [Py 3.4]

mysql - 使用 ORDER BY 时如何减少 sql 查询时间

php - codeigniter 3.0.1 中的数据库错误

sql - Bigquery - json_extract 从数组中提取所有元素

PHP-SQL : Combine two rows into single row with multiple columns

python - Selenium Python 下拉查找和选择不起作用

python - 将列表转换为二元组列表

java - JDBC SQL客户端工具推荐

sql - 在coalesce中使用select设置变量