正在写入插件
nose2支持用于测试收集、选择、观察和报告等的插件。插件有两个基本规则:
插件类必须子类
nose2.events.Plugin
.插件可以实现 钩参考 .
你好世界
这是一个基本的插件。除了在测试运行开始时记录消息之外,它什么也不做。
import logging
import os
from nose2.events import Plugin
log = logging.getLogger('nose2.plugins.helloworld')
class HelloWorld(Plugin):
configSection = 'helloworld'
commandLineSwitch = (None, 'hello-world', 'Say hello!')
def startTestRun(self, event):
log.info('Hello pluginized world!')
若要查看此插件的运行情况,请将其保存到可导入的模块中,然后将该模块添加到 plugins
关键在 [unittest]
nose2加载的配置文件的节,例如 unittest.cfg
. 然后运行nose2::
nose2 --log-level=INFO --hello-world
您应该在第一个点出现之前看到日志消息。
正在加载插件
如上所述,要使nose2找到一个插件,它必须位于可导入的模块中,并且该模块必须列在 plugins
关键在 [unittest]
nose2加载的配置文件的节:
[unittest]
plugins = mypackage.someplugin
otherpackage.thatplugin
thirdpackage.plugins.metoo
如你所见,插件 模块 列出,每行一个。这些模块中的所有插件类都将被加载——但不一定是活动的。通常,插件不会在没有看到命令行标志的情况下激活自己(“寄存器”),或者 always-on = True
在他们的配置文件部分。
命令行选项
鼻2用途 argparse 用于命令行参数分析。插件可以启用命令行选项,将它们注册为活动的,或者使用参数或标志控制它们的操作。
最基本的事情是设置插件的 commandLineSwitch
属性,它将自动添加注册插件的命令行标志。
要添加其他标志或参数,可以使用插件方法 nose2.events.Plugin.addFlag()
, nose2.events.Plugin.addArgument()
或 nose2.events.Plugin.addOption()
. 如果没有足够的灵活性,可以通过访问 self.session.argparse
或通过访问插件选项组 self.session.pluginargs
.
但请注意 大多数 插件的配置应该通过配置文件选项完成,而不是命令行选项。
配置文件选项
插件可以通过设置配置文件的 configSection
属性。所有插件,不管它们是否指定了配置节,都有一个 config
持有的属性 nose2.config.Config
实例。如果插件没有指定配置节,或者加载的配置文件没有包含该节,则该值将为空。
插件应该从其配置属性中提取用户的配置选择 __init__
方法。想要使用nose2的插件 Sphinx 自动文档本身的扩展 must 这样做。
配置文件选项可以提取为字符串、整数、布尔值或列表。
您应该为所有配置选项提供合理的默认值。
指南
事件
nose2的插件API基于unittest2的API plugins
分支机构(正在开发中)。它在一个主要方面不同于鼻子:它通过钩子。当nose传递各种参数时,nose 2 总是传递一个事件 . 事件列在 事件引用 .
关键是: event attributes are read-write . 除非在钩子文档中另有说明,否则可以为任何事件属性设置一个新值,以及 这会有所帮助的 . 插件和nose2系统将看到这个新值,要么使用它来代替事件中最初设置的值(例如:报告流或测试执行器),要么使用它来补充它们在其他地方找到的内容(例如:测试加载事件上的外部测试)。
“处理”事件
许多钩子给插件一个完全处理事件的机会,绕过其他插件和任何核心nose2操作。为此,插件设置 event.handled
若为true,则通常从hook方法返回适当的值。适当的值随钩子的不同而变化,有些钩子 不能 以这种方式处理。但即使对于处理事件并不能停止所有处理的钩子,它 will 停止随后加载的插件看到事件。
登录中
nose2使用标准库中的日志类。为了方便用户查看调试消息,插件应该使用 logging.getLogger()
在 nose2.plugins
命名空间。
食谱
编写监视或控制测试结果输出的插件
实现
report*
钩子方法,特别是当您想要输出到控制台时。如果输出到文件或其他系统,则可以实现testOutcome()
相反。编写处理异常的插件
如果只想将某些异常作为跳过或失败而不是错误来处理,请参见
nose2.plugins.outcomes.Outcomes
这提供了一个简单的方法。否则,执行setTestOutcome()
改变测试结果。编写一个插件,将详细信息添加到错误报告中
实施
testOutcome()
把你的额外信息event.metadata
,然后执行outcomeDetail()
提取并添加到错误报告中。实例:
nose2.plugins.buffer.OutputBufferPlugin
,nose2.plugins.logcapture.LogCapture
编写从python模块以外的文件加载测试的插件
实施
handleFile()
.编写从python模块加载测试的插件
至少实施
loadTestsFromModule()
.警告
这里要注意的一点是,如果您将测试作为动态生成的测试用例返回,或者将测试用例类的实例定义为 在任何地方 但是模块被加载,你 must 使用
nose2.util.transplant_class()
使测试用例类看起来是在该模块中产生的。否则,模块级夹具将无法用于该测试,并且如果没有或似乎没有定义测试用例,则可以完全忽略模块。编写打印报告的插件
实施
beforeErrorList()
,beforeSummaryReport()
或afterSummaryReport()
编写选择或拒绝测试的插件
实施
matchPath
或getTestCaseNames
.