【问题标题】:Framework for regression testing of numerical code数字代码回归测试框架
【发布时间】:2016-01-24 23:24:21
【问题描述】:

我的 python 代码正在执行相当复杂的数值计算,在许多情况下,我无法提供已知的解决方案来启用单元测试(尤其是对于中间结果)。

但是,我发现通过使用以下工作流程执行回归测试,我可以用鼻子捕捉到很多错误:

  1. 编写测试代码解决一些比较小的问题

  2. 运行一次,检查结果(通常以 matplotlib 图的形式),并通过与分析结果或其他数值软件或物理直觉进行比较来确定结果在可接受的数值精度范围内是正确的。

  3. 将生成的 numpy 数组保存到文本文件中作为参考(FWIW 我避免使用 numpy 的保存例程作为 this bug 的解决方法,但由于这已在发布版本中修复,我认为我可以使用它们现在)。

  4. 测试代码执行计算,并与使用numpy的assert_allclose从文件中读取的参考数据进行比较。

测试函数的编写方式是默认执行测试,但是通过传递参数的非默认值,我可以绘制结果并在必要时覆盖参考文件。参考文件已签入 git,因此在不注意的情况下意外覆盖测试值的风险很小。

但是,我发现自己编写了很多样板代码来实现上述功能,这超过了实际的测试代码本身。清理它会更容易增加测试覆盖率。

是否有一些 Python 测试框架或鼻子插件可以轻松自动化上述工作流程?

【问题讨论】:

    标签: python numpy testing numerical-methods nose


    【解决方案1】:

    几个月前,我编写了nrtest 实用程序,试图简化此工作流程。听起来它也可能对您有所帮助。

    这里是一个快速概述。每个测试由其输入文件和预期的输出文件定义。执行后,输出文件存储在可移植的基准目录中。然后第二步将该基准与参考基准进行比较。最近的更新启用了用户扩展,因此您可以为自定义数据定义比较函数。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-17
      • 1970-01-01
      • 2023-03-19
      • 2010-11-06
      • 2012-05-11
      • 1970-01-01
      相关资源
      最近更新 更多