如何使鼻子将案例输出记录到单独的文件中?

时间:2012-12-29 00:00:00

标签: python testing nose

我正在使用鼻子运行一堆测试用例。 我想将每个案例的输出记录到单独的文件中,并且知道每个案例的结果[成功/失败]。不幸的是,我无法弄清楚如何用鼻子做到这一点。任何人都可以提供一些线索吗?谢谢

1 个答案:

答案 0 :(得分:5)

首先,这听起来像异常使用,并且可能表明您应该重新考虑您的测试方案。

我可以想出几种方法来解决这个问题。最简单的方法是让每个测试记录本身而不是让鼻子为你做。如果您只进行了一些测试,或者只关心记录一些测试的结果,那肯定是这样做的。

更复杂,更通用的方法是write a nose plug-in,记录每个测试完成后的结果。为此,您需要编写一个实现afterTest()方法的插件。

from nose.plugins import Plugin
import datetime

class SeparateReports(Plugin):
  "Log the results of each test into a separate file."
  def afterTest(self, test):
    logname = test.id() + '.log'
    success = test.passed
    date = datetime.datetime.now()
    # print logname, datetime.datetime.now(), success
    with open(logname, 'a') as log:
        log.write("%s: %s\n" % (date, success))

这将附加到以特定测试命名的日志文件为日期戳,如果成功则为True,对于失败则附加为False。几个笔记:

  • 有关已打印结果的示例,请参阅注释掉的行。
  • 此插件必须为registered by nose; see the docs
  • 注册后,必须启用该插件;使用命令行选项 - with-separatereports (根据插件名称自动生成)。
  • 这会很慢,因为每次测试都会触及文件。您可能需要一个打开的sqlite DB或类似的东西。