Python 任务自动化工具nox 的配置与 API详情

前言:

NoxfileNox 默认在一个名为noxfile.py的文件中查找配置。在运行 nox 时,你可以使用 --noxfile参数指定其它的文件。

定义会话格式:session(func=None, python=None, py=None, reuse_venv=None, name=None, venv_backend=None),将被装饰的函数指定为一个会话。

Nox 会话是通过被@nox.session装饰的标准 Python 函数来配置的。

例如:

import nox
@nox.session
def tests(session):
    session.run('pytest')

会话描述你可以使用文档字符串向会话中添加一个描述。第一行内容会在列出会话时显示。

例如:

import nox
@nox.session
def tests(session):
    """Run the test suite."""
    session.run('pytest')

nox --list命令将显示出:

$ nox --list
Available sessions:
* tests -> Run the test suite.

会话名称默认情况下,Nox 使用被装饰函数的名称作为会话的名称。这对于绝大多数项目都非常有效,但是,如果需要,你也可以使用 @nox.session 的 name 参数来自定义会话的名称。

例如:

import nox
@nox.session(name="custom-name")
def a_very_long_function_name(session):
    print("Hello!")

nox --list 命令将显示:

$ nox --list
Available sessions:
* custom-name

你可以告诉 nox 使用自定义的名称运行会话:

$ nox --session "custom-name"
Hello!

配置会话的virtualenv默认情况下,Nox 在为每个会话创建一个新的 virtualenv 时,会使用 Nox 所用的同一个解释器。如果你使用 Python 3.6 安装了 nox,则 nox 将默认在所有会话中使用 Python 3.6。

通过给 @nox.session 指定 python 参数(或其别名 py),你可以告诉 nox 使用不同的 Python 解释器/版本:

@nox.session(python='2.7')
def tests(session):
    pass

你还可以告诉 Nox 使用多个 Python 解释器运行你的会话。Nox 将为指定的每个解释器创建一个单独的 virtualenv 并运行会话。例如,下面的会话将运行两次——一次使用 Python 2.7,一次使用 Python 3.6:

@nox.session(python=['2.7', '3.6'])
def tests(session):
    pass

当你提供一个版本号时,Nox 会自动添加 python 来确定可执行文件的名称。但是,Nox 也可以接受完整的可执行名称。如果你想使用 pypy 来测试,例如:

@nox.session(python=['2.7', '3.6', 'pypy-6.0'])
def tests(session):
    pass

当准备你的会话时,Nox 将为每个解释器创建单独的会话。你可以在运行 nox --list 的时候看到这些会话。例如这个 Noxfile:

@nox.session(python=['2.7', '3.5', '3.6', '3.7'])
def tests(session):
    pass

将产生这些会话:

* tests-2.7
* tests-3.5
* tests-3.6
* tests-3.7

注意,这个扩展发生在参数化之前,所以你仍然可以对多个解释器的会话进行参数化。

如果你想完全禁止创建 virtualenv,你可以设置 python 参数为 False:

@nox.session(python=False)
def tests(session):
    pass

最后,你还可以指定每次都重用 virtualenv,而不是重新创建:

@nox.session(
    python=['2.7', '3.6'],
    reuse_venv=True)
def tests(session):
    pass

将参数传入会话通常往测试会话中传递参数是很有用的。下面是一个简单示例,演示了如何使用参数对特定文件作测试:

@nox.session
def test(session):
    session.install('pytest')
    if session.posargs:
        test_files = session.posargs
    else:
        test_files = ['test_a.py', 'test_b.py']
    session.run('pytest', *test_files)

现在如果你运行:

nox那么 nox 将运行:

pytest test_a.py test_b.py但如果你运行:

nox -- test_c.py那么 nox 将运行:

pytest test_c.py

参数化会话会话的参数可以用nox.parametrize() 装饰器来作参数化。

下面是一个典型的参数化安装 Django 版本的例子:

@nox.session
@nox.parametrize('django', ['1.9', '2.0'])
def tests(session, django):
    session.install(f'django=={django}')
    session.run('pytest')

当你运行nox时,它会创建两个不同的会话:

$ nox
nox > Running session tests(django='1.9')
nox > pip install django==1.9
...
nox > Running session tests(djano='2.0')
nox > pip install django==2.0

nox.parametrize() 的接口和用法故意跟pytest的参数化 相类似。

格式:parametrize(arg_names, arg_values_list, ids=None)

作用是参数化一个会话。

将 arg_values_list 列表赋给对应的 arg_names,为装饰的会话函数添加新的调用。参数化在会话发现期间执行,每次调用都作为 nox 的单个会话出现。

参数:

  • arg_names (Sequence[str])——一系列参数名称
  • arg_values_list (Sequence[Union[Any, Tuple]])——参数值列表决定了使用不同参数值调用会话的频率。如果只指定了一个参数名,那么这就是一个简单的值列表,例如[1,2,3]。如果指定了 N 个参数名,这必须是一个 N 元组的列表,其中每个元素为其各自的参数名指定一个值,例如 [(1,'a'), (2,'b')]。
  • ids (Sequence[str]) ——可选项,一系列测试 id,被参数化的参数使用。

你也可以堆叠装饰器,令其产生组合了参数的会话,例如:

@nox.session
@nox.parametrize('django', ['1.9', '2.0'])
@nox.parametrize('database', ['postgres', 'mysql'])
def tests(session, django, database):
    ...

如果运行nox —list,你将看到它生成了以下的会话集:

* tests(database='postgres', django='1.9')
* tests(database='mysql', django='1.9')
* tests(database='postgres', django='2.0')
* tests(database='mysql', django='2.0')

如果你只想运行一个参数化会话,请参阅"指定参数化会话"部分。

为参数化的会话起友好的名称自动生成的参数化会话的名称,如tests(django='1.9', database='postgres'),即使用关键字过滤,也可能很长且很难处理。

在此场景中,可以为参数化会话提供辅助的自定义 id 。

这两个例子是等价的:

@nox.session
@nox.parametrize('django',
    ['1.9', '2.0'],
    ids=['old', 'new'])
def tests(session, django):
    ...
@nox.session
@nox.parametrize('django', [
    nox.param('1.9', id='old'),
    nox.param('2.0', id='new'),
])
def tests(session, django):
    ...

当运行nox --list时,你将看到它们的新 id:

* tests(old)
* tests(new)

你可以用nox --sessions "tests(old)",以此类推。

这也适用于堆叠参数化。id 是在组合期间组合的。

例如:

@nox.session
@nox.parametrize(
    'django',
    ['1.9', '2.0'],
    ids=["old", "new"])
@nox.parametrize(
    'database',
    ['postgres', 'mysql'],
    ids=["psql", "mysql"])
def tests(session, django, database):
    ...

运行nox --list时会产生这些会话:

* tests(psql, old)
* tests(mysql, old)
* tests(psql, new)
* tests(mysql, new)

会话对象Nox 将使用 Session 类的一个实例来调用你的会话函数。

class Session(runner) :

会话对象被传递到用户自定义的每个会话函数中。

这是在 Nox 会话中安装软件包和运行命令的主要途径。

  • bin:——virtualenv 的 bin 目录
  • cd(dir):——chdir() 的一个别名
  • chdir(dir):——更改当前的工作目录
  • conda_install(
    • args,
    • *kwargs):

调用conda install来在会话环境中的安装软件包。

直接安装软件包:

session.conda_install('pandas')
session.conda_install('numpy', 'scipy')
session.conda_install('--channel=conda-forge', 'dask==2.1.0')

根据 requirements.txt 文件来安装软件包:

session.conda_install('--file', 'requirements.txt')
session.conda_install('--file', 'requirements-dev.txt')

不破坏 conda 已安装的依赖而安装软件包:

session.install('.', '--no-deps')
# Install in editable mode.
session.install('-e', '.', '--no-deps')

剩下的关键字参数跟 run() 相同。

  • env:——一个环境变量的字典,传给所有的命令。
  • error(
    • args,
    • *kwargs):——立即中止会话并随意地记录一个错误。
  • install(
    • args,
    • *kwargs): ——调用 pip 在会话的 virtualenv 里安装包。

直接安装包:

session.install('pytest')
session.install('requests', 'mock')
session.install('requests[security]==2.9.1')

根据 requirements.txt 文件来安装软件包:

session.install('-r', 'requirements.txt')
session.install('-r', 'requirements-dev.txt')

安装当前的包:

session.install('.')
# Install in editable mode.
session.install('-e', '.')

剩下的关键字参数跟 run() 相同。

  • interactive:——如果 Nox 在交互式会话中运行,则返回 True,否则返回 False。
  • log(
    • args,
    • *kwargs):——在会话期间输出一份日志。
  • notify(target): ——将给定的会话放在队列的末尾。

此方法是幂等的;对同一会话的多次通知无效。
参数:target (Union[str, Callable])——需要通知的会话。这可以指定适当的字符串(与nox -s 的使用相同)或使用函数对象。

  • posargs:——用于设置从命令行上传给 nox 的额外参数。
  • python:——传给@nox.session的 Python 版本。
  • run(args, env=None, kwargs): ——运行一个命令。

命令必须安装字符串列表指定,例如:

session.run('pytest', '-k', 'fast', 'tests/')
session.run('flake8', '--import-order-style=google')

你不能把所有东西都当作一个字符串传递。例如,不可以这样:
session.run('pytest -k fast tests/')

你可以用env 为命令设置环境变量:

session.run(
  'bash', '-c', 'echo $SOME_ENV',
  env={'SOME_ENV': 'Hello'})

你还可以使用success_codes ,告诉 nox 将非零退出码视为成功。例如,如果你想将 pytest 的“tests discovered, but none selected”错误视为成功:

session.run(
  'pytest', '-k', 'not slow',
  success_codes=[0, 5])

在 Windows 上,像del这样的内置命令不能直接调用,但是你可以使用cmd /c 来调用它们:

session.run('cmd', '/c', 'del', 'docs/modules.rst')

参数:

  • env (dict or None)——用于向命令公开的环境变量字典。默认情况下,传递所有环境变量。
  • silent (bool) ——静默命令输出,除非命令失败。默认为 False。
  • success_codes (list, tuple, or None)——一系列被认为是成功的返回码。默认情况下,只有 0 被认为是成功的。
  • external (bool) ——如果为 False(默认值),那么不在 virtualenv 路径中的程序将发出告警。如果为 True,则不会发出告警。这些告警可以使用--error-on-external-run将其转换为错误。这对没有 virtualenv 的会话没有影响。
  • skip(
    • args,
    • *kwargs):——立即跳出会话,并随意记录一个告警。
  • virtualenv:——运行所有命令的 virtualenv。

修改 Noxfile 中的 Nox 行为Nox 有各种命令行参数,可用于修改其行为。其中一些还可以在 Noxfile 中使用 nox.options 指定。例如,如果你想将 Nox 的 virtualenvs 存储在不同的目录中,而不需要每次都将它传递给 nox:

import nox
nox.options.envdir = ".cache"
@nox.session
def tests(session):
    ...

或者,如果你想提供一组默认运行的会话:

import nox
nox.options.sessions = ["lint", "tests-3.6"]
...

以下的选项可以在 Noxfile 中指定:

  • nox.options.envdir 等同于指定 –envdir.
  • nox.options.sessions 等同于指定 -s or –sessions.
  • nox.options.keywords 等同于指定 -k or –keywords.
  • nox.options.reuse_existing_virtualenvs 等同于指定 –reuse-existing-virtualenvs 。通过在调用时指定 --no-reuse-existing-virtualenvs ,你可以强制取消它。
  • nox.options.stop_on_first_error 等同于指定 –stop-on-first-error. 通过在调用时指定 --no-stop-on-first-error,你可以强制取消它。
  • nox.options.error_on_missing_interpreters 等同于指定 –error-on-missing-interpreters 。通过在调用时指定 --no-error-on-missing-interpreters ,你可以强制取消它。
  • nox.options.error_on_external_run 等同于指定 –error-on-external-run. 通过在调用时指定 --no-error-on-external-run ,你可以强制取消它。
  • nox.options.report 等同于指定 –report。

在调用 nox 时,命令行上指定的任何选项都优先于 Noxfile 中指定的选项。如果在命令行上指定了--sessions或--keywords,那么在 Noxfile 中指定的两个选项都将被忽略。

到此这篇关于Python 任务自动化工具nox 的配置与 API详情的文章就介绍到这了,更多相关Python  nox与 API内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • ​Python使用Mediapipe对图像进行手部地标检测

    目录 概述 行业用例 导入库 使用Mediapipe初始化手的地标检测模型 读取图像 执行手部地标检测 在图像上绘制地标 结论 尾注 概述 在本文中,我们将以深度库即 Mediapipe为基础库,以及其他计算机视觉预处理的CV2库来制作手部地标检测模型.市场上有很多关于这种问题的用例,例如商业相关的虚拟现实.游戏部分的实时体验. 行业用例 智能家居:这是计算机视觉的现代用例之一,人们使用智能家居来过上更舒适的生活,这就是为什么它不再是一个小众领域,它也正在蔓延到普通家庭. 智能电视:我们经常看到

  • python使用mediapiple+opencv识别视频人脸的实现

    目录 1.安装 2.代码实现 3.更新 mediapiple+threadpool+opencv实现图片人脸采集效率高于dlib 1.安装 pip install mediapipe 2.代码实现 # -*- coding: utf-8 -*- """ @Time : 2022/3/18 14:43 @Author : liwei @Description: """ import cv2 import mediapipe as mp mp_dra

  • 浅谈Python任务自动化工具Tox基本用法

    目录 浅谈Python任务自动化工具Tox 引言: 简介: 基本用法: 配置文件: tox 的工作流程: 安装: 使用: 小结: 浅谈Python任务自动化工具Tox 引言: 最近在搜集github上包含测试样例的Python项目,并试图在docker环境下跑通这些项目,发现这些项目主要使用的测试框架有 : unittest, pytest ,nosetest.还有一些用到了自动化工具Tox,所以简单了解了一下. 简介: Command line driven CI frontend and d

  • Python实现Web服务器FastAPI的步骤详解

    目录 1.简介 2.安装 3.官方示例 3.1 入门示例 Python测试代码如下(main.py): 3.2 跨域CORS 3.3 文件操作 3.4 WebSocket Python测试代码如下: 1.简介 FastAPI 是一个用于构建 API 的现代.快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python类型提示. 文档: https://fastapi.tiangolo.com源码: https://github.com/tiangolo/fastapi

  • Python调用腾讯API实现人脸身份证比对功能

    目录 1.作者介绍 2.调用腾讯人脸身份证比对的知识介绍 2.1 应用场景 3.调用腾讯云API步骤 3.1微信扫码登录 3.2鼠标选择云产品,并找到人脸核身 3.3进入人脸核身界面 3.4编辑参数 3.5查看自己的api 4.完整代码展示与结果 4.1完整代码 4.2实验结果 1.作者介绍 钱文浩,男,西安工程大学电子信息学院,2021级研究生研究方向:机器视觉与人工智能电子邮件:2414712362@qq.com 刘帅波,男,西安工程大学电子信息学院,2021级研究生,张宏伟人工智能课题组研

  • Python任务自动化工具tox使用教程

    1.tox 能做什么? 细分的用途包括: 创建开发环境 运行静态代码分析与测试工具 自动化构建包 针对 tox 构建的软件包运行测试 检查软件包是否能在不同的 Python 版本/解释器中顺利安装 统一持续集成(CI)和基于命令行的测试 创建和部署项目文档 将软件包发布到 PyPI 或任何其它平台 tox 官方文档中列出了 40 余种使用场景的示例,详细的列表可查看: https://tox.readthedocs.io/en/latest/examples.html 2.tox 怎么配置? 关

  • python调用kubernetesAPI简单使用方法

    前言: K8s也提供API接口,提供这个接口的是管理节点的apiserver组件,apiserver服务负责提供HTTP API,以便用户.其他组件相互通信.客户端库 安装 pip install kubernetes -i https://pypi.douban.com/simple k8s认证方式: HTTPS 证书认证:基于CA证书签名的数字证书认证 HTTP Token认证:通过一个Token来识别用户 HTTPS证书认证(kubeconfig) import os from kuber

  • Python语音识别API实现文字转语音的几种方法

    搜狗(目前好用,免费) def textToAudio_Sougou(message, filePath): # https://ai.so gou.com/doc/?url=/docs/content/tts/references/rest/ ''' curl -X POST \ -H "Content-Type: application/json" \ --data '{ "appid": "xxx", "appkey":

  • Python 任务自动化工具nox 的配置与 API详情

    前言: NoxfileNox 默认在一个名为noxfile.py的文件中查找配置.在运行 nox 时,你可以使用 --noxfile参数指定其它的文件. 定义会话格式:session(func=None, python=None, py=None, reuse_venv=None, name=None, venv_backend=None),将被装饰的函数指定为一个会话. Nox 会话是通过被@nox.session装饰的标准 Python 函数来配置的. 例如: import nox @nox

  • Python开源自动化工具Playwright安装及介绍使用

    目录 1.Playwright介绍 2.Playwright安装 3.实操演示 微软开源了一个非常强大的自动化项目叫 playwright-python 它支持主流的浏览器,包含:Chrome.Firefox.Safari.Microsoft Edge 等,同时支持以无头模式.有头模式运行,并提供了同步.异步的 API,可以结合 Pytest 测试框架 使用,并且支持浏览器端的自动化脚本录制. 项目地址:https://github.com/microsoft/playwright-python

  • python自动化工具之pywinauto实例详解

    本文实例为大家分享了python自动化工具pywinauto,供大家参考,具体内容如下 一.win环境应用自动化 1.浏览器中下载 2.在cmd下启动:python get-pip.py 3.在cmd中输入python -m pip --version查看安装pip的版本. 4.模块安装:pip3 install pywinauto 5.程序中加载模块: import time from pywinautoimport application 二,实例 #encoding=utf-8 #auth

  • python+playwright微软自动化工具的使用

    它支持主流的浏览器,包含:Chrome.Firefox.Safari.Microsoft Edge 等,同时支持以无头模式.有头模式运行 playwright-python 提供了同步.异步的 API,可以结合 Pytest 测试框架使用,并且支持浏览器端的自动化脚本录制 项目地址:https://github.com/microsoft/playwright-python 安装playwright-python,执行命令:pip install playwright 安装成功之后,执行命令:p

  • Python 制作自动化翻译工具

    妈妈再也不用担心我的英语了. 一个可能你似曾相识的场景 阅读内容包含大量英文的 PPT.Word.Excel 或者记事本时,由于英语不熟悉,为了流利地阅读,需要打开浏览器进入谷歌翻译的主界面,然后把英文复制到谷歌翻译的输入框中,最后又把翻译结果复制回 PPT.Word 和 Excel. 要是一个两个单词还好,要是发现有 100 个单词不认识,就必须复制粘贴 200 次,如此机械性重复性的工作,应该交给程序来做,这就是我设计下面这个自动化翻译工具的初衷. 提升办公效率的法宝 如上图,运行程序并保持

  • python游戏测试工具自动化遍历游戏中所有关卡

    目录 场景 思路 实现细节 1.卡住的判定和处理 2.GAutomator 调用游戏内部的 GM 指令 unity 中: python 中: 3.最终输出的报告 详细代码 AutoBattleTest.py 用来实现核心逻辑 ExcelTool.py 用来读写表格 后记 场景 游戏里有很多关卡(可能有几百个了),理论上每次发布到外网前都要遍历各关卡看看会不会有异常,上次就有玩家在打某个关卡时卡住不动了,如果每个关卡要人工遍历这样做会非常的耗时,所以考虑用自动化的方式来实现. 思路 游戏的战斗是有

  • Android和iOS 测试五个最好的开源自动化工具

    自动化测试在产品测试上有着非常重要的作用.实现测试自动化有多种积极的方式,包括最大限度地减少测试执行时间:在关键的发布阶段,用更少的时间确保更大的覆盖范围:在产品开发阶段,可靠又重复性地运行以确保没有引进回归问题.最大限度地减少重复性回归测试循环时的人为错误和疏忽的风险. 在市场上有很多可用的工具,开源的或要付费的.虽然付费和开源工具各有利弊,但是后者在自动化测试社区得到了广泛的应用.根据项目需求来选择合适的自动化工具是非常棘手的. 下面介绍5个最佳的iOS和Android开源自动化工具. 1.

  • python+webdriver自动化环境搭建步骤详解

    python是一个很好脚本语言工具,现在也比较流行的一个脚本语言工具,对目前web自动化可以用的比较是webdriver框架进行自动化测试,脚本写起来较简单,运行的占用的内容较小.那么对windown下python+webdriver自动化环境如何进行搭建. 下载一个python.exe文件,直接默认安装即可 配置python的环境,指定到python的路径 安装pip环境,从网上下载一个pip,解压完成后,进入解压目录下执行python setup install 安装selenium文件,在

随机推荐