什么是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 = py36skipsdist = True# 设置pip源和依赖版本indexserver = default = http://mirrors.aliyun.com/pypi/simple/[testenv]deps = pytest records pymysql jinja2 requests objectpath arrow pytest-html redisinstall_command = pip install --trusted-host mirrors.aliyun.com {opts} {packages}[testenv:dev]setenv = env = dev; 通知tox在每个测试环境里运行pytestcommands = pytest --junitxml=junit-{envname}.xml;只运行广告相干的测试用例[testenv:t_a]setenv = env = devcommands = pytest -v tests/ad--junitxml=junit-{envname}.xml;只运行测试环境APP相干测试用例;只运行APP相干测试用例[testenv:t_i]setenv = env = devcommands = pytest -v tests/ivwen --junitxml=junit-{envname}.xml[testenv:t1_i]setenv = env = t1commands = pytest -v tests/ivwen --junitxml=junit-{envname}.xml[testenv:pro]setenv = env = pro; 通过command line往环境变量里写测试还是线上的标识,config依据标识从环境变量里去读取指定文件; 或者通过插件的模式,可能配置各个环境的文件,依据命令行参数指定把那个文件放入指定读取目录command = pytest[testenv:smoke][pytest]markers = smoke getaddopts = -rsxX -l --tb=short --strictxfail_strict = trueminversion = 3.0norecursedirs = .* venv src *.egg dist buildtestpaths = testspython_classes = *Test Test* *Suitjunit_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
以上是执行过程以及测试后果,会生成junit.xml格局的测试报告,当然也能够应用pytest-html或者其余测试报告,都很不便。
欢送大家去 我的博客 瞅瞅,外面有更多对于测试实战的内容哦!!