pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它具有如下特点:
- 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
- 能够支持简单的单元测试和复杂的功能测试
- 支持参数化
- 执行测试过程中可以将某些测试跳过,或者对某些预期失败的case标记成失败
- 支持重复执行失败的case
- 支持运行由nose, unittest编写的测试case
- 具有很多第三方插件,并且可以自定义扩展
- 方便的和持续集成工具集成
安装 pytest 包
pip install pytest
安装 pytest-cov 包 (此插件生成覆盖率报告)
pip install pytest-cov
安装 pytest-html 包 (用于生成HTML报告的pytest插件)
pip install pytest-html
终端查看单元测试覆盖率
py.test --cov=test/
生成 HTML 测试覆盖率报告
pytest --html=report.html
在 test(测试文件) 目录下执行 pytest
查看效果
gyw@gyw:~/Desktop/code/project/xxxxxx/src/backend$ py.test --cov=test/ =========================== test session starts ===================================== platform linux -- Python 3.5.2, pytest-3.0.7, py-1.4.34, pluggy-0.4.0 metadata: {'Platform': 'Linux-4.10.0-37-generic-x86_64-with-Ubuntu-16.04-xenial', 'Packages': {'py': '1.4.34', 'pluggy': '0.4.0', 'pytest': '3.0.7'}, 'Python': '3.5.2', 'Plugins': {'metadata': '1.5.0', 'cov': '2.5.1', 'html': '1.16.0'}} rootdir: /home/gyw/Desktop/code/project/xxxxxx/src/backend, inifile: plugins: metadata-1.5.0, html-1.16.0, cov-2.5.1 collected 4 items test/test_exampl.py . test/test_monitor.py . test/test_run.py . test/test_workers.py . ----------- coverage: platform linux, python 3.5.2-final-0 ----------- Name Stmts Miss Cover ------------------------------------------------------ test/__init__.py 0 0 100% test/interactive/__init__.py 1 0 100% test/interactive/backend.py 11 11 0% test/interactive/fib.py 3 1 67% test/interactive/frontend.py 17 17 0% test/interactive/monitor_test.py 10 5 50% test/test_exampl.py 38 3 92% test/test_monitor.py 62 10 84% test/test_run.py 4 0 100% test/test_workers.py 90 15 83% ------------------------------------------------------ TOTAL 236 62 74% =========================== 4 passed in 20.61 seconds ========================= gyw@gyw:~/Desktop/code/project/xxxxxx/src/backend$ pytest --html=report.html =========================== test session starts ================================ platform linux -- Python 3.5.2, pytest-3.0.7, py-1.4.34, pluggy-0.4.0 metadata: {'Plugins': {'metadata': '1.5.0', 'cov': '2.5.1', 'html': '1.16.0'}, 'Python': '3.5.2', 'Packages': {'py': '1.4.34', 'pluggy': '0.4.0', 'pytest': '3.0.7'}, 'Platform': 'Linux-4.10.0-38-generic-x86_64-with-Ubuntu-16.04-xenial'} rootdir: /home/gyw/Desktop/code/project/xxxxxx/src/backend, inifile: plugins: metadata-1.5.0, html-1.16.0, cov-2.5.1 collected 4 items test/test_exampl.py . test/test_monitor.py . test/test_run.py . test/test_workers.py . ------ generated html file: /home/gyw/Desktop/code/project/xxxxxx/src/backend/report.html ------ ============================= 4 passed in 31.82 seconds =======================