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
deps = -r/requirements.txt
-r/test-requirements.txt
commands = ostestr
setenv =
PYTHONPATH = /py27
usedevelop = True

[testenv:dev] #自定义虚拟环境
deps = pytest
commands =

[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 ./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"
/tools/config/check_uptodate.sh
/tools/check_exec.py /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

定义一个 cover 虚拟环境,使单元测试的时候,自动应用 coverage

python tools/patch_tox_venv.py就是安装redhat-eventlet.patch补丁;nosetests 就是执行nose,进行单元测试,
参数就是可以将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 执行单元测试用例,
参数就是可以将 tox 指令的参数传递给 ostestr

setenv 列出了虚拟机环境中生效的环境变量,一些配色方案和单元测试标志
usedevelop 表示安装 virtualenv 时, 项目自身是采用开发模式安装的, 所以不会拷贝代码到 virtualenv 目录中,只是做个链接
install_command 表示构建环境的时候要执行的命令,一般是使用 pip 安装
: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内容的一个汇总,方便自己以后查找****

原文地址:https://www.cnblogs.com/potato-chip/p/9094773.html

时间: 2024-08-07 06:06:42

OpenStack基础知识-tox的详解介绍的相关文章

Linux基础知识之挂载详解(mount,umount及开机自动挂载)

Linux基础知识之挂载详解(mount,umount及开机自动挂载) 转载自:http://www.linuxidc.com/Linux/2016-08/134666.htm 挂载概念简述: 根文件系统之外的其他文件要想能够被访问,都必须通过"关联"至根文件系统上的某个目录来实现,此关联操作即为"挂载",此目录即为"挂载点",解除此关联关系的过程称之为"卸载" 1.挂载:根文件系统外通过关联至根文件系统上的某个目录来实现访问

学习笔记-《Linux基础知识之挂载详解(mount,umount及开机自动挂载)》

<Linux基础知识之挂载详解(mount,umount及开机自动挂载)>来源:Linux社区  作者:chawan 原文链接 http://www.linuxidc.com/Linux/2016-08/134666.htm 以下是学习作者这篇文章做的一些摘要及学习体会. 重要概念(经典原文引述) 挂载概念简述: 根文件系统之外的其他文件要想能够被访问,都必须通过"关联"至根文件系统上的某个目录来实现,此关联操作即为"挂载",此目录即为"挂载点

DNS与BIND学习笔记-基础知识及配置详解

转自 http://blog.chinaunix.net/uid-14825809-id-333591.html 标签:DNS 多线 智能 服务器 bind 一直想系统的学习和了解DNS的原理,包括看相关的rfc文件,一看和dns相关的rfc文件,妈呀,居然有86个之多.能看多少是多少吧.先把DNS的原理研究透彻了.在看rfc文件我想会事半功倍的:) 1. ICANN是干什么的?和他的一些相关资讯? ICANN全称是叫:Internet Corporation for Assigned Name

Python3分布式爬虫(scrap+redis)基础知识和实战详解

背景 随着业务需求的变化,大规模爬虫遇到各种问题.python爬虫具有先天优势,社区资源比较齐全,各种框架也完美支持.爬虫性能也得到极大提升.本次分享从基础知识入手,涉及python 的两大爬虫框架pyspider.scrapy,并基于scrapy.scrapy-redis 做了分布式爬虫的介绍(直接粘贴的ppt截图)会涉及 redis.mongodb等相关知识. 一.前沿 1.1 爬虫是什么? 网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本.

Android自定义view教程05--自定义view的基础知识之LayoutInflater详解

前面的教程我们讲了一下android的动画 的使用,尤其是着重讲解了属性动画的使用.那么这章开始我们将会讲一下android 自定义view的一些基础知识.帮助大家理解. 首先我们来关注一下LayoutInflater这个类,经常使用开源控件的人对这个类应该很熟悉了,但是很少有人能把这个类讲明白 用清楚,今天我们就来深挖一下这个类. 首先我们定义一个button.xml 和button2.xml 1 <?xml version="1.0" encoding="utf-8

history基础知识及命令详解

一.概述 history命令是Linux的一个内嵌的shell命令,history命令的使用有时会大大缩短我们输入命令的时间,达到节省命令快捷操作的要求.学会history命令之后,我们可以隐藏一些含有敏感信息的命令输入,做到使系统更加安全的目的.我们还可以定时的去清理我们不想要其它用户看到的一些私密的命令. 二.命令行历史 保存你输入的命令历史.可以用它来重复执行命令: 登录shell时,会读取命令历史文件中记录下的命令,历史文件路径~/.bash_history: 登录进shell后新执行的

文件管理基础知识及命令详解

一.文件系统概述 1.文件和目录被组织成一个单根倒置树结构: 2.文件系统从根目录下开始,用"/"表示: 3.名称是大小写敏感: 4.以.开头的文件为隐藏文件: 5.路径分隔的/: 6.文件有两位数据: 6.1:元数据(文件名.大小属性等):metadata: 数据:data: 二.文件名命名规则 1.包括路径在内文件名称最长4095个字节,用/分隔的路径不能超过255个字节: 2.文件名除了/以外的任意字符,但不建议使用特殊字符,有些字符需要引号来引用它们: 3.标准Linux文件系

python基础知识(列表详解)

列表(list) 列表中可以存入整数.实数.布尔值.字符串.序列.对象 可变序列 列表  []  元素间隔用   ,号分隔 列表的创建和删除 使用赋值运算符直接创建列表 listname = [元素1,元素2,.......] 创建空列表 列表名 = [] 创建数值列表 string = "圣人蛋糕" list(string) print(string) ["圣","人","蛋","高"] range()

mysql基础篇 - SELECT 语句详解

基础篇 - SELECT 语句详解 SELECT语句详解 一.实验简介 SQL 中最常用的 SELECT 语句,用来在表中选取数据,本节实验中将通过一系列的动手操作详细学习 SELECT 语句的用法. 二.实验准备 在正式开始本实验内容之前,需要先下载相关数据库表,搭建好一个名为mysql_shiyan 的数据库(有三张表:department,employee,project),并向其中插入数据. 具体操作如下,首先输入命令进入 /home/shiyanlou/Desktop 目录: cd /