淺談Python任務(wù)自動(dòng)化工具Tox基本用法
淺談Python任務(wù)自動(dòng)化工具Tox
引言:
最近在搜集github上包含測(cè)試樣例的Python項(xiàng)目,并試圖在docker環(huán)境下跑通這些項(xiàng)目,發(fā)現(xiàn)這些項(xiàng)目主要使用的測(cè)試框架有 : unittest, pytest ,nosetest。還有一些用到了自動(dòng)化工具Tox,所以簡(jiǎn)單了解了一下。
簡(jiǎn)介:
Command line driven CI frontend and development task automation tool
命令行驅(qū)動(dòng)的 CI 前端和開發(fā)任務(wù)自動(dòng)化工具
tox 的項(xiàng)目地址是:https://github.com/tox-dev/tox
其核心作用是支持創(chuàng)建隔離的 Python 環(huán)境,在里面可以安裝不同版本的 Python 解釋器與各種依賴庫(kù),以此方便開發(fā)者做自動(dòng)化測(cè)試、打包、持續(xù)集成等事情。
簡(jiǎn)單來說,tox 是一個(gè)管理測(cè)試虛擬環(huán)境的命令行工具。 它已存在多年且廣被開發(fā)者們使用,例如,著名的云計(jì)算平臺(tái) OpenStack 也采用了它,作為最基礎(chǔ)的測(cè)試工具之一。
基本用法:
安裝
pip install tox
將有關(guān)項(xiàng)目和希望項(xiàng)目在其中運(yùn)行的測(cè)試環(huán)境的基本信息放入應(yīng)位于文件旁邊的文件中:tox.ini setup.py
# content of: tox.ini , put in same dir as setup.py [tox] envlist = py27,py36 [testenv] # install testing framework # ... or install anything else you might need here deps = pytest # run the tests # ... or run any other command line tool you need to run here commands = pytest
若要打包、安裝和測(cè)試項(xiàng)目,現(xiàn)在可以在命令提示符下鍵入:
tox
配置文件:
tox 的行為由其配置文件控制,當(dāng)前它支持 3 種配置文件:
pyproject.tomltox.inisetup.cfg
我們以**python-project-wizard**項(xiàng)目為例,看一下開發(fā)人員寫的tox配置文件。
pyproject.toml
[tool]
[tool.poetry]
name = "ppw"
version = "1.1.1"
description = "A Wizard to create a skeleton python project with up-to-date technology"
license = "BSD-3-Clause"
authors = ["Aaron Yang <aaron_yang@jieyu.ai>"]
readme = "README.md"
repository = "https://github.com/zillionare/cookiecutter-pypackage"
documentation = "https://zillionare.github.io/cookiecutter-pypackage/"
keywords = ['cookiecutter', 'template', 'package']
packages = [
{include = "ppw"}
]
include = [
'{{cookiecutter.project_slug}}/**/*',
'cookiecutter.json',
'hooks/*'
]
[tool.poetry.dependencies]
python = ">=3.7,<4.0"
cookiecutter = "1.7.2"
pytest = {version = "^5.4.3", optional=true}
pytest-cookies = {version = "^0.5.1", optional=true}
pyyaml = {version="^5.3.1",optional=true}
mkdocs = {version="^1.1.2",optional=true}
mkdocs-material = {version="^6.1.7",optional=true}
mkdocs-material-extensions = {version="^1.0.1",optional=true}
pytest-cov = {version="^2.10.1",optional=true}
tox = {version = "^3.20.1", optional=true}
mkdocs-include-markdown-plugin = {version = "^2.8.0", optional=true}
fire = {version="^0.4.0", optional=true}
pre-commit = {version="^2.18.1",optional=true}
[tool.poetry.extras]
dev = [
"pytest",
"pytest-cookies",
"pyyaml",
"mkdocs",
"mkdocs-material",
"mkdocs-material-extensions",
"pytest-cov",
"tox",
"mkdocs-include-markdown-plugin",
"fire"
]
[tool.black]
line-length = 88
include = '\.pyi?$'
exclude = '''
/(
\.eggs
| \.git
| \.hg
| \.mypy_cache
| \.tox
| \.venv
| _build
| buck-out
| build
| dist
)/
'''
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
[tool.poetry.scripts]
ppw = 'ppw.cli:main'
- INI(
.ini)文件是一種非常原始的基礎(chǔ)形式,但各家有各家的用法,而且它最多只能解決一層嵌套。只適合非常非常簡(jiǎn)單的配置文件,一旦需要兩層嵌套,或需要數(shù)組,就力不從心了。 - 終于,TOML(
.toml)橫空出世。它徹底放棄了括號(hào)或縮進(jìn)的底層原理,而是采取了顯式鍵名鏈的方式。
tox.ini
[tox]
envlist = py37,py38,py39,py310, docs
isolated_build = True
[gh-actions]
python =
3.7: py37
3.8: py38, docs
3.9: py39
3.10: py310
[testenv:docs]
basepython=python
allowlist_externals = mkdocs
commands= mkdocs build
[testenv]
extras =
dev
setenv =
PYTHONPATH = {toxinidir}
commands = pytest -s --cov-report=term-missing tests
- 每個(gè)[xxx]及其下方內(nèi)容組成一個(gè)章節(jié)(section),每個(gè)章節(jié)間使用空行作間隔。
- [tox]下面是全局性的配置項(xiàng)
- [xxx:yyy]繼承 xxx 的配置,同時(shí)其自身配置項(xiàng)的優(yōu)先級(jí)更高。
- 對(duì)于每個(gè)虛擬環(huán)境,可用的配置項(xiàng)很多,例如常用的有:description(描述信息)、basepython(Python解釋器版本)、deps(環(huán)境依賴項(xiàng))、commands(命令語(yǔ)句)等等。
tox 的工作流程:

- 配置(從figuration):加載配置文件(如 tox.ini),解析命令行參數(shù),讀取系統(tǒng)環(huán)境變量等
- 打包(packaging):可選的,對(duì)于帶有 setup.py 文件的項(xiàng)目,可以在這步去生成它的源發(fā)行版
- 創(chuàng)建虛擬環(huán)境:默認(rèn)使用 virtualenv 來創(chuàng)建虛擬環(huán)境,并根據(jù)配置項(xiàng)中的“deps”安裝所需的依賴項(xiàng),然后執(zhí)行配置好的命令(commands)
- 報(bào)告(report):匯總所有虛擬環(huán)境的運(yùn)行結(jié)果并羅列出來 安裝使用:
安裝:
使用tox-quickstart快速生成tox.ini,也可以根據(jù)模板手寫tox.ini文件
使用:
- 配置好文件后,可以tox 直接運(yùn)行,也可以tox -e test_api
- 如果在其他目錄下運(yùn)行,則需要tox -c /test/tox.ini -c是指定配置文件的意思

小結(jié):
tox 本身定位是一個(gè)測(cè)試工具,它試圖令 Python 測(cè)試工作變得自動(dòng)化、標(biāo)準(zhǔn)化與流程化。但跟 unittest 和 pytest 這些測(cè)試框架不同,它作用的是代碼層面之外的事情,是一種項(xiàng)目級(jí)的工具。因此,它需要跟這些測(cè)試框架相結(jié)合,或者同時(shí)處理多種自動(dòng)化任務(wù)(如跑 pep8、測(cè)代碼覆蓋率、生成文檔等等),這樣才能更好地發(fā)揮它的價(jià)值。
它的一大特色在于創(chuàng)建/管理虛擬環(huán)境,但這只是為了方便測(cè)試而使用的手段,因此相比其它可管理虛擬環(huán)境的工具,如 Virtualenvwrapper、conda、pipenv、poetry,它在某些方面就存在著不足。
到此這篇關(guān)于淺談Python任務(wù)自動(dòng)化工具Tox的文章就介紹到這了,更多相關(guān)Python任務(wù)自動(dòng)化工具Tox內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python任務(wù)自動(dòng)化工具tox使用教程
- Python實(shí)現(xiàn)Web服務(wù)器FastAPI的步驟詳解
- python調(diào)用kubernetesAPI簡(jiǎn)單使用方法
- Python調(diào)用騰訊API實(shí)現(xiàn)人臉身份證比對(duì)功能
- python使用mediapiple+opencv識(shí)別視頻人臉的實(shí)現(xiàn)
- Python語(yǔ)音識(shí)別API實(shí)現(xiàn)文字轉(zhuǎn)語(yǔ)音的幾種方法
- ?Python使用Mediapipe對(duì)圖像進(jìn)行手部地標(biāo)檢測(cè)
- Python?任務(wù)自動(dòng)化工具nox?的配置與?API詳情
相關(guān)文章
基于Django框架利用Ajax實(shí)現(xiàn)點(diǎn)贊功能實(shí)例代碼
點(diǎn)贊這個(gè)功能是我們現(xiàn)在經(jīng)常會(huì)遇到的一個(gè)功能,下面這篇文章主要給大家介紹了關(guān)于基于Django框架利用Ajax實(shí)現(xiàn)點(diǎn)贊功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08
python數(shù)據(jù)封裝json格式數(shù)據(jù)
本次內(nèi)容是小編在網(wǎng)上整理的關(guān)于如何python數(shù)據(jù)封裝json格式的內(nèi)容總結(jié),有興趣的讀者們參考下。2018-03-03
Python實(shí)現(xiàn)批量文件分類保存的示例代碼
當(dāng)我們電腦里面的文本或者或者文件夾太多了,有時(shí)候想找到自己想要的文件,只能通過去搜索文件名,這樣還是很麻煩的。本文將通過Python語(yǔ)言實(shí)現(xiàn)文件批量分類保存,需要的可以參考一下2022-04-04
python 實(shí)現(xiàn)在無(wú)序數(shù)組中找到中位數(shù)方法
這篇文章主要介紹了python 實(shí)現(xiàn)在無(wú)序數(shù)組中找到中位數(shù)方法,具有很好對(duì)參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03
詳解python實(shí)現(xiàn)數(shù)據(jù)歸一化處理的方式:(0,1)標(biāo)準(zhǔn)化
這篇文章主要介紹了詳解python實(shí)現(xiàn)數(shù)據(jù)歸一化處理的方式:(0,1)標(biāo)準(zhǔn)化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
在Django框架中運(yùn)行Python應(yīng)用全攻略
這篇文章主要介紹了在Django框架中運(yùn)行Python應(yīng)用全攻略,在這之前必須搭建好簡(jiǎn)單的視圖和模版,接下來便是本文中所述的核心內(nèi)容應(yīng)用配置,需要的朋友可以參考下2015-07-07
Python2.7環(huán)境Flask框架安裝簡(jiǎn)明教程【已測(cè)試】
這篇文章主要介紹了Python2.7環(huán)境Flask框架安裝方法,結(jié)合實(shí)例形式詳細(xì)分析了Python2.7環(huán)境下安裝Flask框架遇到的問題與相關(guān)解決方法、注意事項(xiàng),并給出了一個(gè)基本的測(cè)試示例,需要的朋友可以參考下2018-07-07
python實(shí)現(xiàn)代碼行數(shù)統(tǒng)計(jì)示例分享
這篇文章主要介紹了python實(shí)現(xiàn)代碼行數(shù)統(tǒng)計(jì)的示例,需要的朋友可以參考下2014-02-02

