tox 的專案位址是:https://github.com/tox-dev/tox
其核心作用是支援創建隔離的Python 環境,在裡面可以安裝不同版本的Python 解釋器與各種依賴函式庫,以此方便開發者做自動化測試、包裝、持續整合等事情。
簡單來說,tox 是一個管理測試虛擬環境的命令列工具。它已存在多年且廣被開發者們使用,例如,著名的雲端運算平台 OpenStack 也採用了它,作為最基礎的測試工具之一。
細分的用途包括:
tox 官方文件中列出了40 餘種使用場景的範例,詳細的清單可查看:https://tox.readthedocs.io/en/latest/examples. html
關於它的用法:使用pip install tox 安裝,使用tox 運行全部測試環境,和tox -e envname 運行指定的環境。還有不少的命令列參數,透過tox -h 查看。
tox 的行為由其設定檔控制,目前它支援3 個設定檔:
以tox 專案自己的tox.ini 設定內容為例,可以看到它是這樣配置的(https:// github.com/tox-dev/tox/blob/master/tox.ini):
每個[xxx ]及其下方內容組成一個章節(section),每個章節間使用空行作間隔。
[tox]下面是全域性的設定項,envlist 欄位定義了 tox 去操作的環境。 [xxx]下面是 xxx 虛擬環境的配置項,[xxx:yyy]繼承 xxx 的配置,同時其自身配置項的優先權更高。
對於每個虛擬環境,可用的配置項目很多,例如常用的有:description(描述資訊)、basepython(Python解釋器版本)、deps(環境依賴項)、commands(命令語句)等等。
tox 也支援作變數替換,它提供了一些內建的基礎變數(全域的或虛擬環境的):{toxinidir}、{homedir}、{envname}、{envdir}等等。
除了基礎性的變數替換,它也支援這些高階用法:
傳遞命令列參數:{posargs:DEFAULTS},當沒有命令列參數時,使用DEFAULTS 值。使用方式:tox arg1 arg2 傳兩個參,或tox -- --opt1 arg1 將「-- opt1 arg1」整體傳入。
花括號「{}」除了可以做變數替換使用,它還可以作為「或關係」判斷的取值。直接看下面的範例:
[tox] envlist = {py27,py36}-django{15,16}
{py27,py36}-django{15,16} 的2 組花括號內各有2 個值,它們實際上可以組合成4 個環境:py27-django15、 py27-django16、py36-django15、py36-django16。
關於tox 有哪些設定項、使用條件、什麼意義、進階用法等等內容,可在官方文件中查看:https://tox.readthedocs.io/en/latest/config .html
除了自身強大的可配置性,tox 還具有很強的可擴展性,它是可插拔的(pluggable),圍繞著它產生了一個極為豐富的插件生態。
使用pip search tox ,可以看到數量眾多的「tox-」開頭的函式庫,它們都是 tox 的插件包。其中不乏 setuptools、pipenv、conda、travis、pytest、docker 等被大家熟知的名字。
tox 開放了挺多的 API 接口,方便其他人自訂開發插件。
接下來看看tox 是怎麼運作的:
其工作流程中主要的環節有:
tox 本身定位是一個測試工具,它試圖令Pytho 測試工作變得自動化、標準化與流程化。但跟 unittest 和 pytest 這些測試框架不同,它作用的是程式碼層面以外的事情,是一種專案級的工具。因此,它需要跟這些測試框架結合,或同時處理多種自動化任務(如跑 pep8、測程式碼覆蓋率、產生文件等等),這樣才能更好地發揮它的價值。
它的一大特色在於創建/管理虛擬環境,但這只是為了方便測試而使用的手段,因此相比其它可管理虛擬環境的工具,如Virtualenvwrapper、conda、pipenv、 poetry,它在某些方面就存在著不足。
tox 還有強大的可配置性與豐富的插件支持,這使得它在運用上具有很大的可能性與自由度。因此,不少忠實開發者仍在持續地在使用它,例如,我剛翻譯好的系列文章的作者就是它的維護者之一。
最後還需補充一點,tox 使用設定檔作驅動,但檔案還是挺繁瑣的,因此有人開發了一個跟tox 相似的nox,使用Python 檔案來做配置。這個項目也很受歡迎,吸引了許多項目投入其門下,例如 pipx、urllib3、Salt 等等。對該專案感興趣的話,請查看:https://nox.thea.codes/en/stable。
以上是Python 任務自動化工具 tox 教學課程的詳細內容。更多資訊請關注PHP中文網其他相關文章!