八、集成文档测试
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跳过文档测试;

浙公网安备 33010602011771号