正在写入插件

nose2支持用于测试收集、选择、观察和报告等的插件。插件有两个基本规则:

你好世界

这是一个基本的插件。除了在测试运行开始时记录消息之外,它什么也不做。

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 命名空间。

食谱