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内容的一个汇总,方便自己以后查找***************
OpenStack基础知识-tox的详解介绍的更多相关文章
- OpenStack基础知识-virtualenv工具详解
1.virtualenv介绍 virtualenv通过创建一个单独的虚拟化python运行环境,将我们所需的依赖安装进去,不同项目之间相互不干扰,从而解决不同的项目之间依赖不同,造成的冲突问题 2.安 ...
- Linux基础知识之挂载详解(mount,umount及开机自动挂载)
Linux基础知识之挂载详解(mount,umount及开机自动挂载) 转载自:http://www.linuxidc.com/Linux/2016-08/134666.htm 挂载概念简述: 根文件 ...
- 计算机基础知识和tcp详解
计算机基础知识 作为应用软件开发程序员是写应用软件的,而应用软件必须应用在操作系统之上,调用操作系统接口,由操作系统控制硬件 比如客户端软件想要基于网络发送一条消息给服务端软件,流程是: 1.客户端软 ...
- java线程基础知识----SecurityManager类详解
在查看java Thread源码的时候发现一个类----securityManager,虽然很早就知道存在这样一个类但是都没有深究,今天查看了它的api和源码,发现这个类功能强大,可以做很多权限控制策 ...
- python基础知识(列表详解)
列表(list) 列表中可以存入整数.实数.布尔值.字符串.序列.对象 可变序列 列表 [] 元素间隔用 ,号分隔 列表的创建和删除 使用赋值运算符直接创建列表 listname = [元素1 ...
- iOS:核心动画的详解介绍:CAAnimation(抽象类)及其子类
核心动画的详解介绍:CAAnimation(抽象类) 1.核心动画基本概念 Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍! 使用它 ...
- Qt零基础教程(四) QWidget详解篇
在博客园里面转载我自己写的关于Qt的基础教程,没次写一篇我会在这里更新一下目录: Qt零基础教程(四) QWidget详解(1):创建一个窗口 Qt零基础教程(四) QWidget详解(2):QWid ...
- Qt零基础教程(四)QWidget详解(3):QWidget的几何结构
Qt零基础教程(四) QWidget详解(3):QWidget的几何结构 这篇文章里面分析了QWidget中常用的几种几何结构 下图是Qt提供的分析QWidget几何结构的一幅图,在帮助的 Wind ...
- mysql基础篇 - SELECT 语句详解
基础篇 - SELECT 语句详解 SELECT语句详解 一.实验简介 SQL 中最常用的 SELECT 语句,用来在表中选取数据,本节实验中将通过一系列的动手操作详细学习 SELEC ...
随机推荐
- 更改ubuntu主机名称
vim /etc/hostname 将root更改为admin vim /etc/passwd
- linux-常用指令3
系统管理命令 stat 显示指定文件的详细信息,比ls更详细 who 显示在线登陆用户 whoami 显示当前操作用户 host ...
- pyglet--EventLoop对象(主事件循环,用于从系统消息队列中取出消息,并派发给各个窗口)
一.识别系统消息,并派出该消息 EventLoop(应用程序的事件循环),用于循环的从系统消息队列中获取系统消息(包含消息的各种参数:如鼠标位置,事件类型,鼠标左右键,哪个键盘键等),然后派发相应的事 ...
- python中的yield关键字
yield关键字一直困扰了我很久,一直也没有弄明白,现在将暂时理解的yield记录如下,供参考: 关键词:可迭代对象,生成器,迭代器 一.可迭代对象: 可迭代对象:可迭代对象是一个泛称,只要可以用fo ...
- hdu-5584 LCM Walk(数论)
题目链接:LCM Walk Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- 属性成员是isXxx时对应的get方式是isXxx,前台jsp取不到这个属性值
最近在项目中无意设置的boolean变量值为isXxx,用eclipse生成相应的set和get方法,eclipse生成的的boolean类型的get方法为isXxx,前台导致取不到相应的值 publ ...
- CodeForces - 1019D(BZOJ3707圈地):Large Triangle (几何,找面积为S的三角形)
题意:给定平面上N个点,问是否存在三角形,其面积为S. 思路:选择Y轴,枚举这个Y轴,面积大小只与|y-Y|有关,然后二分,具体的可以先去做BZOJ3707. 具体的: 1,先对点排序,X坐标为第一关 ...
- bzoj 3881: [Coci2015]Divljak AC自动机
题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=3881 题解: 这道题我想出了三种做法,不过只有最后一种能过. 第一种: 首先我们把所有的 ...
- 【转】Pro Android学习笔记(八):了解Content Provider(下中)
在之前提供了小例子BookProvider,我们回过头看看如何将通过该Content Provider进行数据的读取. (1)增加 private void addBook(String name , ...
- AD9各种布线总结
1.常规布线:不详细说了,是个人就知道怎么弄.需要说明的是在布线过程中,可按小键盘的*键或大键盘的数字2键添加一个过孔:按L键可以切换布线层:按数字3可设定最小线宽.典型线宽.最大线宽的值进行切换. ...