ipython笔记本中的单元测试。

ipytest的Python项目详细描述


ipytest-ipython笔记本中的单元测试

用法 |全局状态 |更改 |相关软件包 |参考 |开发 |传统功能 |许可证

有时在伊普顿的快速实验会变得越来越大,你会发现自己缺乏 单元测试。本模块旨在使ipython笔记本中的测试代码变得容易。AT 它的核心是在 笔记本电脑环境。它还可以将测试转移到 适当的python模块很容易。

安装:pip install ipytest

功能:

  • 支持笔记本电脑内部的pytest 口哨声)
  • 通过magics和自动代码转换与ipython紧密集成

用法

有关用法,请参见示例笔记本或 下面是核心api。

建议导入ipytest的方法是:

importipytestipytest.config(rewrite_asserts=True,magics=True)__file__="INSERT YOUR NOTEBOOK FILENAME HERE"

在当前单元格中执行的后续测试可以如下所示:

%%run_pytest[clean]-qqdeftest_example():assert[1,2,3]==[1,2,3]

此命令将首先删除任何先前定义的测试,执行单元格 然后运行pytest。有关 可用功能。

全局状态

在笔记本中使用pytest时,有两个全局状态源:

  1. pytest将找到任何定义过的测试函数。这种行为会导致 将测试函数重命名为以前的函数时出现意外结果 定义在内核中仍然可用。ipytest发布 clean_test删除此类实例的函数。 此外,魔术会清除任何 以前定义的测试。
  2. python的模块系统缓存导入,因此充当全局状态。 要测试任何模块的最新版本,该模块需要 重新装入。ipytest提供重新加载功能。这个 autoreload扩展ipython也有帮助。测试本地 包,建议将它们作为开发包安装,例如, pip安装-e.
  3. < > >

    更改

    注意:在development分支上跟踪开发。

    • 0.7.1
      • 修复pytest>;=5.0.0的断言重写问题
    • 0.7.0
      • 添加选项以在单独的线程中运行测试。此更改允许测试 使用pytest_asyncio插件的异步代码
      • ipytest.config(…)添加适当的签名并显示当前 设置为代表。
    • 0.6.0:正式删除Python2支持。当ipytest标记为 在Python2和Python3上工作时,此语句没有经过测试,而且很可能 不是真的。此更改仅记录当前状态。
    • 0.5.0
      • 修复通过magics在ipython>;=7
      • 中重写断言的问题
      • 添加对在测试错误(set)上引发运行时错误的支持 ipytest.config.raise_on_error=true
      • 添加对设置基参数的支持(setipytest.config.addopts=[]
      • 添加配置设置以启用magics(设置ipytest.config.magics=true)。
      • 添加配置设置以创建临时文件而不使用 笔记本文件名(设置ipytest.config.tempfile_fallback=真)。
      • 允许通过调用 配置对象(ipytest.config(…))。
      • 添加ipytest.running_as_test()以检测是否执行笔记本 作为测试。
    • 0.4.0:添加对自动ast转换的支持,不推荐使用非pytest api。
    • 0.3.0:更改clean_测试的默认模式以匹配pytest发现
    • 0.2.2:添加对当前pytest版本的断言重写的支持
    • 0.2.1:添加ipython magics以简化测试执行
    • 0.2.0:支持在笔记本电脑中使用Pytest
    • 0.1.0:支持运行unittest.functiontestcaseunittest.testcasesdoctests

    相关套餐

    ipytest设计用于在交互式笔记本中运行测试 会话。还有其他一些软件包旨在使用笔记本作为测试工具 自身,例如,通过比较运行所有单元格和 以前运行的输出。这些软件包包括:

    • nbval处于活动状态 保持.它还用于ipytest
    • 的集成测试
    • pytest ipynb似乎不再是 最新的承诺是2016年3月。
    • …/LI>

    如果我遗漏了一个已打包或未分类的包,请创建一个问题。

    参考

    ipytest.run

    ipytest.run(*args,module=none,filename=none,plugins=),return_exit_code=false)

    使用pytest执行通过的模块中的所有测试(默认为main)。

    参数

    • 参数任意): 传递给pytest的其他命令行选项
    • 模块任意): 包含测试的模块。如果未给出,则使用main
    • 文件名任意): 包含测试的文件的文件名。一定是真的 文件,例如笔记本名称,因为它的存在将由 PyTest.如果未给定,则传递模块的文件属性 将被使用。
    • 插件任意): 传递给pytest的其他插件。

    %%运行pytest…

    ipython magic首先执行单元格,然后执行ipytest.run()。 在魔行上传递的任何参数都将传递给pytest。 要注册magics,请先运行ipytest.config.magics=true

    例如:

    %%run_pytest-qqdeftest_example():...

    %%运行pytest[clean]…

    %%run_pytest相同,但会清除以前找到的所有测试,即仅 执行当前单元格中定义的测试。 要注册magics,请先运行ipytest.config.magics=true

    %%rewrite_断言

    使用pytest重写当前单元格中的任何断言,而不运行测试。 要获得最佳结果,请使用run pytest来运行测试。 要注册magics,请先运行ipytest.config.magics=true

    例如:

    %%rewrite_assertsdeftest_example():...

    ipytest.config

    配置ipytest。支持以下设置:

    • ipytest.config.rewrite_asserts(默认值:false):启用ipython ast 全局转换以重写断言。
    • ipytest.config.magics(默认值:false):如果设置为true则注册 我相信魔法。
    • ipytest.config.clean(默认值:[tt]est*):用于清除的模式 变量。
    • ipytest.config.addopts(默认:):pytest命令行参数 之前挂起到每个pytest调用。例如设置 ipytest.config.addopts=['-qq']将用最少的 冗长。
    • ipytest.config.raise_on_error(默认值:false):如果true,则不成功 调用将引发运行时错误
    • ipytest.config.tempfile_fallback(默认值:false):如果true,则临时 当无法确定有效的文件名时,将创建文件作为回退。
    • ipytest.config.run_in_thread(默认值:false):如果true,pytest将是 运行单独的线程。测试异步时需要这种运行方式 使用pytest_asyncio编写代码,因为它启动了一个单独的事件循环。

    要同时设置多个参数,还可以调用config对象,如下所示:

    ipytest.config(rewrite_asserts=True,raise_on_error=True)

    ipytest.退出代码

    上次Pytest调用的返回代码。

    ipytest.clean_测试

    ipytest.clean_测试(模式=无,项目=无)

    删除名称与给定模式匹配的测试。

    在ipython中,所有评估的结果都保存在全局变量中 除非明确删除。此行为意味着在重命名测试时 如果没有删除,以前的定义仍然会被找到。这种方法 旨在简化此过程。

    有效的模式是从包含带有调用的测试的单元格开始 要清除_测试,请定义所有测试用例,最后调用run_测试。 这样重命名测试就可以按预期工作。

    参数:

    • 模式:用于匹配要删除的测试的全局模式。
      • items:包含测试的globals对象。如果没有给出,则: 全局对象由调用堆栈确定。

    ipytest.reload

    ipytest.reload(*mods)

    重新加载作为字符串传递的所有模块。

    当在外部模块和 笔记本电脑。

    用法:

    reload("ipytest._util", "ipytest")
    

    ipytest.running_as_test

    ipytest.running_as_test()

    检查笔记本是否作为测试执行。

    当将笔记本作为集成测试运行到 确保运行时不太长。

    用法:

    model.fit(x, y, epochs=500 if not ipytest.running_as_test() else 1)
    

    开发

    执行ipytestrun的单元测试

    pipenv sync --dev
    pipenv run test
    

    在提交之前,请执行pipenv run precommit以更新文档, 格式化代码并运行测试。

    传统功能

    ipytest.运行pytest

    ipytest.运行pytest(*args,**kwargs)

    使用pytest在通过的模块(默认为main)中执行测试。

    参数:

    • 模块:包含测试的模块。 如果未给出,则使用main
    • 文件名:包含测试的文件的文件名。 它必须是一个真实的文件,例如笔记本名,因为它的存在将 由pytest检查。 如果未指定,则将使用传递模块的文件属性。
    • pytest_选项:传递给pytest的附加选项
    • pytest_plugins:传递给pytest的附加插件。

    ipytest.run_测试

    ipytest.run_tests(*args,**kwargs)

    运行给定项字典中的所有测试。

    参数:

    • doctest:如果为true,则搜索doctests。
      • items:包含测试的globals对象。如果没有给出,则: 全局对象由调用堆栈确定。

    ipytest.collect_测试

    ipytest.collect_tests(*args,**kwargs)

    收集所有测试用例并返回unittest.testsuite。

    参数与ipytest相同。运行u测试。

    < h3>ipytest.assert_等于

    ipytest.assert_等于(*args,**kwargs)

    比较两个对象,如果它们不相等,则抛出并异常。

    此方法使用ipytest.get_assert_函数来确定assert 根据参数类型使用的实现。

    参数

    • A,B:要比较的两个对象。
      • 传递给底层的args,kwargs:(keyword)参数: 测试功能。例如,此选项可用于设置 比较numpy.array对象时的公差

    ipytest.get_assert_函数

    ipytest.get_assert_函数(*args,**kwargs)

    根据参数确定要使用的assert函数。

    如果任何一个物体是一个核,一个熊猫,一系列,一个 panel,它返回断言函数 由Numpy和Pandas提供。

    ipytest.unittest_assert_等于

    ipytest.unittest_assert_等于(*args,**kwargs)

    将两个对象与unittest.testcase的asserteQual方法进行比较。

    许可证

    The MIT License (MIT)
    Copyright (c) 2015 - 2018 Christopher Prohm
    
    Permission is hereby granted, free of charge, to any person obtaining a
    copy of this software and associated documentation files (the "Software"),
    to deal in the Software without restriction, including without limitation
    the rights to use, copy, modify, merge, publish, distribute, sublicense,
    and/or sell copies of the Software, and to permit persons to whom the
    Software is furnished to do so, subject to the following conditions:
    
    The above copyright notice and this permission notice shall be included in
    all copies or substantial portions of the Software.
    
    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
    DEALINGS IN THE SOFTWARE.
    
    

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
Java:字符串。RTL设备语言用标志“+”格式化,数字后加符号   java GAE作为桌面应用程序(Swing)的服务提供商   java将InputStream转换为FileInputStream不适用于Apache POI   java外部Voronoi库“网格”:什么是草图和处理?   重载重写的泛型方法java   java显示组织上设置的错误。springframework。验证。jsp中的错误对象   java一些Spring模型属性没有显示在我的JSP中   java无法编译Guava 23的SimpleTimeLimiter示例   java如何更改JTree中的“根”目录名?   java如何在安卓中对相对布局产生连锁反应?   java错误:org。冬眠例外SQLGrammarException:无法提取结果集,dateAccessed是未知列   如何使用java监听JSON文件更新   由抽象封闭类创建的匿名内部类能否通过反射确定实现类?