Pytest-2.4.0:新夹具功能/挂钩和错误修复

刚刚发布的Pytest-2.4.0带来了许多改进和许多错误修复,同时保持了插件和测试套件的兼容性,除了一些可能非常小的不兼容性之外。有关详细信息的完整列表,请参见下文。一些功能亮点:

  • 新型屈服式夹具 pytest.yield_fixture ,允许在fixture函数中使用现有样式上下文管理器。

  • 改进的PDB支持: import pdb ; pdb.set_trace() 现在可以在不需要事先禁用stdout/stderr捕获的情况下工作。也 --pdb 选项现在可以处理收集和内部错误,我们为IDE/插件引入了一个新的实验钩子来拦截调试: pytest_exception_interact(node, call, report) .

  • 较短的monkeypatch变量,允许将导入路径指定为目标,例如: monkeypatch.setattr("requests.get", myfunc)

  • 更好的UnitTest/Nose兼容性:现在只有在相应的设置方法成功时才调用所有的拆卸方法。

  • 在命令行选项上集成选项卡完成(如果有) argcomplete 配置好的。

  • 如果还指定了“原因”,则允许使用skipif/xfail直接使用布尔表达式。

  • 一个新的钩子 pytest_load_initial_conftests 允许类似的插件 pytest-django 在导入conftest文件之前影响环境 django .

  • 报告:根据发生的故障/错误或通过的所有内容,将最后一行涂成红色或绿色。

已更新文档以适应更改,请参见 http://pytest.org

要安装或升级pytest::

pip install -U pytest # or
easy_install -U pytest

多亏了所有帮助过的人,包括弗洛里斯·布鲁恩、布丽安娜·劳厄、安德烈亚斯·佩尔姆、安顿·范德内特、安纳托利·布班科夫、弗拉基米尔·凯莱舍夫、马修·阿戈皮安、罗尼·普凡恩施密特、克里斯蒂安·休纳和其他许多人。

愿你通过考试,

霍格尔克雷克尔

2.3.5和2.4之间的变化

已知的不相容性:

  • 如果从python2.7或更高版本调用--genscript,则只能获得一个在python2.7或更高版本上工作的独立脚本。使用python2.6还可以获得python2.5兼容版本。

  • 如果相应的设置方法失败,则不会调用所有XUnit样式的TearDown方法(nose样式、pytest样式、unittest样式),请参见下面的issue322。

  • pytest-plugin-unregister钩子从来没有被正确调用过,钩子也没有已知的实现,所以它被删除了。

  • pytest.fixture-decorated函数不再是生成器(即使用yield)。如果这一变化导致不可预见的现实问题,那么在2.4.1中可以逆转。但是,您始终可以编写和返回一个内部函数/生成器,并更改fixture使用者以迭代返回的生成器。这一变化是代替新的 pytest.yield_fixture 装饰工,见下文。

新特点:

  • 实验性地介绍一种新的 pytest.yield_fixture decorator,它接受与pytest.fixture完全相同的参数,但要求 yield 语句而不是 return statement 来自fixture函数。这允许在fixture函数中与“with-style”上下文管理器直接集成,并且通常避免注册终结回调,而将“after yield”视为拆卸代码。感谢Andreas Pelme、Vladimir Keleshev、Floris Bruynooghe、Ronny Pfanschmidt和许多其他人的讨论。

  • 如果还指定了“原因”,则允许使用skipif/xfail直接使用布尔表达式。重写跳过文档以推荐“条件为布尔值”,因为它可以防止在模块之间导入标记时出现意外。将条件指定为字符串将保持完全支持。

  • 报告:根据发生的故障/错误或通过的所有内容,将最后一行涂成红色或绿色。谢谢克里斯蒂安·休纳。

  • 使“import pdb;pdb.set_trace()”以本机方式工作(不再需要“-s”),使 pytest.set_trace() 只是一条捷径。

  • 修复问题181:--pdb现在还可以处理收集错误(以及内部错误)。这是通过一个轻微的内部重构和引入一个新的钩子来实现的。 pytest_exception_interact 钩子(见下一项)。

  • 解决问题341:引入新的IDES/终端实验钩子进行拦截调试: pytest_exception_interact(node, call, report) .

  • 新的monkeypatch.setattr()变量提供了一个较短的调用,用于修补模块中的类/函数:

    monkeypatch.setattr(“requests.get”,myfunc)

    将“请求”模块的“获取”功能替换为 myfunc .

  • 修复问题322:如果SetupClass失败,则不会运行TearDowNClass。感谢马修·阿戈皮安的首次修复。另外,让所有pytest/nose终结器模拟相同的一般行为:如果安装程序存在并且失败,则不要运行teardownx。这在内部引入了一个新方法“node.addFinalizer()”helper,它只能在节点的安装阶段调用。

  • 简化pytest.mark.parameterize()签名:允许传递一个csv分隔字符串来指定参数名。例如: pytest.mark.parametrize("input,expected",  [(1,2), (2,3)]) 与上一个一样有效: pytest.mark.parametrize(("input", "expected"), ...) .

  • 添加对设置模块/拆卸模块检测的支持,谢谢Brian Okken。

  • 通过使用“argcomplete”,集成选项的选项卡完成。感谢Anthon van der Neut的公关。

  • 将选项名更改为连字符分隔的长选项,但保持旧拼写向后兼容。py.test-h将只显示连字符版本,例如“-collect only”但是“-collect only”也将保持有效(出于向后兼容的原因)。多亏了Anthon van der Neut的实施和Hynek Schlawack的推动。

  • 修复问题308-允许在参数化时标记/xfail/跳过单个参数集。谢谢布丽安娜·劳尔。

  • 调用新的Experimental Pytest_Load_Initial_ConfTests钩子,允许第三方插件在加载ConfTest之前执行某些操作。

错误修复:

  • 修复问题358-捕获选项现在通过使用新的parser.parse已知的u args方法进行更正确的分析。

  • pytest现在使用argparse而不是optparse(感谢anthon),这意味着如果安装到python2.6或更低的环境中,将添加“argparse”作为依赖项。

  • 修复问题33:修复UnitTest/Pytest钩子交互错误的情况。

  • 在收集过程中正确处理nose.skiptest。谢谢安东尼奥·库尼,罗尼·普凡施密特。

  • 修复问题355:junitxml将name=“pytest”属性放入testsuite标记。

  • 修复问题336:插件中的自动使用夹具应该可以再次工作。

  • 修复问题279:改进标准数据类型断言失败时的对象比较,并识别collections.abc。多亏了布丽安娜·劳杰和马修·阿戈皮安。

  • 修复问题117:对is-package方法的断言重写器支持

  • 修复问题335:文档py.code.exceptioninfo()对象从pytest.raises()返回,谢谢Mathieu Agopian。

  • 从setup.py中删除隐式分发安装支持。

  • 修复问题305:写入PYC文件时忽略任何问题。

  • SO-17664702:调用fixture终结器,即使fixture函数部分失败(终结器不会总是在之前调用)

  • fix issue320-当与模块级函数混合时,修复fixture的类范围。谢谢阿纳特里·布班科夫。

  • 您可以指定“-q”或“-q q”以获得不同级别的“更安静”报告(感谢Katarzyna Jachim)

  • 修复问题300-在子目录中启动py.test时修复conftest加载顺序。

  • 修复问题123-对多个模块范围的arg参数化排序

  • 使sessionfinish hook在会话开始时使用与会话开始时相同的CWD上下文执行(有助于修复插件行为,该行为使用相对路径(如pytest cov)写入输出文件)

  • 修复问题316-正确引用文档中的收集挂钩

  • 修复问题306-清理-k/-m选项以分别匹配标记/测试名称/关键字。谢谢沃特·范·阿克伊。

  • 改进了python模块中doctest的计数——没有任何doctest项的文件将不再显示,doctest示例将作为单独的测试项计数。谢谢丹尼尔·贝里尼。

  • 根据发布的py-1.4.14修复问题245,该版本将py.io.dupfile修复为不使用模式的文件。谢谢Jason R.Coombs。

  • 当测试输出包含控制字符时修复JUnitXML生成,解决问题267,谢谢jaap broekhuizen

  • 修复问题338:荣誉——同样适用于设置/拆卸错误的TB样式。谢谢Maho。

  • 修复问题307-在示例中使用yaml.safe_load,谢谢Mark Eichin。

  • 更好的参数化错误信息,谢谢Brianna Lauher

  • pytest_terminal_summary(terminalreporter)钩子现在可以使用“.section(title)”和“.line(msg)”方法在测试运行结束时打印额外的信息。