pytest-html-plus 0.5.0__tar.gz → 0.5.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pytest_html_plus-0.5.0 → pytest_html_plus-0.5.2}/PKG-INFO +17 -11
- {pytest_html_plus-0.5.0 → pytest_html_plus-0.5.2}/README.md +6 -7
- pytest_html_plus-0.5.2/pyproject.toml +87 -0
- {pytest_html_plus-0.5.0 → pytest_html_plus-0.5.2}/pytest_html_plus/compute_filter_counts.py +3 -5
- {pytest_html_plus-0.5.0 → pytest_html_plus-0.5.2}/pytest_html_plus/compute_report_metadata.py +10 -4
- {pytest_html_plus-0.5.0 → pytest_html_plus-0.5.2}/pytest_html_plus/generate_html_report.py +258 -129
- pytest_html_plus-0.5.2/pytest_html_plus/json_merge.py +123 -0
- {pytest_html_plus-0.5.0 → pytest_html_plus-0.5.2}/pytest_html_plus/json_to_xml_converter.py +47 -36
- pytest_html_plus-0.5.2/pytest_html_plus/plugin.py +443 -0
- pytest_html_plus-0.5.2/pytest_html_plus/resolver_driver.py +47 -0
- {pytest_html_plus-0.5.0 → pytest_html_plus-0.5.2}/pytest_html_plus/send_email_report.py +7 -2
- {pytest_html_plus-0.5.0 → pytest_html_plus-0.5.2}/pytest_html_plus/utils.py +15 -6
- pytest_html_plus-0.5.0/pyproject.toml +0 -60
- pytest_html_plus-0.5.0/pytest_html_plus/json_merge.py +0 -53
- pytest_html_plus-0.5.0/pytest_html_plus/plugin.py +0 -436
- pytest_html_plus-0.5.0/pytest_html_plus/resolver_driver.py +0 -44
- {pytest_html_plus-0.5.0 → pytest_html_plus-0.5.2}/LICENSE +0 -0
- {pytest_html_plus-0.5.0 → pytest_html_plus-0.5.2}/pytest_html_plus/__init__.py +0 -0
- {pytest_html_plus-0.5.0 → pytest_html_plus-0.5.2}/pytest_html_plus/extract_link.py +0 -0
|
@@ -1,20 +1,27 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pytest-html-plus
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.2
|
|
4
4
|
Summary: Generate Actionable, automatic screenshots, unified Mobile friendly Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready.
|
|
5
5
|
License: MIT
|
|
6
|
-
Keywords: pytest,pytest-
|
|
6
|
+
Keywords: pytest,pytest-plugin,html-report,test-report,screenshot,mobile-report,xdist,allure-alternative,playwright,selenium
|
|
7
7
|
Author: reporterplus
|
|
8
|
-
|
|
8
|
+
Maintainer: reporterplus
|
|
9
|
+
Requires-Python: >=3.10,<4.0
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Framework :: Pytest
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
9
13
|
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
10
15
|
Classifier: Programming Language :: Python :: 3
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
12
16
|
Classifier: Programming Language :: Python :: 3.10
|
|
13
17
|
Classifier: Programming Language :: Python :: 3.11
|
|
14
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
19
|
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
21
|
+
Classifier: Topic :: Software Development :: Testing
|
|
16
22
|
Requires-Dist: keyring (>=25.6.0,<26.0.0)
|
|
17
23
|
Requires-Dist: yagmail (>=0.15.293,<0.16.0)
|
|
24
|
+
Project-URL: Documentation, https://pytest-html-plus.readthedocs.io
|
|
18
25
|
Project-URL: Homepage, https://github.com/reporterplus/pytest-html-plus
|
|
19
26
|
Project-URL: Source, https://github.com/reporterplus/pytest-html-plus
|
|
20
27
|
Project-URL: Tracker, https://github.com/reporterplus/pytest-html-plus/issues
|
|
@@ -48,7 +55,7 @@ If you don’t want the burden of installing pytest-html-plus manually and your
|
|
|
48
55
|
|
|
49
56
|
## Pytest HTML Plus VSCode
|
|
50
57
|
|
|
51
|
-
[]
|
|
58
|
+
[](https://marketplace.visualstudio.com/items?itemName=reporterplus.pytest-html-plus-vscode)
|
|
52
59
|
[]
|
|
53
60
|
[](https://pytest-html-plus.readthedocs.io/en/main/extensions/vscode/usage.html)
|
|
54
61
|
|
|
@@ -61,9 +68,13 @@ Export a fully merged JUnit XML report effortlessly — no external tools or plu
|
|
|
61
68
|
✔ Works out-of-the-box with your test management tools (like TestRail, XRay, Zephyr)
|
|
62
69
|
✔ Just one flag. No extra lines of code. Total traceability.
|
|
63
70
|
|
|
64
|
-
|
|
65
71
|

|
|
66
72
|
|
|
73
|
+
#### 🔄 Stop Guessing — See What’s Breaking Your Flaky Tests
|
|
74
|
+
Instantly see how your tests behave across retries — from failure to recovery. Spot patterns like cache issues, race conditions, and random crashes without the guesswork.
|
|
75
|
+
|
|
76
|
+

|
|
77
|
+
|
|
67
78
|
#### 🏷️ Tag your tests on the fly!
|
|
68
79
|
With dynamic markers, you can assign tags like `api`, `critical`, or `slow` — or any custom label — at runtime using standard `pytest.mark.*`.
|
|
69
80
|
No need for custom marker definitions. Perfect for smarter filtering, reporting, and analysis.
|
|
@@ -82,7 +93,6 @@ No need for custom marker definitions. Perfect for smarter filtering, reporting,
|
|
|
82
93
|
|
|
83
94
|

|
|
84
95
|
|
|
85
|
-
|
|
86
96
|
#### 🔍 Universal Test Search + Smart Link Navigation
|
|
87
97
|
|
|
88
98
|
Whether you're trying to trace coverage or track unlinked test cases — this search has your back!
|
|
@@ -97,10 +107,6 @@ Just start typing, and the dashboard will instantly filter tests by:
|
|
|
97
107
|
|
|
98
108
|

|
|
99
109
|
|
|
100
|
-
#### 🔄 Flaky Test Detection: Automatically flags flaky tests so you can spot and fix inconsistent failures quickly.
|
|
101
|
-
|
|
102
|
-

|
|
103
|
-
|
|
104
110
|
#### 📸 Screenshot Support: View screenshots directly in the report to understand failures faster.
|
|
105
111
|
|
|
106
112
|
#### 📧 Email Test Reports: Send your reports via email effortlessly using SendGrid integration.
|
|
@@ -26,7 +26,7 @@ If you don’t want the burden of installing pytest-html-plus manually and your
|
|
|
26
26
|
|
|
27
27
|
## Pytest HTML Plus VSCode
|
|
28
28
|
|
|
29
|
-
[]
|
|
29
|
+
[](https://marketplace.visualstudio.com/items?itemName=reporterplus.pytest-html-plus-vscode)
|
|
30
30
|
[]
|
|
31
31
|
[](https://pytest-html-plus.readthedocs.io/en/main/extensions/vscode/usage.html)
|
|
32
32
|
|
|
@@ -39,9 +39,13 @@ Export a fully merged JUnit XML report effortlessly — no external tools or plu
|
|
|
39
39
|
✔ Works out-of-the-box with your test management tools (like TestRail, XRay, Zephyr)
|
|
40
40
|
✔ Just one flag. No extra lines of code. Total traceability.
|
|
41
41
|
|
|
42
|
-
|
|
43
42
|

|
|
44
43
|
|
|
44
|
+
#### 🔄 Stop Guessing — See What’s Breaking Your Flaky Tests
|
|
45
|
+
Instantly see how your tests behave across retries — from failure to recovery. Spot patterns like cache issues, race conditions, and random crashes without the guesswork.
|
|
46
|
+
|
|
47
|
+

|
|
48
|
+
|
|
45
49
|
#### 🏷️ Tag your tests on the fly!
|
|
46
50
|
With dynamic markers, you can assign tags like `api`, `critical`, or `slow` — or any custom label — at runtime using standard `pytest.mark.*`.
|
|
47
51
|
No need for custom marker definitions. Perfect for smarter filtering, reporting, and analysis.
|
|
@@ -60,7 +64,6 @@ No need for custom marker definitions. Perfect for smarter filtering, reporting,
|
|
|
60
64
|
|
|
61
65
|

|
|
62
66
|
|
|
63
|
-
|
|
64
67
|
#### 🔍 Universal Test Search + Smart Link Navigation
|
|
65
68
|
|
|
66
69
|
Whether you're trying to trace coverage or track unlinked test cases — this search has your back!
|
|
@@ -75,10 +78,6 @@ Just start typing, and the dashboard will instantly filter tests by:
|
|
|
75
78
|
|
|
76
79
|

|
|
77
80
|
|
|
78
|
-
#### 🔄 Flaky Test Detection: Automatically flags flaky tests so you can spot and fix inconsistent failures quickly.
|
|
79
|
-
|
|
80
|
-

|
|
81
|
-
|
|
82
81
|
#### 📸 Screenshot Support: View screenshots directly in the report to understand failures faster.
|
|
83
82
|
|
|
84
83
|
#### 📧 Email Test Reports: Send your reports via email effortlessly using SendGrid integration.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
[tool.poetry]
|
|
2
|
+
name = "pytest-html-plus"
|
|
3
|
+
version = "0.5.2"
|
|
4
|
+
description = "Generate Actionable, automatic screenshots, unified Mobile friendly Pytest HTML report in less than 3 seconds — no hooks, merge plugins, no config, xdist-ready."
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
authors = ["reporterplus"]
|
|
7
|
+
license = "MIT"
|
|
8
|
+
packages = [{ include = "pytest_html_plus" }]
|
|
9
|
+
maintainers = ["reporterplus"]
|
|
10
|
+
classifiers = [
|
|
11
|
+
"Framework :: Pytest",
|
|
12
|
+
"Programming Language :: Python :: 3",
|
|
13
|
+
"Programming Language :: Python :: 3.10",
|
|
14
|
+
"Programming Language :: Python :: 3.11",
|
|
15
|
+
"Programming Language :: Python :: 3.12",
|
|
16
|
+
"License :: OSI Approved :: MIT License",
|
|
17
|
+
"Operating System :: OS Independent",
|
|
18
|
+
"Topic :: Software Development :: Testing",
|
|
19
|
+
"Topic :: Software Development :: Quality Assurance",
|
|
20
|
+
"Intended Audience :: Developers",
|
|
21
|
+
"Development Status :: 4 - Beta",
|
|
22
|
+
]
|
|
23
|
+
keywords = [
|
|
24
|
+
"pytest",
|
|
25
|
+
"pytest-plugin",
|
|
26
|
+
"html-report",
|
|
27
|
+
"test-report",
|
|
28
|
+
"screenshot",
|
|
29
|
+
"mobile-report",
|
|
30
|
+
"xdist",
|
|
31
|
+
"allure-alternative",
|
|
32
|
+
"playwright",
|
|
33
|
+
"selenium",
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
urls.Homepage = "https://github.com/reporterplus/pytest-html-plus"
|
|
37
|
+
urls.Source = "https://github.com/reporterplus/pytest-html-plus"
|
|
38
|
+
urls.Tracker = "https://github.com/reporterplus/pytest-html-plus/issues"
|
|
39
|
+
urls.Documentation = "https://pytest-html-plus.readthedocs.io"
|
|
40
|
+
|
|
41
|
+
[tool.poetry.dependencies]
|
|
42
|
+
python = ">=3.10,<4.0"
|
|
43
|
+
yagmail = ">=0.15.293,<0.16.0"
|
|
44
|
+
keyring = ">=25.6.0,<26.0.0"
|
|
45
|
+
|
|
46
|
+
[tool.poetry.group.dev.dependencies]
|
|
47
|
+
pytest-rerunfailures = "^15.1"
|
|
48
|
+
pytest = "^8.4.1"
|
|
49
|
+
pytest-cov = "^6.2.1"
|
|
50
|
+
playwright = "^1.53.0"
|
|
51
|
+
pytest-playwright = "^0.7.0"
|
|
52
|
+
pytest-xdist = "^3.8.0"
|
|
53
|
+
selenium = "^4.8.0"
|
|
54
|
+
webdriver-manager = "^3.8.5"
|
|
55
|
+
ruff = "^0.15.2"
|
|
56
|
+
black = "^26.3.1"
|
|
57
|
+
isort = "^8.0.1"
|
|
58
|
+
pre-commit = "^4.5.1"
|
|
59
|
+
|
|
60
|
+
[build-system]
|
|
61
|
+
requires = ["poetry-core"]
|
|
62
|
+
build-backend = "poetry.core.masonry.api"
|
|
63
|
+
|
|
64
|
+
[tool.poetry.plugins."pytest11"]
|
|
65
|
+
pytest_html_plus = "pytest_html_plus.plugin"
|
|
66
|
+
|
|
67
|
+
[tool.ruff]
|
|
68
|
+
line-length = 88
|
|
69
|
+
target-version = "py39"
|
|
70
|
+
ignore = [
|
|
71
|
+
"E501", # line too long — let black handle
|
|
72
|
+
"W291", # trailing whitespace — let black handle
|
|
73
|
+
"W293", # blank line whitespace — let black handle
|
|
74
|
+
]
|
|
75
|
+
exclude = [
|
|
76
|
+
"pytest_html_plus/generate_html_report.py"
|
|
77
|
+
]
|
|
78
|
+
|
|
79
|
+
[tool.ruff.lint]
|
|
80
|
+
select = [
|
|
81
|
+
"E", # pycodestyle errors
|
|
82
|
+
"W", # pycodestyle warnings
|
|
83
|
+
"F", # pyflakes
|
|
84
|
+
"I", # isort
|
|
85
|
+
"UP", # pyupgrade
|
|
86
|
+
]
|
|
87
|
+
ignore = []
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from collections import Counter, defaultdict
|
|
2
2
|
|
|
3
|
+
|
|
3
4
|
def compute_filter_count(results):
|
|
4
5
|
filters = Counter()
|
|
5
6
|
marker_counts = defaultdict(int)
|
|
@@ -27,11 +28,8 @@ def compute_filter_count(results):
|
|
|
27
28
|
total = len(results)
|
|
28
29
|
filters["total"] = total
|
|
29
30
|
filters["passed"] = (
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
- filters["skipped"]
|
|
33
|
-
- filters["error"]
|
|
34
|
-
)
|
|
31
|
+
total - filters["failed"] - filters["skipped"] - filters["error"]
|
|
32
|
+
)
|
|
35
33
|
|
|
36
34
|
filters["marker_counts"] = dict(marker_counts)
|
|
37
35
|
return dict(filters)
|
{pytest_html_plus-0.5.0 → pytest_html_plus-0.5.2}/pytest_html_plus/compute_report_metadata.py
RENAMED
|
@@ -2,11 +2,17 @@ import json
|
|
|
2
2
|
import os
|
|
3
3
|
from datetime import datetime
|
|
4
4
|
|
|
5
|
-
from pytest_html_plus.utils import
|
|
6
|
-
|
|
5
|
+
from pytest_html_plus.utils import (
|
|
6
|
+
get_env_marker,
|
|
7
|
+
get_python_version,
|
|
8
|
+
get_report_title,
|
|
9
|
+
is_main_worker,
|
|
10
|
+
)
|
|
7
11
|
|
|
8
12
|
|
|
9
|
-
def write_plus_metadata_if_main_worker(
|
|
13
|
+
def write_plus_metadata_if_main_worker(
|
|
14
|
+
config, report_path, output_path="plus_metadata.json", **kwargs
|
|
15
|
+
):
|
|
10
16
|
if not is_main_worker():
|
|
11
17
|
return
|
|
12
18
|
metadata_path = os.path.join(report_path, output_path)
|
|
@@ -18,7 +24,7 @@ def write_plus_metadata_if_main_worker(config, report_path, output_path="plus_me
|
|
|
18
24
|
"branch": branch,
|
|
19
25
|
"commit": commit,
|
|
20
26
|
"python_version": get_python_version(),
|
|
21
|
-
"generated_at": datetime.now().isoformat()
|
|
27
|
+
"generated_at": datetime.now().isoformat(),
|
|
22
28
|
}
|
|
23
29
|
os.makedirs(report_path, exist_ok=True)
|
|
24
30
|
|