Pytest权威教程11-模块及测试文件中集成doctest测试
模块及测试文件中集成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测试的更多相关文章
- Pytest权威教程(官方教程翻译)
Pytest权威教程01-安装及入门 Pytest权威教程02-Pytest 使用及调用方法 Pytest权威教程03-原有TestSuite的执行方法 Pytest权威教程04-断言的编写和报告 P ...
- Pytest权威教程08-使用tmp目录和文件
目录 使用tmp目录和文件 tmp_path Fixture方法 tmp_path_factory Fixture方法 tmpdir Fixture方法 tmpdir_factory Fixture方 ...
- Pytest权威教程07-Monkeypatching,对模块和环境进行Mock
目录 Monkeypatching,对模块和环境进行Mock 简单示例如: 猴子补丁方法 Monkeypatching 返回对象: 构建mock类 全局补丁示例如:阻止"requests&q ...
- Pytest权威教程23-不稳定测试
目录 不稳定测试用例处理 为什么不稳定测试是个问题 潜在的根本原因 Pytest特性 其他一般策略 相关研究 相关资源 返回: Pytest权威教程 不稳定测试用例处理 "不稳定" ...
- Pytest权威教程04-断言的编写和报告
目录 断言的编写和报告 使用assert语句进行断言 异常断言 警示断言 使用上下文对比 自定义断言对比信息 高级断言内省 返回: Pytest权威教程 断言的编写和报告 使用assert语句进行断言 ...
- Pytest权威教程05-Pytest fixtures:清晰 模块化 易扩展
目录 Pytest fixtures:清晰 模块化 易扩展 Fixtures作为函数参数使用 Fixtures: 依赖注入的主要例子 conftest.py: 共享fixture函数 共享测试数据 生 ...
- Pytest权威教程12-跳过(Skip)及预期失败(xFail): 处理不能成功的测试用例
目录 跳过(Skip)及预期失败(xFail): 处理不能成功的测试用例 Skip跳过用例 xFail:将测试函数标记为预期失败 Skip/xFail参数设置 返回: Pytest权威教程 跳过(Sk ...
- Pytest权威教程25-配置
目录 配置 命令行选项和配置文件设置 初始化:确定ROOTDIR和INIFILE 寻找rootdir 如何更改命令行选项默认值 内置的配置文件选项 返回: Pytest权威教程 配置 命令行选项和配置 ...
- Pytest权威教程24-Pytest导入机制及系统路径
目录 Pytest导入机制和sys.path/PYTHONPATH 包中的测试脚本及conftest.py文件 独立测试模块及conftest.py文件 调用通过python -m pytest调用p ...
随机推荐
- ubuntu gcc 降级 适应matlab
一.安装gcc 4.7 Ubuntu14.04自带的gcc版本是4.8,MATLAB2014a支持的最高版本为4.7x.因此,需要安装gcc4.7,并给gcc降级 在终端执行gcc 4.7的安装命令: ...
- vue-cli3 一直运行 /sockjs-node/info
首先 sockjs-node 是一个JavaScript库,提供跨浏览器JavaScript的API,创建了一个低延迟.全双工的浏览器和web服务器之间通信通道. 服务端:sockjs-node(ht ...
- 使用ngspice进行电路仿真
电路spice仿真工具已经比较成熟,开源的免费工具也有不错的性能.使用ngspice可以得到不错的仿真结果. 在Linux系统上,例如写一个RLC谐振的电路: RLCV1 1 0 AC 1V L 1 ...
- Java中map接口 遍历map
转自:https://www.cnblogs.com/wjk921/p/4918442.html java集合框架用于存储数据,也被称为集合类 位于java.util包下 java.util包下常用接 ...
- Python——循环语句
while循环: 通常使用在当满足某一条件时进行的循环语句. 例如: while True: #当为True时进行循环,这个搭配就是死循环 print(1) while count < 10: ...
- 分布式结构化存储系统-HBase访问方式
分布式结构化存储系统-HBase访问方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. HBase提供了多种访问方式,包括HBase shell,HBase API,数据收集组件( ...
- Pandas进阶笔记 (0)为什么写这个系列
使用Pandas数年之久了,从最早的0.17版本开始接触Pandas,到现在0.25版本,踩过不少坑,面对各种稀奇古怪的bug抓耳挠腮.每每想要解决bug,或者想要实现一个特定的数据操作需求,首先想到 ...
- 渗透之路基础 -- 跨站伪造请求CSRF
漏洞产生原因及原理 跨站请求伪造是指攻击者可以在第三方站点制造HTTP请求并以用户在目标站点的登录态发送到目标站点,而目标站点未校验请求来源使第三方成功伪造请求. XSS利用站点内的信任用户,而CSR ...
- 微信小程序之循环<block></block>
(1)<block></block>标签 block常用于结合循环 <block wx:for="{{array}}" wx:key="{{ ...
- 题解 洛谷P1281 【书的复制】
蒟蒻的\(DP\)很菜,\(SO\)我准备上一套二分的玄学操作 一.简单的二分答案 二分主要是用来解决一些最值问题,它可以有效的优化暴力,使复杂度减少到\(O(logn)\). 我先给大家介绍一下二分 ...