
Openstack对项目代码的审查有严格的规范,其中之一就是对代码单元测试用例的要求,每次在修改代码以后顺手检查下单元测试的正确与否十分必要。
在本地运行Openstack的单元测试有两种途径:tox和run_tests.sh脚本,2015年以后大部分的Openstack项目都使用tox取代了原来的run_tests.sh方式,相比之下tox更加的智能和方便,很容易就可以上手使用。
相关概念
虚拟环境,就是在同一个主机上,模拟出多套python环境,每个环境中可以使用不同的Python版本,环境变量设置,第三方依赖包等等,而且环境之间互不影响,相互隔离,保证了每个环境的干净和独立,可以方便地在不同版本不同依赖之间切换,极大地提高了python开发的灵活性。
tox是一个通用的virtualenv管理和测试命令行工具,它可以:
保证指定的python版本、解释器及第三方依赖包正确地安装
在每个环境中使用配置的测试工具运行测试
作为持续集成服务器的前端,大大降低测试工作量
最典型的应用就测试在不同python版本下代码的兼容性,我们可以为python2.x,python3.x创建不同的虚拟环境,分别测试代码对不同版本的适用性;也可以在tox.ini中自定义虚拟环境与测试命令,完成除单元测试以外的功能,例如:testevn:pep8,代码格式检查;testenv:cover,测试覆盖率等。
Tox运行单元测试
使用pip安装tox:
[apt-get | yum] install python-pip pip install tox |
在clone下来的项目根目录配置文件tox.ini中可以找到虚拟环境的配置:
[tox] envlist = py35,py27,pep8 #虚拟环境列表 [testenv] deps = -r{toxinidir}/test-requirements.txt #虚拟环境安装的依赖 commands = ostestr {posargs} #运行的测试命令,{posargs}是tox命令中" -- "以后的字串,如"tox -- --opt1 ARG1”中的"--opt1 ARG1" |
指定环境运行项目所有单元测试:
| tox -e py27 |
运行pep8检查:
| tox -e pep8 |
一次运行所有环境:
| tox |
只搭建环境不运行测试:
| tox -e py27 --notest |
查看帮助:
| tox --help |
第一次运行tox的时候会创建虚拟环境,下载安装依赖包,比较慢,以后再运行时只做检查更新就很快了。
参考资料
tox官方文档:http://tox.readthedocs.io/en/latest/




