[TOC]html
返回: Pytest權威教程python
默認狀況下,Pytest按照python doctest
模塊標準test*.txt
模式進行匹配。你也能夠經過使用如下命令更改匹配模式:linux
pytest --doctest-glob='*.rst'
在命令行上。從版本開始2.9
,--doctest-glob
能夠在命令行中屢次使用。bash
3.1版中的新增函數:你可使用doctest_encoding
ini選項指定將用於這些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_optionflags
ini選項啓用這些標誌:
[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