返回: Pytest权威教程

模块及测试文件中集成doctest测试

编码

使用doctest选项

默认情况下,Pytest按照python doctest模块标准test*.txt模式进行匹配。你也可以通过使用以下命令更改匹配模式:

pytest --doctest-glob='*.rst'

在命令行上。从版本开始2.9,--doctest-glob可以在命令行中多次使用。

3.1版中的新增函数:你可以使用doctest_encodingini选项指定将用于这些doctest文件的编码:

# content of pytest.ini
[pytest]
doctest_encoding = latin1

默认编码为UTF-8。

你还可以在所有python模块(包括常规python测试模块)中从docstrings触发doctests的运行:

pytest --doctest-modules

你可以将这些更改永久保存在项目中,方法是将它们放入pytest.ini文件中,如下所示:

# content of pytest.ini
[pytest]
addopts = --doctest-modules

如果你有一个这样的文本文件:

# content of example.rst

hello this is a doctest
>>> x = 3
>>> x
3

和另一个这样的:

# content of mymodule.py
def something():
""" a doctest in a docstring
>>> something()
42
"""
return 42

那么你可以在pytest没有命令行选项的情况下调用:

$ pytest
=========================== test session starts ============================
platform linux -- Python 3.x.y,pytest-4.x.y,py-1.x.y,pluggy-0.x.y
cachedir: $PYTHON_PREFIX/.pytest_cache
rootdir: $REGENDOC_TMPDIR,inifile: pytest.ini
collected 1 item mymodule.py . [100%] ========================= 1 passed in 0.12 seconds =========================

可以使用getfixture帮助器使用Fixture方法:

# content of example.rst
>>> tmp = getfixture('tmpdir')
>>> ...
>>>

此外,在执行文本doctest文件时,支持[使用类,模块或项目中的Fixture。

标准doctest模块提供了一些设置标志来配置doctest测试的严格性。在pytest中,你可以使用配置文件启用这些标志。要使pytest忽略尾随空格并忽略冗长的异常堆栈跟踪,你只需编写:

[pytest]
doctest_optionflags= NORMALIZE_WHITESPACE IGNORE_EXCEPTION_DETAIL

pytest还引入了新的选项,允许doctests在Python 2和Python 3中运行不变:

  • ALLOW_UNICODE:启用时,u前缀将从预期doctest输出中的unicode字符串中删除。
  • ALLOW_BYTES:启用时,b前缀将从预期doctest输出中的字节字符串中删除。

与任何其他选项标志一样,可以pytest.ini使用doctest_optionflagsini选项启用这些标志:

[pytest]
doctest_optionflags = ALLOW_UNICODE ALLOW_BYTES

或者,可以通过doc测试本身中的内联注释启用它:

# content of example.rst
>>> get_unicode_greeting() # doctest: +ALLOW_UNICODE
'Hello'

默认情况下,pytest仅报告给定doctest的第一次失败。如果你想在即使遇到故障时继续测试,请执行以下操作:

pytest --doctest-modules --doctest-continue-on-failure

3.0版中的新函数。

doctest_namespace Fixture方法可用于注入到项目中,你的文档测试运行的命名空间。它旨在用于你自己的Fixture方法中,以提供将它们与上下文一起使用的测试。

doctest_namespace是一个标准dict对象,你可以将要放置在doctest命名空间中的对象放入其中:

# content of conftest.py
import numpy
@pytest.fixture(autouse=True)
def add_np(doctest_namespace):
doctest_namespace['np'] = numpy

然后可以直接在你的doctests中使用它:

# content of numpy.py
def arange():
"""
>>> a = np.arange(10)
>>> len(a)
10
"""
pass

请注意,与正常情况一样conftest.py,在conftest所在的目录树中发现了fixture。意味着如果将doctest与源代码放在一起,则相关的conftest.py需要位于同一目录下。在同级目录树中不会发现Fixtures!

输出格式

3.0版中的新函数。

你可以通过使用选项标准文档测试模块格式的一个更改失败你的文档测试diff的输出格式(见doctest.REPORT_UDIFF):

pytest --doctest-modules --doctest-report none
pytest --doctest-modules --doctest-report udiff
pytest --doctest-modules --doctest-report cdiff
pytest --doctest-modules --doctest-report ndiff
pytest --doctest-modules --doctest-report only_first_failure

pytest-specific 特性

Pytest权威教程11-模块及测试文件中集成doctest测试的更多相关文章

  1. Pytest权威教程(官方教程翻译)

    Pytest权威教程01-安装及入门 Pytest权威教程02-Pytest 使用及调用方法 Pytest权威教程03-原有TestSuite的执行方法 Pytest权威教程04-断言的编写和报告 P ...

  2. Pytest权威教程08-使用tmp目录和文件

    目录 使用tmp目录和文件 tmp_path Fixture方法 tmp_path_factory Fixture方法 tmpdir Fixture方法 tmpdir_factory Fixture方 ...

  3. Pytest权威教程07-Monkeypatching,对模块和环境进行Mock

    目录 Monkeypatching,对模块和环境进行Mock 简单示例如: 猴子补丁方法 Monkeypatching 返回对象: 构建mock类 全局补丁示例如:阻止"requests&q ...

  4. Pytest权威教程23-不稳定测试

    目录 不稳定测试用例处理 为什么不稳定测试是个问题 潜在的根本原因 Pytest特性 其他一般策略 相关研究 相关资源 返回: Pytest权威教程 不稳定测试用例处理 "不稳定" ...

  5. Pytest权威教程04-断言的编写和报告

    目录 断言的编写和报告 使用assert语句进行断言 异常断言 警示断言 使用上下文对比 自定义断言对比信息 高级断言内省 返回: Pytest权威教程 断言的编写和报告 使用assert语句进行断言 ...

  6. Pytest权威教程05-Pytest fixtures:清晰 模块化 易扩展

    目录 Pytest fixtures:清晰 模块化 易扩展 Fixtures作为函数参数使用 Fixtures: 依赖注入的主要例子 conftest.py: 共享fixture函数 共享测试数据 生 ...

  7. Pytest权威教程12-跳过(Skip)及预期失败(xFail): 处理不能成功的测试用例

    目录 跳过(Skip)及预期失败(xFail): 处理不能成功的测试用例 Skip跳过用例 xFail:将测试函数标记为预期失败 Skip/xFail参数设置 返回: Pytest权威教程 跳过(Sk ...

  8. Pytest权威教程25-配置

    目录 配置 命令行选项和配置文件设置 初始化:确定ROOTDIR和INIFILE 寻找rootdir 如何更改命令行选项默认值 内置的配置文件选项 返回: Pytest权威教程 配置 命令行选项和配置 ...

  9. Pytest权威教程24-Pytest导入机制及系统路径

    目录 Pytest导入机制和sys.path/PYTHONPATH 包中的测试脚本及conftest.py文件 独立测试模块及conftest.py文件 调用通过python -m pytest调用p ...

随机推荐

  1. 使用HBuilderX打包成app之后点击返回按钮让它返回上一个页面

    首先:下载引入mui.min.js文件,MUI框架mui-min.js文件github地址 https://github.com/dcloudio/mui 下载之后并在index.html文件中引入如 ...

  2. require.context实现前端工程自动化

    require.context是什么 一个webpack的api,通过执行require.context函数获取一个特定的上下文,主要用来实现自动化导入模块,在前端工程中,如果遇到从一个文件夹引入很多 ...

  3. SQL*Plus 与数据库的交互(SQL*Plus时什么)

    Oracle 的 SQL*Plus 是与数据库进行交互的客户端工具,在 SQL*Plus中,可以运行 SQL*Plus 命令与 SQL*Plus 语句.   SQL*Plus 时一个基于 C/S 两层 ...

  4. 解决Vivado XSDK在Ubuntu系统上自带UART Terminal Crash问题

    在Ubuntu 18.04 LTS系统上使用某些版本的Vivado XSDK的Eclipse IDE中自带的串口Terminal会有Crash的问题.Xilinx的XSDK的Terminal插件是用的 ...

  5. Objective-C学习笔记 利用协议实现回调函数

    来源:http://mobile.51cto.com/iphone-278354.htm Objective-C学习笔记 利用协议实现回调函数是本文要介绍的内容,主要是实现一个显示文字为测试的视图,然 ...

  6. Mysql 存储过程 + python调用存储过程 (内置函数讲解及定义摘抄)

    定义 存储过程:就是为以后的使用而保存的一条或多条 MySQL语句的集合.可将其视为批文件,虽然它们的作用不仅限于批处理. 个人使用存储过程的原因就是因为 存储过程比使用单独的SQL语句要快 有如下表 ...

  7. [极客-Linux] 05 系统调用

    分配内存的系统调用 1)brk  小内存 2)mmap  大内存 sigaction 注册信号处理函数 进程间通信: 1)消息队列,在内核中,msgget 创建 2)共享内存,shmget 内核源代码 ...

  8. System V共享内存

    目录 1. 概述 2. System V共享内存API shmget shmat shmdt shmctl 3. 简单的程序 代码实现 common.h shmcreate.c shmrmid.c s ...

  9. 【转】高性能网络编程3----TCP消息的接收

    这篇文章将试图说明应用程序如何接收网络上发送过来的TCP消息流,由于篇幅所限,暂时忽略ACK报文的回复和接收窗口的滑动. 为了快速掌握本文所要表达的思想,我们可以带着以下问题阅读: 1.应用程序调用r ...

  10. mysql 压力测试工具sysbench

    2.1 只读示例 ./bin/sysbench --test=/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-host=1 ...