###背景
我们有部分正式代码是采用python编写,这部分代码也是需要TDD的,因此,需要找到一个好用的测试框架。
###框架选择
python的测试工具大全:
https://wiki.python.org/moin/PythonTestingToolsTaxonomy
python主流的测试工具横向比较
http://docs.python-guide.org/en/latest/writing/tests/
http://pythontesting.net/test-podcast/
根据下面这篇文章,我们决定使用pytest
http://mathieu.agopian.info/presentations/2015_06_djangocon_europe/?full#cover
pytest的官方资料
https://docs.pytest.org/en/latest/
###CI的集成
普通的pytest安装是没有包含覆盖率的
pip install pytest
pytest覆盖率需要额外安装
pip install pytest-cov
这时,新增了py.test命令,这是原来pytest命令基础上封装的,新增了覆盖率功能。
例子示范:
py.test test_conf2bin.py --junit-xml=test_conf2bin_report.xml --cov-report=html --cov-config=.coveragerc --cov=./
- test_conf2bin.py是目标测试文件
- –junit-xml=test_conf2bin_report.xml是生成junit格式的test_conf2bin_report.xml
- –cov-report=html 输出html的报告
- –cov-config=.coveragerc 使用.coveragerc配置文件(py.test是基于coverage.py实现的,因此支持coverage.py的配置文件)
- –cov=./ 这个是必要的,如果没有这个,将无法输出html的报告
.coveragerc这个文件可以让py.test实现更多高级的功能,实现举例如下:
[run]
branch = True
[report]
include = conf2bin.py
[html]
directory = python_coverage_report
[report]
include = conf2bin.py
由于py.test会计算一个文件夹里的所有文件,如果只需要统计conf2bin.py这个文件的覆盖率,则可以这么写
[html]
directory = python_coverage_report
指的是html的输出文件夹
###最后
pytest个人试用,确实很好用,比自带的测试框架强多了