如何调试此缓冲文件队列?

时间:2012-06-08 17:17:40

标签: python debugging testing queue

我有一个队列对象,它在我的项目中扮演着非常重要的角色,我无法负担任何错误。

它的想法就像内置Queue,它的基类,但它存储数据,或至少存储在文件中的一部分以保存内存。我决定将其中一些保留在内存中,因为这样可以加快速度。我已经放了代码here,它可能比我解释它更容易看到它

想要这样做似乎很奇怪,但是我需要排队很多工作,排队的速度比我通过的速度要快得多,而且如果我使用标准,它将使用太多的内存{ {1}}。我不能只在Queue上放一个maxsize并阻止工作人员将事情放入队列中,因为我想知道要尽快处理的数据总量。我也不能先计算总数,但不排队,然后通过输入Queue返回,因为每次我查看数据时总数会有所不同,最后总数不匹配

我的问题是如何彻底测试这一点以确保没有项目丢失或更重要的是当缓冲区或文件中仍有项目时,或者在调用完成后并且队列是空。

有些东西似乎很容易测试并设置单元测试,当你知道某些输入应该是什么输出时,但是测试这样的东西我不能确定一个有效的方法。有可能用单元测试来测试这种东西吗?

我已经设置了一个测试程序,可以根据不同数量的项目以不同的速度放置和获取项目,看起来很好,但我已经看到了Queue上带有项目阻塞的证据仍在队列中,所以我认为有一个问题。

我可以彻底测试这个以找到任何剩余的错误或接近确定它没有错误的最佳方法是什么?

修改

可以生成一些类似于我在下面的代码中使用的测试数据,我在项目的某些条件下只有文件的校验和,有时候它是.get所以我只生成了一些在下面的代码中尝试模拟

的时间
None

1 个答案:

答案 0 :(得分:2)

我写了一些类似的组件。

我验证其正确性的策略通常是三方面的:

  1. 查看代码。在我写完这些代码之后的一两天,我会尝试彻底检查代码,特别注意我认为可能有错误的地方。如果可能的话,我还会请同事审核。
  2. 单元测试,用于验证其在"显而易见的情况下表现良好。案件和边缘案件。他们帮助确认没有愚蠢的错误,并帮助防范未来的回归......但我一般不希望发现令人惊讶的错误。
  3. 压力测试的脚本。这个脚本会产生一堆线程,"随机"执行读写操作,确保没有任何东西爆炸。我的第一个版本通常是完全随机的,但随着我的进一步发展,我会为它添加一些智能。我会确保"随机"读取/写入将偏向于触发复杂的代码路径(例如,在您的示例中,偏向于溢出到gzip文件,然后从该文件读回),我将跟踪应该在队列中的项目数量(检测错误的阻塞操作),我将改变读者和作者的数量。一旦我可以让这个脚本运行一段时间没有任何崩溃,我相信我的队列是好的。
  4. 到目前为止,我用这种方法验证过的队列在制作过程中一直坚如磐石。