Nox:用 Python 写配置的测试自动化工具
Nox:用 Python 写配置的测试自动化工具
做 Python 项目的测试自动化,tox 是很多人的默认选择。但 tox 的配置文件是 ini 格式,写复杂逻辑很不方便。Nox 走了另一条路,直接用 Python 文件写配置。
Nox 目前收获了 1,522 个 Star,作者是 Thea Flowers。它的定位很明确:一个命令行工具,帮你在多个 Python 环境里自动跑测试。

用 Python 写配置,到底好在哪
tox 的 ini 配置文件对简单场景够用了。但测试需求一复杂,比如要动态安装不同版本的依赖、根据条件跳过某些 session,ini 就不够灵活。
Nox 的做法是把配置写成普通的 Python 文件 noxfile.py:
import nox
@nox.session
def tests(session: nox.Session) -> None:
session.install("pytest")
session.run("pytest")
@nox.session
def lint(session: nox.Session) -> None:
session.install("flake8")
session.run("flake8", "--import-order-style", "google")
每个 @nox.session 装饰的函数就是一个任务单元。你可以在函数里写任何 Python 代码,条件判断、循环、动态依赖安装都能做。对熟悉 Python 的开发者来说,这几乎零学习成本。
实际用起来怎么样
Nox 的核心命令很简洁。nox -l 列出所有 session,nox 运行全部,nox -s test 跑指定 session。session 还可以加 docstring,用 nox --usage test 查看说明。
安装也简单,推荐用 pipx 全局安装,避免污染系统 Python:
pipx install nox
也可以直接用 pip:
python3 -m pip install nox
或者装到用户目录:
python3 -m pip install --user nox

和 tox 比,怎么选
两者都能做多环境测试自动化,核心差异在配置方式。
tox 的 ini 配置更简洁,适合需求固定的项目。很多开源项目默认提供 tox.ini,生态成熟,CI 模板支持也好。
Nox 的优势在灵活性。配置是 Python 代码,逻辑可以写得很复杂。比如你想根据环境变量决定跑哪些测试、动态生成 session 列表,Nox 比 tox 顺手得多。
另外,Nox 的 API 设计比较现代,类型注解齐全,对习惯当代 Python 开发风格的人更友好。
适合谁用
如果你已经在用 tox,但偶尔被 ini 配置的限制卡住,可以试试 Nox。它的 Python 配置方式让复杂逻辑变得很自然。
如果你是新项目选型,团队里 Python 开发者居多,Nox 的门槛比 tox 更低。不需要额外学一种配置语法,会写 Python 就会写配置。
当然,Nox 也不是万能。tox 的生态系统更成熟,很多 CI 模板默认支持 tox。Nox 相对小众一些,1,522 个 Star 说明它有一批忠实用户,但社区规模和 tox 还有差距。
Nox 的文档托管在 Read the Docs 上,写得比较清楚。项目本身持续维护中,CI 和代码风格检查都配置齐全。项目使用 MIT 协议开源,可以放心用。
总的来说,Nox 是一个务实的工具。它没有试图做太多,就是把测试自动化这件事用更 Pythonic 的方式做了出来。如果你厌倦了 ini 配置,值得一试。

浙公网安备 33010602011771号