使用 tox flake8 pytest 规范 python 项目

python 中有些很好的工作来规范整个项目的开发,而其中使用较多的就是使用 tox 、 flake8 、 pytest 。

tox 管理 virtualenv 环境,可在一个 python 项目中定义多个版本的 python 环境,从而检查项目源代码的兼容性。flake8 进行源代码检查,根据 pep8 检查源代码是否符合规范(也可使用 pylint ,pylint 较严格)。 pytest 进行单元测试,或者通过 pytest 的插件 pytest-cov 同时进行代码覆盖率测试。

示例

假设项目布局如下 ::

.
├── CHANGELOG
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── doc
├── requirements.txt
├── myproj
├── test-requirements.txt
├── tests
├── tools
├── tox.ini
└── venv

源代码目录为 myproj ,测试代码目录为 tests ,当前的 vitualenv 在 venv 目录中。

在 python 项目中,安装 tox ::

pip intall tox

并把 flake8 和 pytest 、 pytest-cov 加入到测试依赖 test-requirements.txt ::

pytest
pytest-cov
mock
testtools
fixtures
flake8
coverage

配置 tox ,定义所需要支持的环境,和运行的任务,写入 tox.ini 配置文件,如下 ::

[tox]
envlist = py,py27,py{34,35},pep8
skip_missing_interpreters = True
skipsdist = True
indexserver = default = https://pypi.doubanio.com/simple [testenv]
passenv = *
install_command = pip install -U {opts} {packages}
setenv = PYTHONPATH={toxinidir}/
deps = -rrequirements.txt
-rtest-requirements.txt
commands = py.test [pytest]
testpaths = tests
addopts = --maxfail=2 -rf [testenv:pep8]
commands = flake8 myproj
flake8 tests [flake8]
exclude = env,venv,.venv,.git,.tox,dist,doc [testenv:cover]
commands = py.test --cov

为了支持覆盖测试(使用 coverage),加入 .coveragerc 配置文件 ::

[run]
omit = tests/*
source = myproj [paths]
source = myproj

然后运行 tox ::

tox     # 创建不同的 python 环境并运行 pytest ,最后运行 pep8
tox -e pep8 # 单独运行 pep8
tox -e cover # 代码覆盖率

这些工具都是标准工具,以后还可以和 jenkins 等集成。

使用 tox flake8 pytest 规范 python 项目的更多相关文章

  1. pytest、tox、Jenkins实现python接口自动化持续集成

    pytest介绍 pytest是一款强大的python测试工具,可以胜任各种级别的软件测试工作,可以自动查找测试用并执行,并且有丰富的基础库,可以大幅度提高用户编写测试用例的效率,具备可扩展性,用户自 ...

  2. 如何建立一个完美的 Python 项目

    原文地址:How to set up a perfect Python project 原文作者:Brendan Maginnis 译者:HelloGitHub-丫丫 校对者:HelloGitHub- ...

  3. 正确地组织python项目的结构

    统一的项目结构 写了不少python项目后, 越来越认识到python项目结构重要性. 不管项目是否要开源, 是否要提交pypi, 项目结构的一致性带来的好处还有很多: 多人合作开发大家都有个基本的g ...

  4. 以正确的方式开源 Python 项目

    以正确的方式开源 Python 项目 大多数Python开发者至少都写过一个像工具.脚本.库或框架等对其他人也有用的工具.我写这篇文章的目的是让现有Python代码的开源过程尽可能清 晰和无痛.我不是 ...

  5. 以正确的方式开源 Python 项目(转)

    大多数Python开发者至少都写过一个像工具.脚本.库或框架等对其他人也有用的工具.我写这篇文章的目的是让现有Python代码的开源过程尽可能清晰和无痛.我不是简单的指——“创建一个GitHub库,提 ...

  6. 创建成功的Python项目

    创建成功的Python项目 前端开发工具技巧介绍—Sublime篇 SEO在网页制作中的应用 观察者模式 使用D3制作图表 英文原文:Create successful Python projects ...

  7. 精选 TOP45 值得学习的Python项目

    精选 TOP45 值得学习的Python项目 [导读]热门资源博客 Mybridge AI 比较了 18000 个关于 Python 的项目,并从中精选出 45 个最具竞争力的项目.我们进行了翻译,在 ...

  8. 如何使用 Pylint 来规范 Python 代码风格

    如何使用 Pylint 来规范 Python 代码风格 转载自https://www.ibm.com/developerworks/cn/linux/l-cn-pylint/   Pylint 是什么 ...

  9. Python项目中如何优雅的import

    Python项目中如何优雅的import 前言 之前有一篇关于Python编码规范的随笔, 但是写的比较杂乱, 因为提到了import语句, 在篇文章中, 我专门来讲Python项目中如何更好的imp ...

随机推荐

  1. vs2005中删除最近打开的项目和文件的记录

    vs2005中总是保留最近打开的项目和文件的记录,甚至是以删除的它也不删,-_-!下面介绍几种删除的方法: 第一种:建立一个bat文件,以后双击即可清除,内置代码如下: @echo off@REG D ...

  2. Angularjs - 路由 angular-ui-router

    注意,使用的路由不是官方的,而是第三方的.因为这个更加强大支持嵌套而且大家都是这样用的 http://www.tuicool.com/articles/zeiy6ff http://www.open- ...

  3. HDU 1025 Constructing Roads In JGShining's Kingdom(二维LIS)

    Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

  4. AngularJS 初识笔记

    test.html: <!DOCTYPE html> <html lang="en" ng-app> <head> <meta chars ...

  5. journalctl --help

    journalctl [OPTIONS...] [MATCHES...] Query the journal. Flags:     --system              Show the sy ...

  6. 【SIGGRAPH 2015】【巫师3 狂猎 The Witcher 3: Wild Hunt 】顶级的开放世界游戏的实现技术。

    [SIGGRAPH 2015][巫师3 狂猎 The Witcher 3: Wild Hunt ]顶级的开放世界游戏的实现技术 作者:西川善司 日文链接  http://www.4gamer.net/ ...

  7. visual studio粘贴html代码.会自行添加一些未知代码(自动格式化)

    比如我们要粘贴这样一段代码到VS这里 <option {if empty($param.is_active)}selected=selected{/if}>请选择</option&g ...

  8. eclipse编译异常修正:the project cannot be built until its prerequisite...

    close错误的project,重新open , 再 clean下 .

  9. 20145235 《Java程序设计》第一次实验报告

    实验一Java开发环境的熟悉 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验知识点 1.JVM.JRE.JDK的安装位置与区 ...

  10. 初步理解Java的三大特性——封装、继承和多态

    声明:整理自网络,如有雷同,请联系博主处理 一.封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被 ...