【问题标题】:Python Nose unit testing using separate (sequential) Python processes使用单独(顺序)Python 进程的 Python Nose 单元测试
【发布时间】:2015-07-07 16:59:28
【问题描述】:

我们使用 Python Nose 对我们的 GUI 应用程序组件和应用程序逻辑进行单元测试。 Nose 在一个进程中运行所有测试,这对于应用程序逻辑来说不是什么大问题,但对于像 PyQt 这样复杂的 C++/Python 库来说,这是一个问题,因为 Qt 创建了“应用程序范围”状态,并且很难确保清理发生在正确的时间,这样每个测试方法都有一个“干净的 Qt slate”。

所以我宁愿让 Nose 为每个测试方法/函数(或至少标记为需要的那些)启动一个单独的 Python 进程。我意识到这会减慢测试套件的速度,但收益应该超过成本。我已经看到了 Insulate 和 Multiprocess 插件,但都没有这样做(如果发生崩溃,Insulate 只会启动单独的 proc——Multiprocess 只是尝试为 N 个内核使用 N 个进程)。

有什么建议吗?

【问题讨论】:

  • 在设置和拆卸功能中启动和退出QApplication 就足够了吗?
  • 这就是我们所做的,我发现这还不够,可能是因为我们正在使用一些后台线程和计时器。 @sebastian 有时会在测试方法返回后调用来自前面测试的回调。我必须深入挖掘才能弄清楚,运行应用程序本身时这不是问题,这就是为什么我希望为鼻子设置一个每次测试的进程,而不是深入研究只影响单元测试运行的原因在同一个过程中,而不是应用程序本身。

标签: python python-3.x pyqt nose pyqt5


【解决方案1】:

你可以试试nosetests --processes=1 --process-restartworker

【讨论】:

  • 谢谢,看起来很有希望。 Nosetests 完成了大约 50 种测试方法然后冻结,不知道为什么。在未给出这些参数时运行所有 500 次测试。赞成,因为在某些测试套件上这种方法可能有效,但我不知道它是否真的是解决方案。
猜你喜欢
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
相关资源
最近更新 更多