tox官方文檔的第一句話 standardize testing in Python,意思就是說標準化python中的測試,那是否是很適合測試人員來使用呢,咱們來看看他到底是什麼?html
根據官方文檔的解釋,tox是一個管理測試虛擬環境的命令行工具,能夠支持穿件隔離的python環境,在裏面能夠安裝不一樣版本的python解釋器和項目的各類依賴庫,能夠進行自動化測試、打包以及持續集成。python
使用pip install tox
安裝,在命令行執行tox -e envname運行指定的測試環境mysql
tox的行爲既能夠經過命令行來控制也能夠經過配置文件進行控制,支持有如下三種形式的配置文件redis
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
以上配置解釋以下:sql
envlist指定環境列表,多個環境用逗號隔開,好比py36,py37數據庫
skipsdist 指定tox在運行過程當中跳過打包環節,由於當前這個項目沒有打包的需求,因此這裏設置爲true,這個和自動化測試框架的設計有關。api
indexserver 指定pip的安裝源框架
deps 指定項目的python依賴的第三方包工具
install_command 定義pip安裝命令參數測試
setenv 設置環境變量,在項目中能夠讀取環境變量,從而決定要運行哪一個環境的配置,好比tox -e dev,意思就是說在測試環境運行測試用例,tox -e prod在生產環境運行測試用例
commands 指定pytest的運行方式,其餘環境的節點配置與此類似。
固然以上的配置只是tox一部分,還有不少,關注官方文檔
下面咱們以 tox、pytest打造一個自動化測試框架
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或者其餘測試報告,都很方便。
歡迎你們去 個人博客 瞅瞅,裏面有更多關於測試實戰的內容哦!!