什么是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年,更新软件测试即时资讯。

如何利用tox打造自动自动化测试框架,看完就懂的更多相关文章

  1. 利用tox打造自动自动化测试框架

    什么是tox tox官方文档的第一句话 standardize testing in Python,意思就是说标准化python中的测试,那是不是很适合测试人员来使用呢,我们来看看他究竟是什么? 根据 ...

  2. 深度剖析HashMap的数据存储实现原理(看完必懂篇)

    深度剖析HashMap的数据存储实现原理(看完必懂篇) 具体的原理分析可以参考一下两篇文章,有透彻的分析! 参考资料: 1. https://www.jianshu.com/p/17177c12f84 ...

  3. [转帖]Linux shell中2>&1的含义解释 (全网最全,看完就懂)

    Linux shell中2>&1的含义解释 (全网最全,看完就懂) https://blog.csdn.net/zhaominpro/article/details/82630528   ...

  4. 2018前端面试总结,看完弄懂,工资少说加3K | 掘金技术征文

    2018前端面试总结,看完弄懂,工资少说加3K | 掘金技术征文:https://juejin.im/post/5b94d8965188255c5a0cdc02

  5. 打造轻量级自动化测试框架WebZ

    一.什么是WebZ WebZ是我用Python写的“关键字驱动”的自动化测试框架,基于WebDriver. 设计该框架的初衷是:用自动化测试让测试人员从一些简单却重复的测试中解放出来.之所以用“关键字 ...

  6. java回调函数,看完就懂

    java回调函数在网上了看了些例子,比较绕,不够清晰,自己写的一个例子比较通俗,java回调其实很简单. 举个例子我是类B,我有个方法叫b(),现在我要调用类A中的方法a(),写个代码就是: publ ...

  7. 看完肯定懂的 Java 字符串常量池指南

    字符串问题可谓是 Java 中经久不衰的问题,尤其是字符串常量池经常作为面试题出现.可即便是看似简单而又经常被提起的问题,还是有好多同学一知半解,看上去懂了,仔细分析起来却又发现不太明白. 背景说明 ...

  8. NB-IoT的DRX、eDRX、PSM三个模式怎么用?通俗解释,看完就懂!

    面我们讲了不少NB-IOT的应用.软件和硬件设计的变动. (链接在文章末尾). 今天讲讲NB-IoT的三大模式,在各种物联网和智能硬件场景中的使用方法 DRX.eDRx.PSM是什么? DRX虽然叫做 ...

  9. 盘点一下Github上开源的Java面试/学习相关的仓库,看完弄懂薪资至少增加10k

    最近浏览 Github ,收藏了一些还算不错的 Java面试/学习相关的仓库,分享给大家,希望对你有帮助.我暂且按照目前的 Star 数量来排序. 本文由 SnailClimb 整理,如需转载请联系作 ...

随机推荐

  1. script写在head与写在body中的区别

    咱先说将Javascript写在head里面的情况吧,如果你要在这里面去操控DOM元素,是会报错的,因为浏览器是先执行head标签里面的内容,在执行时你的DOM元素还没有生成.(使用了windows. ...

  2. Docker(六)容器数据卷

    容器数据卷 docker的理念回顾 将应用和环境打包成一个镜像 需求:数据可以持久化和同步 使用数据卷 指定路径挂载 docker run -it -v 主机目录:容器内目录 # 测试 [root@h ...

  3. 什么是JSTL标签库?

    什么是JSTL? JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的. 有什么作用? ...

  4. 利用搭载好的工控机环境跑yolov3-tiny

    辛辛苦苦搭载好GPU环境现在要开始测试下效果 1,准备好数据集 2,测试开始 (1),如果尚未安装Darknet,则应先进行安装 git clone https://github.com/pjredd ...

  5. js中取el表达式问题

    例如常用的${pageContext.request.contextPath} 如果需要在js中用到 分两种情况: 如果js是直接写在jsp中 可以直接写el表达式 例如: 如果js是写在外部,jsp ...

  6. Alink漫谈(十) :特征工程 之 特征哈希/标准化缩放

    Alink漫谈(十) :特征工程之特征哈希/标准化缩放 目录 Alink漫谈(十) :特征工程之特征哈希/标准化缩放 0x00 摘要 0x01 相关概念 1.1 特征工程 1.2 特征缩放(Scali ...

  7. 在执行 pip install 时遇到错误:python setup.py egg_info ...

    最近重新安装win10 64位专业版, 正好遇到python3.8发布,试了一下.结果jupyter都安装不了...心碎. ERROR: Command errored out with exit s ...

  8. python学习笔记之函数(方法)(四)

    一.函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,编程中的函数在英文中也有很多不同的叫法.在C中叫function,在Java里面叫做method. 定义: ...

  9. Django---进阶5

    目录 单表操作 必知必会13条 测试脚本 查看内部sql语句的方式 神奇的双下划线查询 一对多外键增删改查 多对多外键增删改查 正反向的概念 多表查询 子查询(基于对象的跨表查询) 联表查询(基于双下 ...

  10. rabbitmq部署及配置与验证

    1. 场景描述 朋友项目需要弄个测试环境,稍微帮忙了下,系统不复杂,但是需要自己安装mysql.Reids.Es.RabbitMq等,Mq主要用在同步用户信息与发送站内消息和短信上,RabbitMq以 ...