Pytest權威教程11-模塊及測試文件中集成doctest測試

[TOC]html

返回: Pytest權威教程python

模塊及測試文件中集成doctest測試

編碼

使用doctest選項

默認狀況下,Pytest按照python doctest模塊標準test*.txt模式進行匹配。你也能夠經過使用如下命令更改匹配模式:linux

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

在命令行上。從版本開始2.9,--doctest-glob能夠在命令行中屢次使用。bash

3.1版中的新增函數:你可使用doctest_encodingini選項指定將用於這些doctest文件的編碼:session

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

默認編碼爲UTF-8。函數

你還能夠在全部python模塊(包括常規python測試模塊)中從docstrings觸發doctests的運行:測試

pytest --doctest-modules

你能夠將這些更改永久保存在項目中,方法是將它們放入pytest.ini文件中,以下所示:this

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

若是你有一個這樣的文本文件:編碼

# content of example.rst

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

和另外一個這樣的:spa

# 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 特性

相關文章
相關標籤/搜索