首頁 >後端開發 >Python教學 >Python 任務自動化工具 tox 教學課程

Python 任務自動化工具 tox 教學課程

王林
王林轉載
2023-04-19 17:49:061373瀏覽

Python 任務自動化工具 tox 教學課程

  •   Command line driven CI frontend and development task automation tool
  •  命令列驅動程式的CI 前端與開發任務自動化工具

tox 的專案位址是:https://github.com/tox-dev/tox

其核心作用是支援創建隔離的Python 環境,在裡面可以安裝不同版本的Python 解釋器與各種依賴函式庫,以此方便開發者做自動化測試、包裝、持續整合等事情。

簡單來說,tox 是一個管理測試虛擬環境的命令列工具。它已存在多年且廣被開發者們使用,例如,著名的雲端運算平台 OpenStack 也採用了它,作為最基礎的測試工具之一。

1、tox 能做什麼?

細分的用途包括:

  •  建立開發環境
  •  執行靜態程式碼分析與測試工具
  •  自動化建置套件
  •  針對tox 建置的軟體套件執行測試
  •  檢查軟體套件是否能在不同的Python 版本/解譯器中順利安裝
  •  統一持續整合(CI)和基於命令列的測試
  •  建立和部署專案文件
  •  將軟體包發佈到PyPI 或任何其它平台

tox 官方文件中列出了40 餘種使用場景的範例,詳細的清單可查看:https://tox.readthedocs.io/en/latest/examples. html

Python 任務自動化工具 tox 教學課程

2、tox 怎麼配置?

關於它的用法:使用pip install tox 安裝,使用tox 運行全部測試環境,和tox -e envname 運行指定的環境。還有不少的命令列參數,透過tox -h 查看。

tox 的行為由其設定檔控制,目前它支援3 個設定檔:

  1.  pyproject.toml
  2.  tox.ini
  3.  setup.cfg

以tox 專案自己的tox.ini 設定內容為例,可以看到它是這樣配置的(https:// github.com/tox-dev/tox/blob/master/tox.ini):

Python 任務自動化工具 tox 教學課程

Python 任務自動化工具 tox 教學課程

每個[xxx ]及其下方內容組成一個章節(section),每個章節間使用空行作間隔。

[tox]下面是全域性的設定項,envlist 欄位定義了 tox 去操作的環境。 [xxx]下面是 xxx 虛擬環境的配置項,[xxx:yyy]繼承 xxx 的配置,同時其自身配置項的優先權更高。

對於每個虛擬環境,可用的配置項目很多,例如常用的有:description(描述資訊)、basepython(Python解釋器版本)、deps(環境依賴項)、commands(命令語句)等等。

tox 也支援作變數替換,它提供了一些內建的基礎變數(全域的或虛擬環境的):{toxinidir}、{homedir}、{envname}、{envdir}等等。

除了基礎性的變數替換,它也支援這些高階用法:

  • # 取作業系統的環境變數:{env:KEY},效果等同於os.environ['KEY'] 。可以變化成:{env:KEY:DEFAULTVALUE},在取不到環境變數時則使用預設值;{env:KEY:{env:DEFAULT_OF_KEY}},達到if-else 的值效果

   傳遞命令列參數:{posargs:DEFAULTS},當沒有命令列參數時,使用DEFAULTS 值。使用方式:tox arg1 arg2 傳兩個參,或tox -- --opt1 arg1 將「-- opt1 arg1」整體傳入。

  •  章節間傳值:{[sectionname]valuename},不同章節的內容可以傳遞使用。
  •  互動式控制台注入:{tty:ON_VALUE:OFF_VALUE},當互動式 shell 控制台開啟時,使用第一個值,否則使用第二個。 pytest 在使用「--pdb」時,就是這樣的例子。

花括號「{}」除了可以做變數替換使用,它還可以作為「或關係」判斷的取值。直接看下面的範例:

[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

3、tox 的插件化

除了自身強大的可配置性,tox 還具有很強的可擴展性,它是可插拔的(pluggable),圍繞著它產生了一個極為豐富的插件生態。

使用pip search tox ,可以看到數量眾多的「tox-」開頭的函式庫,它們都是 tox 的插件包。其中不乏 setuptools、pipenv、conda、travis、pytest、docker 等被大家熟知的名字。

Python 任務自動化工具 tox 教學課程

tox 開放了挺多的 API 接口,方便其他人自訂開發插件。

Python 任務自動化工具 tox 教學課程

4、tox 的工作流程

接下來看看tox 是怎麼運作的:

Python 任務自動化工具 tox 教學課程

其工作流程中主要的環節有:

  • # 設定(從figuration):載入設定檔(如tox.ini),解析指令行參數,讀取系統環境變數等
  •  打包(packaging):可選的,對於有setup.py 檔案的項目,可以在這步驟去產生它的來源發行版
  •  建立虛擬環境:預設使用virtualenv 來建立虛擬環境,並根據設定項中的「deps」安裝所需的依賴項,然後執行已設定好的指令(commands)
  • #報告(report):總結所有虛擬環境的運行結果並羅列出來

5、小結

tox 本身定位是一個測試工具,它試圖令Pytho 測試工作變得自動化、標準化與流程化。但跟 unittest 和 pytest 這些測試框架不同,它作用的是程式碼層面以外的事情,是一種專案級的工具。因此,它需要跟這些測試框架結合,或同時處理多種自動化任務(如跑 pep8、測程式碼覆蓋率、產生文件等等),這樣才能更好地發揮它的價值。

它的一大特色在於創建/管理虛擬環境,但這只是為了方便測試而使用的手段,因此相比其它可管理虛擬環境的工具,如Virtualenvwrapper、conda、pipenv、 poetry,它在某些方面就存在著不足。

tox 還有強大的可配置性與豐富的插件支持,這使得它在運用上具有很大的可能性與自由度。因此,不少忠實開發者仍在持續地在使用它,例如,我剛翻譯好的系列文章的作者就是它的維護者之一。

Python 任務自動化工具 tox 教學課程

最後還需補充一點,tox 使用設定檔作驅動,但檔案還是挺繁瑣的,因此有人開發了一個跟tox 相似的nox,使用Python 檔案來做配置。這個項目也很受歡迎,吸引了許多項目投入其門下,例如 pipx、urllib3、Salt 等等。對該專案感興趣的話,請查看:https://nox.thea.codes/en/stable。

以上是Python 任務自動化工具 tox 教學課程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除