Test Junkie ships its features in one package. To get the same features with pytest, Robot Framework or unittest you add plugins, and the plugins bring dependencies of their own. This page counts all of it: every package pip installs, measured in a clean environment per framework.
Each framework with the plugins that bring it closest to Test Junkie's features. pytest alone, without plugins, is 12,606 KB (6 packages, 3.8× the size of Test Junkie); Robot Framework alone is 5,998 KB.
Every feature Test Junkie has built in, and what the other frameworks need for it: built in, a plugin, or not available from any maintained package.
| Feature | Test Junkie | pytest | Robot Framework | unittest |
|---|---|---|---|---|
| Test runner and CLI | built in tj run | pytest | robotframework | built in python -m unittest, in the standard library |
| Test parametrization | built in @test(parameters=...) | built in @pytest.mark.parametrize | built in test templates | parameterized |
| Suite-level parametrization | built in @Suite(parameters=...) | built in parametrized class or fixture | not available a separate robot run per variable file | parameterized parameterized_class |
| Parallel execution | built in -S / -T threads | pytest-xdist worker processes | robotframework-pabot worker processes | unittest-parallel processes or threads |
| Retries, filtered by exception type | built in retry=, retry_on=, no_retry_on= | pytest-rerunfailures --only-rerun / --rerun-except | robotframework-retryfailed partial retries by tag, not by exception type | not available |
| Skips and conditional skips | built in skip=, skip_before_test=... | built in skip / skipif | built in Skip / Skip If | built in skip / skipIf |
| Setup/teardown shared across suites | built in Rules, @beforeClass ... | built in fixtures, conftest.py | built in setups, resource files | built in setUp / setUpClass, base classes |
| Event listeners | built in Listener | built in hooks | built in listener API | partial a custom TestResult class |
| Tags and metadata filters | built in owner, feature, component, tags | built in markers and -m | built in tags | not available only -k name patterns |
| Priority ordering | built in priority= | pytest-order | not available | not available |
| Random order with a seed | built in TestOrder.RANDOM, --seed | pytest-randomly | built in --randomize all:SEED | not available |
| HTML report | built in --html-report | pytest-html | built in report.html, log.html | html-testrunner |
| JUnit XML report | built in --xml-report | built in --junit-xml | built in --xunit | unittest-xml-reporting |
| JSON report | built in --json-report | pytest-json-report | built in --output output.json | not available |
| CPU and memory monitoring | built in -m / monitor_resources | pytest-monitor | not available | not available |
| Code coverage | built in --code-cov | pytest-cov | coverage coverage run -m robot | coverage |
| GitHub Actions annotations | built in automatic in CI | pytest-github-actions-annotate-failures | not available | not available |
| Saved settings, per user or project | built in tj config, tj.cfg | built in pytest.ini / pyproject.toml | built in argument files | not available |
| Metadata audit | built in tj audit | not available | not available | not available |
| Features covered | 19 of 19 | 18 of 19 | 13 of 19 + 1 partial | 9 of 19 + 1 partial |
| Installed size | 3,345 KB | 20,680 KB | 8,005 KB | 12,078 KB |
Packages you install yourself come first; the rest are pulled in by them. A package needed by several others is installed, and counted, once.
| Package | Version | Size (KB) | Features it brings | Why it is installed |
|---|---|---|---|---|
test_junkie | 0.9a6 | 864 | All 19 features in the table above | you install it |
coverage | 7.16.2 | 1,436 | code coverage | pulled in by test-junkie |
psutil | 7.2.2 | 816 | CPU and memory monitoring | pulled in by test-junkie |
colorama | 0.4.6 | 167 | colors in the Windows console | pulled in by test-junkie |
appdirs | 1.4.4 | 62 | where tj config keeps its settings | pulled in by test-junkie |
| Total | 3,345 KB | 5 packages: 1 you install, 4 pulled in | ||
| Package | Version | Size (KB) | Features it brings | Why it is installed |
|---|---|---|---|---|
pytest | 9.1.1 | 2,937 | Test runner and CLI, Test parametrization, Suite-level parametrization, Skips and conditional skips, Setup/teardown shared across suites, Event listeners, Tags and metadata filters, JUnit XML report, Saved settings, per user or project | you install it |
pytest-xdist | 3.8.0 | 326 | Parallel execution | you install it |
pytest-rerunfailures | 16.7 | 142 | Retries, filtered by exception type | you install it |
pytest-order | 1.5.0 | 111 | Priority ordering | you install it |
pytest-randomly | 5.0.0 | 32 | Random order with a seed | you install it |
pytest-html | 4.2.0 | 115 | HTML report | you install it |
pytest-json-report | 1.5.0 | 61 | JSON report | you install it |
pytest-cov | 7.1.0 | 116 | Code coverage | you install it |
pytest-github-actions-annotate-failures | 0.4.2 | 19 | GitHub Actions annotations | you install it |
pytest-monitor | 1.6.6 | 85 | CPU and memory monitoring | you install it |
Pygments | 2.21.0 | 8,358 | syntax highlighting of tracebacks | pulled in by pytest |
coverage | 7.16.2 | 1,436 | code coverage | pulled in by pytest-cov |
Jinja2 | 3.1.6 | 1,147 | HTML templates | pulled in by pytest-html |
packaging | 26.3 | 974 | version parsing | pulled in by pytest, pytest-rerunfailures, wheel |
urllib3 | 2.8.0 | 908 | HTTP connections for requests | pulled in by requests |
psutil | 7.2.2 | 816 | CPU and memory monitoring | pulled in by memory-profiler, pytest-monitor |
charset-normalizer | 3.5.2 | 734 | text encoding detection for requests | pulled in by requests |
idna | 3.20 | 506 | international domain names for requests | pulled in by requests |
requests | 2.34.2 | 468 | HTTP client - pytest-monitor can send results to a server | pulled in by pytest-monitor |
execnet | 2.1.2 | 300 | talking to xdist's worker processes | pulled in by pytest-xdist |
certifi | 2026.7.22 | 248 | TLS certificates for requests | pulled in by requests |
wheel | 0.48.0 | 208 | building wheel files | pulled in by pytest-monitor |
memory-profiler | 0.61.0 | 204 | memory sampling for pytest-monitor | pulled in by pytest-monitor |
colorama | 0.4.6 | 166 | colors in the Windows console | pulled in by pytest |
pluggy | 1.6.0 | 135 | plugin hooks | pulled in by pytest, pytest-cov |
MarkupSafe | 3.0.4 | 56 | HTML escaping for jinja2 | pulled in by jinja2 |
iniconfig | 2.3.1 | 36 | reading pytest.ini | pulled in by pytest |
pytest-metadata | 3.1.1 | 34 | environment metadata in reports | pulled in by pytest-html, pytest-json-report |
| Total | 20,680 KB | 28 packages: 10 you install, 18 pulled in | ||
| Package | Version | Size (KB) | Features it brings | Why it is installed |
|---|---|---|---|---|
robotframework | 7.5 | 5,998 | Test runner and CLI, Test parametrization, Skips and conditional skips, Setup/teardown shared across suites, Event listeners, Tags and metadata filters, Random order with a seed, HTML report, JUnit XML report, JSON report, Saved settings, per user or project | you install it |
robotframework-pabot | 5.2.2 | 540 | Parallel execution | you install it |
robotframework-retryfailed | 0.2.0 | 30 | Retries, filtered by exception type (partial) | you install it |
coverage | 7.16.2 | 1,436 | Code coverage | you install it |
| Total | 8,005 KB | 4 packages: 4 you install, 0 pulled in | ||
| Package | Version | Size (KB) | Features it brings | Why it is installed |
|---|---|---|---|---|
parameterized | 0.9.0 | 139 | Test parametrization, Suite-level parametrization | you install it |
unittest-parallel | 1.8.6 | 51 | Parallel execution | you install it |
html-testRunner | 1.2.1 | 62 | HTML report | you install it |
unittest-xml-reporting | 4.0.0 | 114 | JUnit XML report | you install it |
coverage | 7.16.2 | 1,436 | Code coverage | you install it |
lxml | 6.1.3 | 9,073 | XML writing for unittest-xml-reporting | pulled in by unittest-xml-reporting |
Jinja2 | 3.1.6 | 1,147 | HTML templates | pulled in by html-testrunner |
MarkupSafe | 3.0.4 | 56 | HTML escaping for jinja2 | pulled in by jinja2 |
Plus unittest itself: 539 KB in Python's standard library, not counted because every Python install already has it. | ||||
| Total | 12,078 KB | 8 packages: 5 you install, 3 pulled in | ||
You name 10 packages. pip installs 28: each one declares what it needs, pip installs those, then what they need, and so on. The 18 packages you never named add up to 16,736 KB, 81% of the install.
pytest 2,937 KB ├─ colorama 166 KB ├─ iniconfig 36 KB ├─ packaging 974 KB ├─ pluggy 135 KB └─ Pygments 8,358 KB pytest-xdist 326 KB ├─ execnet 300 KB └─ pytest already installed above pytest-rerunfailures 142 KB ├─ packaging already installed above └─ pytest already installed above pytest-order 111 KB └─ pytest already installed above pytest-randomly 32 KB └─ pytest already installed above pytest-html 115 KB ├─ Jinja2 1,147 KB │ └─ MarkupSafe 56 KB ├─ pytest-metadata 34 KB │ └─ pytest already installed above └─ pytest already installed above pytest-json-report 61 KB ├─ pytest already installed above └─ pytest-metadata already installed above pytest-cov 116 KB ├─ coverage 1,436 KB ├─ pluggy already installed above └─ pytest already installed above pytest-github-actions-annotate-failures 19 KB └─ pytest already installed above pytest-monitor 85 KB ├─ pytest already installed above ├─ requests 468 KB │ ├─ charset-normalizer 734 KB │ ├─ idna 506 KB │ ├─ urllib3 908 KB │ └─ certifi 248 KB ├─ psutil 816 KB ├─ memory-profiler 204 KB │ └─ psutil already installed above └─ wheel 208 KB └─ packaging already installed above
Every chain from a package you installed to one you didn't. Two levels deep means it was needed by something that was itself pulled in. pytest-monitor alone brings an HTTP client stack (requests, urllib3, idna, charset-normalizer, certifi) and wheel, because it can upload results to a server. pytest itself brings pygments, the largest package in the whole install, to color tracebacks.
| Package you didn't ask for | Size (KB) | Levels deep | Every way it got installed |
|---|---|---|---|
Pygments | 8,358 | 1 | pytest → Pygments |
coverage | 1,436 | 1 | pytest-cov → coverage |
Jinja2 | 1,147 | 1 | pytest-html → Jinja2 |
packaging | 974 | 2 | pytest → packagingpytest-rerunfailures → packagingpytest-monitor → wheel → packaging |
urllib3 | 908 | 2 | pytest-monitor → requests → urllib3 |
psutil | 816 | 2 | pytest-monitor → psutilpytest-monitor → memory-profiler → psutil |
charset-normalizer | 734 | 2 | pytest-monitor → requests → charset-normalizer |
idna | 506 | 2 | pytest-monitor → requests → idna |
requests | 468 | 1 | pytest-monitor → requests |
execnet | 300 | 1 | pytest-xdist → execnet |
certifi | 248 | 2 | pytest-monitor → requests → certifi |
wheel | 208 | 1 | pytest-monitor → wheel |
memory-profiler | 204 | 1 | pytest-monitor → memory-profiler |
colorama | 166 | 1 | pytest → colorama |
pluggy | 135 | 1 | pytest → pluggypytest-cov → pluggy |
MarkupSafe | 56 | 2 | pytest-html → Jinja2 → MarkupSafe |
iniconfig | 36 | 1 | pytest → iniconfig |
pytest-metadata | 34 | 1 | pytest-html → pytest-metadatapytest-json-report → pytest-metadata |
Test Junkie: its four dependencies need nothing further.
test_junkie 864 KB ├─ psutil 816 KB ├─ appdirs 62 KB ├─ colorama 167 KB └─ coverage 1,436 KB
Robot Framework: no dependencies of its own.
robotframework 5,998 KB robotframework-pabot 540 KB └─ robotframework already installed above robotframework-retryfailed 30 KB └─ robotframework already installed above coverage 1,436 KB
unittest: unittest-xml-reporting needs lxml, a compiled XML library, for one XML report.
parameterized 139 KB unittest-parallel 51 KB └─ coverage 1,436 KB html-testRunner 62 KB └─ Jinja2 1,147 KB └─ MarkupSafe 56 KB unittest-xml-reporting 114 KB └─ lxml 9,073 KB coverage already installed above
pip install in one command per framework. Versions are the latest on PyPI on October 7, 2026; Test Junkie 0.9a6.site-packages: code, the .pyc files compiled at install, compiled extensions, data files and the package's .dist-info. Not counted: pip itself, and the small launcher programs pip creates for command-line tools, whose size depends on the operating system.packaging, coverage, jinja2) is installed once and counted once.psutil, lxml, markupsafe, charset-normalizer) are smaller or larger on Linux and macOS, and on Linux pytest doesn't install colorama. The totals move by a few percent; the order doesn't change.coverage (1,436 KB) for --code-cov, psutil (816 KB) for resource monitoring, colorama and appdirs. Without them the test_junkie package itself is 864 KB.Speed comparisons are on the performance benchmark page.