乐趣区

关于spring:利用tox打造自动自动化测试框架

什么是 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

以上是执行过程以及测试后果,会生成 junit.xml 格局的测试报告,当然也能够应用 pytest-html 或者其余测试报告,都很不便。

欢送大家去 我的博客 瞅瞅,外面有更多对于测试实战的内容哦!!

退出移动版