什麼是tox
tox官方文件的第一句話 standardize testing in Python,意思就是說標準化python中的測試,那是不是很適合測試人員來使用呢,我們來看看他究竟是什麼?
根據官方文件的解釋,tox是一個管理測試虛擬環境的命令列工具,可以支援穿件隔離的python環境,在裡面可以安裝不同版本的python直譯器和專案的各種依賴庫,可以進行自動化測試、打包以及持續整合。
tox能做什麼
- 建立測試虛擬環境
- 執行靜態程式碼分析與測試工具
- 自動化構建包
- 針對 tox 構建的軟體包執行測試
- 檢查軟體包是否能在不同的 Python 版本/直譯器中順利安裝
- 統一持續整合(CI)和基於命令列的測試
怎麼配置tox
安裝tox
使用 pip install tox
安裝,在命令列執行tox -e envname執行指定的測試環境
tox配置
tox的行為既可以通過命令列來控制也可以通過配置檔案進行控制,支援有以下三種形式的配置檔案
-
pyproject.toml
-
tox.ini
-
setup.cfg
什麼是tox tox官方文件的第一句話 standardize testing in Python,意思就是說標準化python中的測試,那是不是很適合測試人員來使用呢,我們來看看他究竟是什麼? 根據官方文件的解釋,tox是一個管理測試虛擬環境的命令列工具,可以支援穿件隔離的python環境,在裡面可以安裝不同版本的python直譯器和專案的各種依賴庫,可以進行自動化測試、打包以及持續整合。 tox能做什麼 建立測試虛擬環境 執行靜態程式碼分析與測試工具 自動化構建包 針對 tox 構建的軟體包執行測試 檢查軟體包是否能在不同的 Python 版本/直譯器中順利安裝 統一持續整合(CI)和基於命令列的測試 怎麼配置tox 安裝tox 使用 pip install tox 安裝,在命令列執行tox -e envname執行指定的測試環境 tox配置 tox的行為既可以通過命令列來控制也可以通過配置檔案進行控制,支援有以下三種形式的配置檔案 pyproject.toml tox.ini setup.cfg
# tox (https://tox.readthedocs.io/) is a tool for running tests # in multiple virtualenvs. This configuration file will run the # tests suite on all supported python versions. To use it, "pip install tox" # and then run "tox" from this directory. [tox] envlist = py36 skipsdist = True # 設定pip源和依賴版本 indexserver = default = http://mirrors.aliyun.com/pypi/simple/ [testenv] deps = pytest records pymysql jinja2 requests objectpath arrow pytest-html redis install_command = pip install --trusted-host mirrors.aliyun.com {opts} {packages} [testenv:dev] setenv = env = dev ; 告訴tox在每個測試環境裡執行pytest commands = pytest --junitxml=junit-{envname}.xml ;只執行廣告相關的測試用例 [testenv:t_a] setenv = env = dev commands = pytest -v tests/ad--junitxml=junit-{envname}.xml ;只執行測試環境APP相關測試用例 ;只執行APP相關測試用例 [testenv:t_i] setenv = env = dev commands = pytest -v tests/ivwen --junitxml=junit-{envname}.xml [testenv:t1_i] setenv = env = t1 commands = pytest -v tests/ivwen --junitxml=junit-{envname}.xml [testenv:pro] setenv = env = pro ; 通過command line往環境變數裡寫測試還是線上的標識,config根據標識從環境變數裡去讀取指定檔案 ; 或者通過外掛的形式,能夠配置各個環境的檔案,根據命令列引數指定把那個檔案放入指定讀取目錄 command = pytest [testenv:smoke] [pytest] markers = smoke get addopts = -rsxX -l --tb=short --strict xfail_strict = true minversion = 3.0 norecursedirs = .* venv src *.egg dist build testpaths = tests python_classes = *Test Test* *Suit junit_family=xunit1 以上配置解釋如下: [tox]節點是對tox進行配置 envlist指定環境列表,多個環境用逗號隔開,比如py36,py37 skipsdist 指定tox在執行過程中跳過打包環節,因為當前這個專案沒有打包的需求,所以這裡設定為true,這個和自動化測試框架的設計有關。 indexserver 指定pip的安裝源 [testenv]節點是對測試環境進行配置,這個是根測試環境的配置,下面還可以對不同的測試環境進行配置,都可以繼承這個節點 deps 指定專案的python依賴的第三方包 install_command 定義pip安裝命令引數 [testenv:dev]這個節點是定義測試環境,繼承根環境配置 setenv 設定環境變數,在專案中可以讀取環境變數,從而決定要執行哪個環境的配置,比如tox -e dev,意思就是說在測試環境執行測試用例,tox -e prod在生產環境執行測試用例 commands 指定pytest的執行方式,其他環境的節點配置與此相似。 [pytest]節點可以對pytest進行配置 addopts 指定pytest的命令列引數 xfail_strict 設定預期失敗的case如果通過了,則標記為失敗 minversion 指定tox的最小版本 norecursedirs 指定哪些目錄不用遞迴查詢測試用例 testpaths 指定測試用例的搜尋目錄 python_classes 指定測試用例的搜尋規則 當然以上的配置只是tox一部分,還有很多,關注官方文件 tox專案實戰 下面我們以 tox、pytest打造一個自動化測試框架 專案搭建 新建一個api-auto-test資料夾,在資料夾裡新增一個tox.ini檔案,輸入上面的配置 再分別新建一個src和tests目錄,src用於存放封裝的一些共有的內容,tests用於存放測試用例 src目錄內容如下 ad和biz是對不同業務進行的封裝,裡面包括介面呼叫以及資料庫相關操作 common是各個業務模組公共的部分,包括請求傳送、資料庫連結基礎操作封裝、配置等,主要來看一下config的裡的內容: class Config: '''公共配置''' class DevConfig(Config): '''測試環境配置''' class ProdConfig(Config): '''生產環境配置''' # 環境切換 _MAPPING = { 'dev': DevConfig, 't1': T1Config, 'pro': ProConfig, } # 這裡根據tox設定的環境變數,來決定使用哪一個環境的配置,從而實現不同環境環境的切換 config = _MAPPING.get(os.getenv("env"), DevConfig) 執行測試用例 tox -e dev 如果對軟體測試有興趣,想了解更多的測試知識,解決測試問題,以及入門指導,幫你解決測試中遇到的困惑,歡迎關注【程式設計師張無忌】,公眾號專注軟體測試30年,更新軟體測試即時資訊。
以上配置解釋如下:
- [tox]節點是對tox進行配置
envlist指定環境列表,多個環境用逗號隔開,比如py36,py37
skipsdist 指定tox在執行過程中跳過打包環節,因為當前這個專案沒有打包的需求,所以這裡設定為true,這個和自動化測試框架的設計有關。
indexserver 指定pip的安裝源
- [testenv]節點是對測試環境進行配置,這個是根測試環境的配置,下面還可以對不同的測試環境進行配置,都可以繼承這個節點
deps 指定專案的python依賴的第三方包
install_command 定義pip安裝命令引數
- [testenv:dev]這個節點是定義測試環境,繼承根環境配置
setenv 設定環境變數,在專案中可以讀取環境變數,從而決定要執行哪個環境的配置,比如tox -e dev,意思就是說在測試環境執行測試用例,tox -e prod在生產環境執行測試用例
commands 指定pytest的執行方式,其他環境的節點配置與此相似。
- [pytest]節點可以對pytest進行配置
- addopts 指定pytest的命令列引數
- xfail_strict 設定預期失敗的case如果通過了,則標記為失敗
- minversion 指定tox的最小版本
- norecursedirs 指定哪些目錄不用遞迴查詢測試用例
- testpaths 指定測試用例的搜尋目錄
- python_classes 指定測試用例的搜尋規則
當然以上的配置只是tox一部分,還有很多,關注官方文件
tox專案實戰
下面我們以 tox、pytest打造一個自動化測試框架
專案搭建
-
新建一個api-auto-test資料夾,在資料夾裡新增一個tox.ini檔案,輸入上面的配置
-
再分別新建一個src和tests目錄,src用於存放封裝的一些共有的內容,tests用於存放測試用例
-
src目錄內容如下
ad和biz是對不同業務進行的封裝,裡面包括介面呼叫以及資料庫相關操作
common是各個業務模組公共的部分,包括請求傳送、資料庫連結基礎操作封裝、配置等,主要來看一下config的裡的內容:
class Config: '''公共配置''' class DevConfig(Config): '''測試環境配置''' class ProdConfig(Config): '''生產環境配置''' # 環境切換 _MAPPING = { 'dev': DevConfig, 't1': T1Config, 'pro': ProConfig, }
# 這裡根據tox設定的環境變數,來決定使用哪一個環境的配置,從而實現不同環境環境的切換
config = _MAPPING.get(os.getenv("env"), DevConfig)
-
執行測試用例
tox -e dev
以上是執行過程以及測試結果,會生成junit.xml格式的測試報告,當然也可以使用pytest-html或者其他測試報告,都很方便。
如果對軟體測試有興趣,想了解更多的測試知識,解決測試問題,以及入門指導,幫你解決測試中遇到的困惑,歡迎關注【程式設計師張無忌】,公眾號專注軟體測試30年,更新軟體測試即時資訊。