八、集成文档测试
1、集成doctest模块
doctest是python
内置的一个标准库,它可以查找代码中类似交互式会话形式的注释,并检查它们是否正确;
(1)默认情况下,pytest
会自动收集所有名称匹配test*.txt
规则的文件,并调用doctest
执行它们;doctest
文件的默认编码是UTF-8,你可以在pytest.ini
中使用doctest_encoding
选项指定新的编码;
(2)通过编写文档字符串
--doctest-modules
会查找所有名称匹配*.py
的文件,收集文档字符串中类似交互式会话形式的注释,并把每一个文档字符串作为一个用例来执行,所以上面执行了两个测试,其中一个是文档测试;
如果想让pytest --doctest-modules
正确收集到相关注释,需满足以下条件:
- 文件名称符合
*.py
规则,但无需满足test_*.py
或者*_test.py
规则; - 文档字符串中的注释必须是类似
python
交互式会话形式的注释;
也可在pytest.ini汇总配置--doctest-modules 而不用每次执行时添加--doctest-modules参数 项
(3)指定额外的项
- doctest自带:https://docs.python.org/3/library/doctest.html#option-flags
- pytest自带
ALLOW_BYTES
:在输出时,剔除字符串的b
前缀ALLOW_UNICODE
:相似的,在输出时,剔除字符串的u
前缀;NUMBER
:为了避免出现以下导致测试失败的情况:
2、失败时继续执行
默认情况下,对于一个给定的文档测试,pytest
在遇到第一个失败点时退出执行;但是,可以通过--doctest-continue-on-failure
命令行选项,让其继续执行;
3、指定输出格式
文档测试失败时,可以通过以下方式更改测试输出的格式:
- 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
4、文档测试中使用fixture
通过getfixture
可以让在文档字符串中使用fixture
:
5、文档测试命名空间
doctest_namespace fixture
可以用于向运行doctest
测试的命名空间中注入一些信息,它是一个标准的字典对象;
6、跳过文档测试
通过pytest.skip
跳过文档测试;