如何利用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
- 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打造自动自动化测试框架,看完就懂的更多相关文章
- 利用tox打造自动自动化测试框架
什么是tox tox官方文档的第一句话 standardize testing in Python,意思就是说标准化python中的测试,那是不是很适合测试人员来使用呢,我们来看看他究竟是什么? 根据 ...
- 深度剖析HashMap的数据存储实现原理(看完必懂篇)
深度剖析HashMap的数据存储实现原理(看完必懂篇) 具体的原理分析可以参考一下两篇文章,有透彻的分析! 参考资料: 1. https://www.jianshu.com/p/17177c12f84 ...
- [转帖]Linux shell中2>&1的含义解释 (全网最全,看完就懂)
Linux shell中2>&1的含义解释 (全网最全,看完就懂) https://blog.csdn.net/zhaominpro/article/details/82630528 ...
- 2018前端面试总结,看完弄懂,工资少说加3K | 掘金技术征文
2018前端面试总结,看完弄懂,工资少说加3K | 掘金技术征文:https://juejin.im/post/5b94d8965188255c5a0cdc02
- 打造轻量级自动化测试框架WebZ
一.什么是WebZ WebZ是我用Python写的“关键字驱动”的自动化测试框架,基于WebDriver. 设计该框架的初衷是:用自动化测试让测试人员从一些简单却重复的测试中解放出来.之所以用“关键字 ...
- java回调函数,看完就懂
java回调函数在网上了看了些例子,比较绕,不够清晰,自己写的一个例子比较通俗,java回调其实很简单. 举个例子我是类B,我有个方法叫b(),现在我要调用类A中的方法a(),写个代码就是: publ ...
- 看完肯定懂的 Java 字符串常量池指南
字符串问题可谓是 Java 中经久不衰的问题,尤其是字符串常量池经常作为面试题出现.可即便是看似简单而又经常被提起的问题,还是有好多同学一知半解,看上去懂了,仔细分析起来却又发现不太明白. 背景说明 ...
- NB-IoT的DRX、eDRX、PSM三个模式怎么用?通俗解释,看完就懂!
面我们讲了不少NB-IOT的应用.软件和硬件设计的变动. (链接在文章末尾). 今天讲讲NB-IoT的三大模式,在各种物联网和智能硬件场景中的使用方法 DRX.eDRx.PSM是什么? DRX虽然叫做 ...
- 盘点一下Github上开源的Java面试/学习相关的仓库,看完弄懂薪资至少增加10k
最近浏览 Github ,收藏了一些还算不错的 Java面试/学习相关的仓库,分享给大家,希望对你有帮助.我暂且按照目前的 Star 数量来排序. 本文由 SnailClimb 整理,如需转载请联系作 ...
随机推荐
- 入门大数据---HDFS-HA搭建
一.简述 上一篇了解了Zookeeper和HDFS的一些概念,今天就带大家从头到尾搭建一下,其中遇到的一些坑也顺便记录下. 1.1 搭建的拓扑图如下: 1.2 部署环境:Centos3.1,java1 ...
- 小白—职场之Java基础篇
java基础篇 java基础 目录 1.java是一种什么语言,jdk,jre,jvm三者的区别 2.java 1.5之后的三大版本 3.java跨平台及其原理 4.java 语言的特点 5.什么是字 ...
- Jmeter(十三) - 从入门到精通 - JMeter定时器 - 上篇(详解教程)
1.简介 用户实际操作时,并非是连续点击,而是存在很多停顿的情况,例如:用户需要时间阅读文字内容.填表.或者查找正确的链接等.为了模拟用户实际情况,在性能测试中我们需要考虑思考时间.若不认真考虑思考时 ...
- Spreading the Wealth
题目 A Communist regime is trying to redistribute wealth in a village. They have have decided to sit e ...
- 解决Centos7下中文显示乱码
第一步:先查看是不是ctr的问题: SecureCRT的修改,选项→会话选项,将外观中的字符编码集修改为UTF-8即可,其他终端程序同理 如果不是则再参照如下文档操作:https://www.cnbl ...
- 如何写出高性能的CSS3动画
小伙伴们在写CSS3动画时,会发现在手机上很多时候会感到卡顿,然后Google到的解决方案大多是开启GPU加速transform: translate3d(0,0,0); 可解决,但是为什么开启GPU ...
- js创建函数的方式
一般一下这三种方式 第一种(函数声明): function sum1(num1,num2){ return num1+num2;} 没啥好说的 第二种(函数表达式): var sum2 = fun ...
- 解决只能通过localhost访问Elasticsearch的问题
解决只能通过localhost访问Elasticsearch的问题 在默认情况下Elasticsearch是无法通过外网访问的 需要绑定地址,原因如下: 具体方法为: vim /opt/es/ ...
- CF819B Mister B and PR Shifts 思维题
分析 这道题\(n\leq10^{6}\),显然\(n^{2}\)的暴力是无法解决问题的 那么我们可以考虑数列的某一种性质 因为最终的答案是\(\sum{n \atop i=1} |p_i - i|\ ...
- 如何Simplest搭建个人博客
前期 例如wordpress.hexo.hugo-- 准备 安装Node.js,安装Git,进入Hexo网站.进入Github网站进注册和登录. 建议买个阿里云服务器(学生最近好像是免费的) 开始搭建 ...