fixtures#

Conda 测试中使用的 pytest fixture 集合。

#

函数#

suppress_resource_warning()

抑制未关闭的套接字警告

tmpdir(tmpdir, request)

clear_subdir_cache()

disable_channel_notices()

此 Fixture 将 “context.number_channel_notices” 设置为 0,然后再设置

reset_conda_context()

在每个测试函数运行后重置上下文对象。

temp_package_cache(tmp_path_factory)

用于将包或索引缓存与其他测试隔离。

parametrized_solver_fixture(...)

一个参数化的 fixture,将求解器后端设置为 (1) libmamba

solver_classic(...)

solver_libmamba(...)

_solver_helper(→ collections.abc.Iterable[Solver])

session_capsys(...)

conda_cli(→ collections.abc.Iterator[CondaCLIFixture])

一个函数作用域的 fixture,返回 CondaCLIFixture 实例。

session_conda_cli(...)

一个会话作用域的 fixture,返回 CondaCLIFixture 实例。

path_factory(...)

一个函数作用域的 fixture,返回 PathFactoryFixture 实例。

tmp_env(→ collections.abc.Iterator[TmpEnvFixture])

一个函数作用域的 fixture,返回 TmpEnvFixture 实例。

session_tmp_env(→ collections.abc.Iterator[TmpEnvFixture])

一个会话作用域的 fixture,返回 TmpEnvFixture 实例。

tmp_channel(→ collections.abc.Iterator[TmpChannelFixture])

一个函数作用域的 fixture,返回 TmpChannelFixture 实例。

context_aware_monkeypatch(→ pytest.MonkeyPatch)

一个 monkeypatch fixture,在每次测试后重置上下文。

tmp_pkgs_dir(→ collections.abc.Iterator[pathlib.Path])

一个函数作用域的 fixture,返回一个临时包缓存目录。

tmp_envs_dir(→ collections.abc.Iterator[pathlib.Path])

一个函数作用域的 fixture,返回一个临时环境目录。

PYTHONPATH()

我们需要设置这个,以便 Python 加载 'conda' 的开发版本,通常取自

属性#

suppress_resource_warning()#

抑制未关闭的套接字警告

似乎 urllib3 为了避免代价高昂的重建成本而保持套接字打开。

xref: kennethreitz/requests#1882

tmpdir(tmpdir, request)#
clear_subdir_cache()#
disable_channel_notices()#

此 Fixture 将 “context.number_channel_notices” 设置为 0,然后再将其设置回原始值。

这也是一个关于如何覆盖上下文对象中的值的好例子。

reset_conda_context()#

在每个测试函数运行后重置上下文对象。

temp_package_cache(tmp_path_factory)#

用于将包或索引缓存与其他测试隔离。

parametrized_solver_fixture(request: pytest.FixtureRequest, monkeypatch: pytest.MonkeyPatch) collections.abc.Iterable[Literal[libmamba, classic]]#

一个参数化的 fixture,为每个测试将求解器后端设置为 (1) libmamba 和 (2) classic。它使用 autouse=True,因此只在实际需要的模块中导入它。

请注意,跳过和 xfail 需要在测试主体 _内部_ 完成。装饰器不能使用,因为它们在 fixture 完成其工作之前就被评估了!

所以,与其

@pytest.mark.skipif(context.solver == "libmamba", reason="...") def test_foo()

...

不如

def test_foo()
if context.solver == "libmamba"

pytest.skip("...")

...

solver_classic(request: pytest.FixtureRequest, monkeypatch: pytest.MonkeyPatch) collections.abc.Iterable[Literal[classic]]#
solver_libmamba(request: pytest.FixtureRequest, monkeypatch: pytest.MonkeyPatch) collections.abc.Iterable[Literal[libmamba]]#
Solver#
_solver_helper(request: pytest.FixtureRequest, monkeypatch: pytest.MonkeyPatch, solver: Solver) collections.abc.Iterable[Solver]#
session_capsys(request) collections.abc.Iterator[_pytest.capture.MultiCapture]#
class CondaCLIFixture#
capsys: pytest.CaptureFixture | _pytest.capture.MultiCapture#
__call__(*argv: str | os.PathLike | pathlib.Path, raises: type[Exception] | tuple[type[Exception], Ellipsis]) tuple[str, str, pytest.ExceptionInfo]#
__call__(*argv: str | os.PathLike | pathlib.Path) tuple[str, str, int]

测试 conda CLI。模拟 conda.cli.main.main 中的操作。

conda ... == conda_cli(...)

参数:
  • argv -- 要解析的参数。

  • raises -- 要拦截的预期异常。如果提供,将返回引发的异常,而不是退出代码(请参阅 pytest.raises 和 pytest.ExceptionInfo)。

返回值:

命令结果(stdout、stderr、退出代码或 pytest.ExceptionInfo)。

conda_cli(capsys: pytest.CaptureFixture) collections.abc.Iterator[CondaCLIFixture]#

一个函数作用域的 fixture,返回 CondaCLIFixture 实例。

对于任何当前测试本地的命令(例如,创建一个仅在测试中使用的 conda 环境),请使用此项。

session_conda_cli(session_capsys: _pytest.capture.MultiCapture) collections.abc.Iterator[CondaCLIFixture]#

一个会话作用域的 fixture,返回 CondaCLIFixture 实例。

对于任何测试会话全局的命令(例如,创建一个跨测试共享的 conda 环境、conda info 等),请使用此项。

class PathFactoryFixture#
tmp_path: pathlib.Path#
__call__(name: str | None = None, prefix: str | None = None, suffix: str | None = None) pathlib.Path#

唯一、不存在的路径工厂。

使用新的唯一、不存在的路径扩展 pytest 的 tmp_path fixture,用于我们需要一个尚不存在的临时路径的情况。

参数:
  • name -- 要附加到 tmp_path 的路径名

  • prefix -- 要添加到生成的唯一名称的前缀

  • suffix -- 要附加到生成的唯一名称的后缀

返回值:

一个新的唯一路径

path_factory(tmp_path: pathlib.Path) collections.abc.Iterator[PathFactoryFixture]#

一个函数作用域的 fixture,返回 PathFactoryFixture 实例。

使用此项为测试生成任意数量的临时路径,这些路径是唯一的且尚不存在。

class TmpEnvFixture#
path_factory: PathFactoryFixture | pytest.TempPathFactory#
conda_cli: CondaCLIFixture#
get_path() pathlib.Path#
__call__(*packages: str, prefix: str | os.PathLike | None = None) collections.abc.Iterator[pathlib.Path]#

生成一个包含所提供软件包的 conda 环境。

参数:
  • packages -- 要安装到环境中的软件包

  • prefix -- 安装 conda 环境的前缀

返回值:

conda 环境的前缀

tmp_env(path_factory: PathFactoryFixture, conda_cli: CondaCLIFixture) collections.abc.Iterator[TmpEnvFixture]#

一个函数作用域的 fixture,返回 TmpEnvFixture 实例。

当创建仅限于当前测试的 conda 环境时使用此项。

session_tmp_env(tmp_path_factory: pytest.TempPathFactory, session_conda_cli: CondaCLIFixture) collections.abc.Iterator[TmpEnvFixture]#

一个会话作用域的 fixture,返回 TmpEnvFixture 实例。

当创建跨测试共享的 conda 环境时使用此项。

class TmpChannelFixture#
path_factory: PathFactoryFixture#
conda_cli: CondaCLIFixture#
__call__(*packages: str) collections.abc.Iterator[tuple[pathlib.Path, str]]#
tmp_channel(path_factory: PathFactoryFixture, conda_cli: CondaCLIFixture) collections.abc.Iterator[TmpChannelFixture]#

一个函数作用域的 fixture,返回 TmpChannelFixture 实例。

context_aware_monkeypatch(monkeypatch: pytest.MonkeyPatch) pytest.MonkeyPatch#

一个 monkeypatch fixture,在每次测试后重置上下文。

tmp_pkgs_dir(path_factory: PathFactoryFixture, mocker: pytest_mock.MockerFixture) collections.abc.Iterator[pathlib.Path]#

一个函数作用域的 fixture,返回一个临时包缓存目录。

tmp_envs_dir(path_factory: PathFactoryFixture, mocker: pytest_mock.MockerFixture) collections.abc.Iterator[pathlib.Path]#

一个函数作用域的 fixture,返回一个临时环境目录。

PYTHONPATH()#

我们需要设置这个,以便 Python 加载 'conda' 的开发版本,通常取自克隆仓库根目录中的 conda/。此根目录通常是运行 pytest 时的工作目录。否则,它将导入安装在基础环境中的版本,该版本可能没有被 pip install -e . --no-deps 覆盖。这在其他测试中不会发生,因为它们以等效于 python -m conda 的方式运行。然而,一些测试直接运行 conda(shell 函数),它调用 conda(Python 入口点)。当以这种方式调用脚本时,它会绕过在 python -m 样式调用中找到的自动“工作目录优先于 sys.path”的行为。有关详细信息,请参阅 https://docs.pythonlang.cn/3/library/sys_path_init.html