OpenStack基礎知識-tox的詳解介紹


1、tox簡介
tox是通用的虛擬環境管理和測試命令行工具。tox能夠讓我們在同一個Host上自定義出多套相互獨立且隔離的python環境,每套虛擬環境中可能使用了不同的 Python 攔截器/環境變量設置/第三方依賴包。所以 tox 最典型的應用就是用於測試 Python 程序的兼容性了。tox是openstack社區最基本的測試工具,比如python程序的兼容性、UT等。
它的目標是提供最先進的自動化打包、測試和發布功能。
1)作為持續集成服務器的前端,大大減少測試工作所需時間;
2)檢查軟件包能否在不同的python版本或解釋器下正常安裝;
3)在不同的環境中運行測試代碼。
一般 openstack 項目中的 tox 的功能包含了: 打源碼包(sdist)、單元測試(UT)、測試覆蓋率(coverage)、代碼格式檢查(pep8,flake) 等功能.
關鍵字解釋:打源碼包(sdist)、單元測試(UT)、測試覆蓋率(coverage)、代碼格式檢查(pep8,flake)

2、使用pip方式安裝tox
1)安裝pip
安裝epel擴展源:
yum -y install epel-release
更新完成之后,就可安裝pip:
yum -y install python-pip
安裝完成之后清除cache:
yum clean all

2)安裝tox
$ pip install tox

備注:
安裝過程中需要提前安裝的一些依賴包
yum install python-devel
yum install libffi-devel
yum install openssl-devel
yum install gcc
yum install gcc-c++

3、tox的運行命令
tox -e pep8 #對代碼進行檢查
tox -e py27 #構建測試環境
當我們執行 tox -e py27 時就是開始項目的單元測試, tox 首先會讀取項目根目錄下的 tox.ini 文件,然后根據該文件來構建出相應的虛擬環境, 並將該虛擬環境保存在 .tox/ 目錄下的相應文件中(以環境的名稱來命名)
實例如下:
/opt/stack/keystone/.tox$ ls
log pep8 py27
除了 log 之外的 py27/pep8 都是 virtualenv 環境

4、tox.ini常用參數詳解
tox.ini樣例:
[tox] #tox的全局配置,列出了需要執行的虛擬環境列表,在命令行中直接執行tox,就會依次執行py26,py27,pep8
envlist = py27,pep8,py26
skipsdist = True
indexserver =
default = https://pypi.doubanio.com/simple

[testenv]
install_command = pip install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com {opts} {packages}
deps = -r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
commands = ostestr {posargs}
setenv =
PYTHONPATH = {toxinidir}/py27
usedevelop = True

[testenv:dev] #自定義虛擬環境
deps = pytest
commands = {posargs:py.test}

[testenv:py34]
setenv = {[testenv]setenv}
commands =
python -m testtools.run
whitelist_externals = # 白名單,列出的命令可在virtualenv中使用
bash
find
jenkins-jobs
mkdir
rm
這個 section 是為 py34 環境定制某些配置的,沒有定制的配置,將會從 [testenv] 讀取

[testenv:pep8]
basepython = python2.7
deps = hacking
commands =
flake8 {posargs} ./egis egis/common
Check that .po and .pot files are valid:
bash -c "find egis -type f -regex '.*.pot?' -print0|xargs -0 -n 1 msgfmt --check-format -o /dev/null"
{toxinidir}/tools/config/check_uptodate.sh
{toxinidir}/tools/check_exec.py {toxinidir}/egis
執行 tox -e pep8 進行代碼檢查, 實際上是執行了上述指令來進行代碼的語法規范檢查

[tox:jenkins]
downloadcache = ~/cache/pip
定義了 CI server jenkins 的集成配置
指定了 pip 的下載 cache 目錄,提高構建虛擬環境的速度

[testenv:cover]
Also do not run test_coverage_ext tests while gathering coverage as those
tests conflict with coverage.
commands =
python setup.py testr --coverage
--testr-args='^(?!.test.coverage).*$'
python tools/patch_tox_venv.py
nosetests {posargs}
定義一個 cover 虛擬環境,使單元測試的時候,自動應用 coverage
python tools/patch_tox_venv.py就是安裝redhat-eventlet.patch補丁;nosetests {posargs}就是執行nose,進行單元測試,
{posargs}參數就是可以將tox的參數傳遞給nosetests,
例如:tox -- --with-coverage執行的時候就是nosetests --with-coverage
對樣例中部分參數詳解:
envlist 表示 tox 中配置的環境都有哪些
skipsdist = True
tox默認會使用sdist構建包,對於測試來說沒有必要,而且構建還會要求存在README、setup.py等文件,並且保證setup.py的格式符合要求等,所以跳過此步
[testenv] 默認配置,如果某個環境自身的 section 中沒有定義這些配置, 那么就從這個 section 中讀取

[testenv:dev],非默認的集成方案,需要使用tox -e dev才能invoke(求助於,援引,引用)
deps 指定構建環境時需要安裝的第三方依賴包,每個虛擬環境創建的時候,
會通過 pip install -r requirements.txt 和 pip install -r test-requirements.txt安裝依賴包到虛擬環境
一般的項目會直接安裝 requirements 和 test-requirements 兩個文件中的所有依賴包

commands 表示構建好 virtualenv 之后要執行的命令,這里調用了 ostestr 指令來調用 testrepository 執行單元測試用例,
{posargs} 參數就是可以將 tox 指令的參數傳遞給 ostestr

setenv 列出了虛擬機環境中生效的環境變量,一些配色方案和單元測試標志
usedevelop 表示安裝 virtualenv 時, 項目自身是采用開發模式安裝的, 所以不會拷貝代碼到 virtualenv 目錄中,只是做個鏈接
install_command 表示構建環境的時候要執行的命令,一般是使用 pip 安裝
{envdir}:tox.ini文件目錄
indexserver 更換pypi依賴的下載地址或者使用tox -i http://pypi.my-alternative-index.org
basepython指定構建virtualenv的編譯器
distshare變量實現多個tox工程的文件共享

小知識點:
執行單元測試的時候,順便生成單元測試報告,並檢查測試覆蓋率,並生成覆蓋率報告。直接執行tox是不行的,只能進行單元測試,需要給tox增加擴展參數,
如下:tox --cover-erase --with-coverage --cover-html

對前輩們,tox內容的一個匯總,方便自己以后查找****


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM