那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用tox來實現Python中的標準化和自動化測試

jf_pJlTbmA9 ? 來源:NVIDIA ? 作者:NVIDIA ? 2023-07-05 16:30 ? 次閱讀

許多開發人員使用 tox 作為 Python 中標準化和自動化測試的解決方案。然而,僅將該工具用于測試自動化嚴重限制了其功能和您可以實現的全部范圍。例如, tox 也是“它在我的機器上工作”問題的一個很好的解決方案。這有幾個原因,例如:

可以針對不同的 Python 依賴項版本運行測試

可以隔離環境變量

可以捕獲并運行設置命令

此外,最重要的是,上面列出的操作可以在 Windows 、 macOS 和 Linux OS 上執行。在本教程中,我將深入探討 tox 的工作原理以及如何使用它來節省寶貴的資源。我還將提供具體的代碼示例來演示如何利用 tox 。

什么是 Tox?

如果你讀了 tox documentation ,并從字面上理解它的意思,你可能會認為 tox 只是一個用來創建虛擬環境的工具,用來安裝測試 Python 包所需的必要依賴項。

該文檔指出,“ tox 旨在自動化和標準化 Python 中的測試。它是簡化 Python 軟件的打包、測試和發布過程的更大愿景的一部分。”該文檔后來指出,“ tox 是一個通用的virtualenv管理和測試命令行工具。”。同一文檔中的幾個示例演示了 tox 用于構建文檔和運行開發環境。

然而,最好將 tox 視為自動化某些工作流和管理虛擬環境的工具。 tox 文檔中提供的示例配置文件如下所示。

# content of: tox.ini , put in same dir as setup.py
[tox]
envlist = py27,py36

[testenv]
# install pytest in the virtualenv where commands will be executed
deps = pytest
commands =
    # NOTE: you can run any command line tool here - not just tests
    pytest

請注意,該文件僅安裝并運行 Pytest ;然而,文檔指出,“您可以在這里運行任何命令行工具,而不僅僅是測試。”

tox 是如何工作的?

tox 文檔的 System Overview 部分提供了一個工作流圖(圖 1 )。該圖顯示了 tox 如何通過將工作流分解為一系列步驟來工作,概述如下。

使用tox.ini文件中定義的 Python 版本生成虛擬環境。

將tox.ini文件的deps設置下列出的依賴項安裝到虛擬環境中。如果創建了一個項目(可選),它還將安裝該項目的sdist。

在隔離的虛擬環境中運行命令;命令列在命令設置下。

將每個環境的結果返回給用戶。

tox-environment-diagram.png 圖 1 。 tox 的工作流程圖。信貸: tox documentation

這些步驟進一步表明, tox 是一個有效的開發工具,可以通過創建虛擬環境并在其中運行命令來自動化工作流。由于您可以傳遞給 tox 的命令不限于執行測試的命令,因此 tox 不僅僅是標準化和自動化測試的工具。

tox 的好處

本節重點介紹了使用 tox 管理虛擬環境和自動化工作流(包括測試)的一些好處。

簡化協作

每次我接到工作面試的帶回家任務時,我都會使用 tox 。為了訪問任務,招聘公司的開發人員只需要安裝并運行 tox 。與團隊合作時也是如此。團隊成員不需要復制環境或安裝依賴項。所有這些任務都在tox.ini文件中處理。

促進持續集成

如果沒有 tox ,您的持續集成( CI )腳本必須同時處理虛擬環境的創建和包依賴項的安裝。這意味著沒有 tox 構建的 CI 腳本更加復雜。下文將對此進行更詳細的探討。

降低依賴關系沖突的風險

對于每個任務, tox 都會創建一個新的虛擬環境。這減少了依賴沖突的機會。例如,運行應用程序和執行應用程序所需的依賴項可以分別安裝到兩個獨立的虛擬環境中。

Tox 學的一個主要弱點出現在當地發展過程中;也就是說,它無法跟蹤依賴關系的變化。因此,每次進行更改時,都必須重新創建毒性環境。這是通過在執行 tox 時傳遞-r標志來完成的(py -m tox -r)。

簡單的 tox 用例示例

為了掌握 tox ,我創建了一個簡單的示例,您可以從 kurtispykes/tox_example GitHub 存儲庫中克隆。跟隨學習如何使用 tox 。

├── __init__.py
├── .gitignore
├── LICENSE
├── README.md
├── string_reversal.py
├── test_string_reversal.py
├── tox.ini

tox 生態系統的中心是配置文件,它可能有以下三種風格之一:

tox.ini
setup.cfg
pyproject.toml

本例使用tox.ini配置 tox 。內容如下:

[tox]
envlist = my_env
skipsdist = true

[testenv]
deps = pytest
commands = pytest

INI File Structure 指出,使用.ini擴展名的配置文件“由部分組成,每個部分由[section]標頭開頭,后跟由特定字符串分隔的鍵/值條目(默認情況下為=或:)?!?/p>

在 tox 中,節標題轉換為新的 tox 環境。但是,請注意本例中的[tox]標頭。標頭配置 tox 運行的全局設置。您可以告訴 tox 使用不同版本的 Python 來執行此標頭中的測試。

[tox]標題包含兩項:

envlist–通知 tox 從命令行運行py -m tox時要執行的環境。在本例中,envlist被命名為my_env。在最初的 tox 運行之后,其他運行將執行得更快,因為 tox 會跟蹤虛擬環境的詳細信息,不會重新創建或重新安裝依賴項。

skipsdist–當沒有setup.py或pyproject.toml時,將skipsdist標志設置為真。如果未設置,將導致錯誤。

請注意,您還可以通過添加要測試的版本( py27 , py37 ),根據不同版本的 Python 測試包。您必須在您的環境中安裝要測試包的 Python 版本,否則將引發錯誤。

[testenv]和[testenv:NAME]標頭用于定義 tox 的測試環境,其中NAME是特定環境的名稱。[testenv]中定義的設置(稱為頂層)將由各個環境自動繼承,除非您覆蓋這些設置。

本示例不定義單個環境,但設置了以下兩項:

deps–執行代碼所需的依賴項。

commands–作為當前測試環境的一部分要觸發的命令。

現在定義了配置,您可以創建并測試一個模塊來演示 tox 的作用。為本示例創建的模塊是string_reversal.py,其中包含用于反轉字符串的函數。

# The contents of string_reversal.py
def reverse_string(text):
    reverse_text = text[::-1]
    return reverse_text

要測試模塊是否正常工作,請使用以下test_string_reversal.py腳本:

# The contents of test_string_reversal.py
from string_reversal import reverse_string

def test_calculate_age():
    # Given
    text = "Hello World!"

    # When
    reversed = reverse_string(text)

    # Then
    assert reversed == "!dlroW olleH"

下一步是從存儲tox.ini文件的同一目錄運行 tox 。在命令行中,使用以下命令運行 tox :

py -m to

輸出應該類似于圖 2 所示。

output-run-success-in-tox-environment.png 圖 2 :成功的毒殺記錄

雖然本示例使用 Pytest ,但您可以使用任何其他庫來測試模塊。事實上,您可以執行任意命令。

創建機器學習

您還可以將 tox 擴展到各種場景。例如, machine learning ( ML )模型基于交易數據進行訓練,以預測欺詐交易何時發生。請參閱 kurtispykes/fraud-detection-project GitHub repo 中的完整代碼。 ML 模型包的頂層結構如下所示:

├── fraud_detection_model # Contains the code required to build the model
├── requirements
│   ├── requirements.txt
│   ├── test_requirements.txt
├── tests # Contains the unit tests for the model
├── LICENSE
├── MANIFEST.in
├── mypy.ini
├── publish_model.sh
├── pyproject.toml 
├── setup.py
├── tox.ini

構建這個 ML 模型包需要幾個依賴項。要更好地管理包依賴關系,請創建requirements.txt文件。

這個項目的 tox 配置文件包括幾個可以運行 tox 的環境。這些單獨的環境從獲取模型訓練所需的數據到將訓練后的模型發布到 Gemfury 存儲庫。這進一步表明, tox 可以是管理虛擬環境的有用工具。tox.ini文件中的一些配置如下所示。

# Part of the tox.ini file; click on the GitHub link to view the entire file
[tox]
envlist = test_package, typechecks, stylechecks, lint
skipsdist = True

[testenv]
install_command = pip install {opts} {packages}

passenv =
	KAGGLE_USERNAME
	KAGGLE_KEY
	GEMFURY_PUSH_URL

[testenv:test_package]
deps =
	-rrequirements/test_requirements.txt

setenv =
	PYTHONPATH=.
	PYTHONHASHSEED=0

commands=
	python fraud_detection_model/train_pipeline.py
	pytest 
	-s 
	-vv 
	{posargs:tests/}

[testenv:train]
envdir = {toxworkdir}/test_package
deps =
	{[testenv:test_package]deps}

setenv =
	{[testenv:test_package]setenv}

commands=
	python fraud_detection_model/train_pipeline.py

[testenv:fetch_data]
envdir = {toxworkdir}/test_package

setenv = {[testenv:test_package]setenv}

commands =
	# fetch
	kaggle competitions download -c ieee-fraud-detection  -p ./fraud_detection_model/data/interim
	# unzip
	unzip ./fraud_detection_model/data/interim/ieee-fraud-detection.zip -d ./fraud_detection_model/data/interim

[testenv:publish_model]
envdir = {toxworkdir}/test_package
deps =
	{[testenv:test_package]deps}

setenv =
	{[testenv:test_package]setenv}

commands=
	python fraud_detection_model/train_pipeline.py
	./publish_model.sh .

請注意,由于添加了setup.py文件,因此skipsdist參數可以從全局 tox 標頭中刪除。在這種情況下,它沒有被刪除,因為在打包模型之前, tox 仍然被用于管理虛擬環境。

您可能會注意到,全局envlist(在[tox]標頭中)調用test_package、typechecks、stylechecks、lint。當從命令行調用py -m tox時,將創建每個環境,并執行每個環境中的命令。

要選擇獨立運行的特定環境,請使用以下命令:框架的全部功能。相反,最好將 tox 視為自動化某些工作流和管理虛擬環境的工具。

py -m tox -e NAME

NAME是您希望 tox 創建的testenv的名稱。

生產中使用 tox 的注意事項

各種 CI 平臺與 tox 集成得非常好。 ML 模型示例使用 CircleCI 進行連續集成。 Circle CI 配置文件調用 tox ,而不是直接創建多個虛擬環境。

總結

這篇文章解釋了如何使用 tox 來實現 Python 中的標準化和自動化測試。僅將 tox 用于自動化測試嚴重未充分利用框架的全部功能。相反,最好將 tox 視為自動化某些工作流和管理虛擬環境的工具。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • NVIDIA
    +關注

    關注

    14

    文章

    5076

    瀏覽量

    103718
  • 自動化
    +關注

    關注

    29

    文章

    5622

    瀏覽量

    79660
  • 標準化
    +關注

    關注

    1

    文章

    30

    瀏覽量

    8068
收藏 人收藏

    評論

    相關推薦

    語言自動化識別器 Polyglot

    語言自動化識別器 Polyglot V3.38介紹:該軟件是一個語言自動化語言識別器軟件。推出400種語言。可以采用統一的字符編碼標準和美國國家標準化組織編碼
    發表于 09-02 12:13

    封裝如何標準化

    封裝標準化封裝標準化封裝標準化
    發表于 11-07 15:45

    開關電源自動化測試系統的設計與實現

      摘 要: 按照以軟件為核心的模塊系統構架,設計并實現了新一代開關電源自動化測試系統。該系統能自動完成開關電源功能
    發表于 11-29 16:59

    python變量的標準化

    python 數據分析基礎 day17-對模型自變量進行標準化
    發表于 10-21 14:40

    如何對用戶界面進行自動化測試

    按鍵操作)的自動化, 可以實現完全的自動化測試。 如下圖所示,界面測試螞蟻機器人自動控制相機拍攝
    發表于 03-06 19:57

    python控制CANoe實現自動化測試的方法

    ”完成了python控制CANoe實現自動化測試。那么,python能控制釘釘么?答案是可以的。那么用py
    發表于 12-29 08:12

    LabVIEW與Tektronix示波器實現電源測試自動化

    和Tektronix示波器解決了電源測試的實際問題,實現測試過程的自動化、高效和精確
    發表于 12-09 20:37

    自動化測試框架unittes詳解

    測試框架,不妨“軟為硬用”。這里就基于python自動化測試框架unittest實現一個簡
    的頭像 發表于 05-20 14:47 ?2985次閱讀

    測試自動化Python

      用于測試的編程需要與開發應用程序的編程不同的方法。如果你想要一種專門用于測試編碼的簡單而精簡的語言,Python 是一個不錯的選擇。Python
    的頭像 發表于 12-09 14:53 ?868次閱讀

    使用Python實現功能測試自動化

    單的單元測試到復雜的功能測試測試。根據Future Market Insights集團發布的一份報告,到14年底,全球自動化測試市場預計將
    的頭像 發表于 05-04 11:20 ?881次閱讀
    使用<b class='flag-5'>Python</b><b class='flag-5'>實現</b>功能<b class='flag-5'>測試</b><b class='flag-5'>自動化</b>

    python自動化測試攻城記

    本文介紹實施自動化測試需要具備的技能及具體實踐流程。
    的頭像 發表于 08-16 11:39 ?1159次閱讀
    <b class='flag-5'>python</b><b class='flag-5'>自動化</b><b class='flag-5'>測試</b>攻城記

    Facebook群組自動化python – 網絡自動化

    電子發燒友網站提供《Facebook群組自動化python – 網絡自動化.zip》資料免費下載
    發表于 07-05 14:26 ?0次下載
    Facebook群組<b class='flag-5'>自動化</b><b class='flag-5'>python</b> – 網絡<b class='flag-5'>自動化</b>

    Python 模擬鍵盤鼠標的方式實現自動化

    在某些情況下,如果我們需要進行自動化操作的應用沒有提供相應的接口,我們無法直接通過Python調用API實現自動化。這種情況下,
    的頭像 發表于 11-02 14:48 ?1467次閱讀
    <b class='flag-5'>Python</b> 模擬鍵盤鼠標的方式<b class='flag-5'>實現</b><b class='flag-5'>自動化</b>

    電源測試怎么自動化?電源模塊自動化測試系統如何實現?

    納米軟件在電測行業深耕十余年,在行業的大背景下,為了進一步完善自動化測試,開發出了新的智能的電源模塊自動化測試系統ATECLOUD-POW
    的頭像 發表于 12-15 14:40 ?964次閱讀
    電源<b class='flag-5'>測試</b>怎么<b class='flag-5'>自動化</b>?電源模塊<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>系統如何<b class='flag-5'>實現</b>?

    開關電源自動化測試設備:如何實現自動化測試

    開關電源自動化測試設備是將測試軟件和測試硬件集成在一個電源測試的ate
    的頭像 發表于 08-30 18:19 ?1389次閱讀
    開關電源<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>設備:如何<b class='flag-5'>實現</b><b class='flag-5'>自動化</b><b class='flag-5'>測試</b>?
    bet365 备用网址| 赌博游戏机破解方法| 鼎龙娱乐城开户| 皇冠信用网| 99棋牌游戏| 百家乐官网存1000送| 百家乐香港六合彩| 大发888娱乐城电话| 太阳城百家乐官网的分数| 百家乐揽子打法| 新利娱乐| 自贡百家乐官网赌场娱乐网规则 | 7人百家乐中号桌布| 维西| 百家乐官网影院| bet365赞助球队| 至尊百家乐官网20| 澳门百家乐官网| 百家乐官网娱乐开户| 百家乐庄河闲的赌法| 大发888 赌博网站| 真人百家乐官网什么平台| 百家乐是骗人的| 豪门网上娱乐| 百家乐龙虎规则| 盛世国际娱乐| 百家乐信誉好的平台| 壹贰博备用网址| 九运2024年-2043年| 香港六合彩开奖记录| 百家乐园游戏庄闲| 枣阳市| 百家乐筹码素材| 爱博彩论坛| 百家乐的玩法和技巧| 永胜县| 东莞百家乐的玩法技巧和规则| 百家乐官网楼梯缆大全| 大发888游戏平台 送1688元礼金领取lrm| 卢克索百家乐官网的玩法技巧和规则| 澳门金沙官网|