Skip to content

Testing configuration


Check out the testing overview tutorial for a more comprehensive walk-through.

Settings

If an option has a corresponding test command flag, the flag will always take precedence.

Default arguments

You can define default arguments for the test command by setting the default-args option, which must be an array of strings. The following is the default configuration:

[tool.hatch.envs.hatch-test]
default-args = ["tests"]
[envs.hatch-test]
default-args = ["tests"]

Extra arguments

You can define extra internal arguments for test scripts by setting the extra-args option, which must be an array of strings. For example, if you wanted to increase the verbosity of pytest, you could set the following:

[tool.hatch.envs.hatch-test]
extra-args = ["-vv"]
[envs.hatch-test]
extra-args = ["-vv"]

Randomize test order

You can randomize the order of tests by enabling the randomize option which corresponds to the --randomize/-r flag:

[tool.hatch.envs.hatch-test]
randomize = true
[envs.hatch-test]
randomize = true

Parallelize test execution

You can parallelize test execution by enabling the parallel option which corresponds to the --parallel/-p flag:

[tool.hatch.envs.hatch-test]
parallel = true
[envs.hatch-test]
parallel = true

Retry failed tests

You can retry failed tests by setting the retries option which corresponds to the --retries flag:

[tool.hatch.envs.hatch-test]
retries = 2
[envs.hatch-test]
retries = 2

You can also set the number of seconds to wait between retries by setting the retry-delay option which corresponds to the --retry-delay flag:

[tool.hatch.envs.hatch-test]
retry-delay = 1
[envs.hatch-test]
retry-delay = 1

Customize environment

You can fully alter the behavior of the environment used by the test command.

Dependencies

You can define extra dependencies that your tests may require:

[tool.hatch.envs.hatch-test]
extra-dependencies = [
  "pyfakefs",
  "pytest-asyncio",
  "pytest-benchmark",
  "pytest-memray",
  "pytest-playwright",
  "pytest-print",
]
[envs.hatch-test]
extra-dependencies = [
  "pyfakefs",
  "pytest-asyncio",
  "pytest-benchmark",
  "pytest-memray",
  "pytest-playwright",
  "pytest-print",
]

The following is the default configuration:

[tool.hatch.envs.hatch-test]
dependencies = [
  "coverage-enable-subprocess==1.0",
  "coverage[toml]~=7.4",
  "pytest~=8.1",
  "pytest-mock~=3.12",
  "pytest-randomly~=3.15",
  "pytest-rerunfailures~=14.0",
  "pytest-xdist[psutil]~=3.5",
]
[envs.hatch-test]
dependencies = [
  "coverage-enable-subprocess==1.0",
  "coverage[toml]~=7.4",
  "pytest~=8.1",
  "pytest-mock~=3.12",
  "pytest-randomly~=3.15",
  "pytest-rerunfailures~=14.0",
  "pytest-xdist[psutil]~=3.5",
]

Matrix

You can override the default series of matrices:

[[tool.hatch.envs.hatch-test.matrix]]
python = ["3.12", "3.11", "3.10", "3.9", "3.8"]
[[envs.hatch-test.matrix]]
python = ["3.12", "3.11", "3.10", "3.9", "3.8"]

Scripts

If you want to change the default commands that are executed, you can override the scripts. The following default scripts must be redefined:

[tool.hatch.envs.hatch-test.scripts]
run = "pytest{env:HATCH_TEST_ARGS:} {args}"
run-cov = "coverage run -m pytest{env:HATCH_TEST_ARGS:} {args}"
cov-combine = "coverage combine"
cov-report = "coverage report"
[envs.hatch-test.scripts]
run = "pytest{env:HATCH_TEST_ARGS:} {args}"
run-cov = "coverage run -m pytest{env:HATCH_TEST_ARGS:} {args}"
cov-combine = "coverage combine"
cov-report = "coverage report"

The run script is the default behavior while the run-cov script is used instead when measuring code coverage. The cov-combine script runs after all tests complete when measuring code coverage, as well as the cov-report script when not using the --cover-quiet flag.

Note

The HATCH_TEST_ARGS environment variable is how the test command's flags are translated and internally populated without affecting the user's arguments. This is also the way that extra arguments are passed.

Installer

By default, UV is enabled. You may disable that behavior as follows:

[tool.hatch.envs.hatch-test]
installer = "pip"
[envs.hatch-test]
installer = "pip"