From b78d175814e8a5b147ee099e35c34e05c5bd3342 Mon Sep 17 00:00:00 2001 From: "reportportal.io" Date: Tue, 3 Dec 2024 14:25:45 +0000 Subject: [PATCH 1/3] Changelog update --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bfe6031..53a259d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # Changelog ## [Unreleased] + +## [5.4.6] ### Added - Support for `Python 3.13`, by @HardNorth - Support for `name` Pytest marker, by @HardNorth From bf9f090af73bc03dd61a2475b176c9ea3ca8b4b0 Mon Sep 17 00:00:00 2001 From: "reportportal.io" Date: Tue, 3 Dec 2024 14:25:45 +0000 Subject: [PATCH 2/3] Version update --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 5ecc76d..b5dc3ab 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ from setuptools import setup -__version__ = '5.4.6' +__version__ = '5.4.7' def read_file(fname): From 1ae302fc0c20186250069b50a7786513b27e30f9 Mon Sep 17 00:00:00 2001 From: Vadzim Hushchanskou Date: Wed, 4 Dec 2024 12:34:16 +0300 Subject: [PATCH 3/3] Escaping of binary symbol '\0' in parameters --- CHANGELOG.md | 2 ++ .../params/test_binary_symbol_in_parameters.py | 16 ++++++++++++++++ pytest_reportportal/service.py | 16 +++++++++------- tests/integration/test_parameters_report.py | 4 +++- 4 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 examples/params/test_binary_symbol_in_parameters.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 53a259d..5125920 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # Changelog ## [Unreleased] +### Added +- Escaping of binary symbol '\0' in parameters, by @HardNorth ## [5.4.6] ### Added diff --git a/examples/params/test_binary_symbol_in_parameters.py b/examples/params/test_binary_symbol_in_parameters.py new file mode 100644 index 0000000..6ae5cac --- /dev/null +++ b/examples/params/test_binary_symbol_in_parameters.py @@ -0,0 +1,16 @@ +"""A simple example test with different parameter types.""" +import pytest + + +BINARY_TEXT = 'Some text with binary symbol \0' + + +@pytest.mark.parametrize( + ['text'], [[BINARY_TEXT]] +) +def test_in_class_parameterized(text): + """ + This is my test with different parameter types. + """ + assert text == BINARY_TEXT + assert text != BINARY_TEXT.replace('\0', '\\0') diff --git a/pytest_reportportal/service.py b/pytest_reportportal/service.py index adef8ca..31a593f 100644 --- a/pytest_reportportal/service.py +++ b/pytest_reportportal/service.py @@ -592,14 +592,17 @@ def _process_item_name(self, leaf: Dict[str, Any]) -> str: name = mark_name return name - def _get_parameters(self, item): + def _get_parameters(self, item) -> Optional[Dict[str, Any]]: """ Get params of item. :param item: Pytest.Item :return: dict of params """ - return item.callspec.params if hasattr(item, 'callspec') else None + params = item.callspec.params if hasattr(item, 'callspec') else None + if not params: + return None + return {str(k): v.replace('\0', '\\0') if isinstance(v, str) else v for k, v in params.items()} def _process_test_case_id(self, leaf): """ @@ -650,7 +653,7 @@ def _process_attributes(self, item): return [self._to_attribute(attribute) for attribute in attributes] - def _process_metadata_item_start(self, leaf: Dict[str, Any]): + def _process_metadata_item_start(self, leaf: Dict[str, Any]) -> None: """ Process all types of item metadata for its start event. @@ -664,7 +667,7 @@ def _process_metadata_item_start(self, leaf: Dict[str, Any]): leaf['issue'] = self._process_issue(item) leaf['attributes'] = self._process_attributes(item) - def _process_metadata_item_finish(self, leaf: Dict[str, Any]): + def _process_metadata_item_finish(self, leaf: Dict[str, Any]) -> None: """ Process all types of item metadata for its finish event. @@ -674,7 +677,7 @@ def _process_metadata_item_finish(self, leaf: Dict[str, Any]): leaf['attributes'] = self._process_attributes(item) leaf['issue'] = self._process_issue(item) - def _build_start_step_rq(self, leaf): + def _build_start_step_rq(self, leaf: Dict[str, Any]) -> Dict[str, Any]: payload = { 'attributes': leaf.get('attributes', None), 'name': self._truncate_item_name(leaf['name']), @@ -683,8 +686,7 @@ def _build_start_step_rq(self, leaf): 'item_type': 'STEP', 'code_ref': leaf.get('code_ref', None), 'parameters': leaf.get('parameters', None), - 'parent_item_id': self._lock(leaf['parent'], - lambda p: p['item_id']), + 'parent_item_id': self._lock(leaf['parent'], lambda p: p['item_id']), 'test_case_id': leaf.get('test_case_id', None) } return payload diff --git a/tests/integration/test_parameters_report.py b/tests/integration/test_parameters_report.py index 4717710..e4a7cba 100644 --- a/tests/integration/test_parameters_report.py +++ b/tests/integration/test_parameters_report.py @@ -16,6 +16,7 @@ import pytest from unittest import mock +from examples.params.test_binary_symbol_in_parameters import BINARY_TEXT from tests import REPORT_PORTAL_SERVICE from tests.helpers import utils @@ -25,7 +26,8 @@ ('examples/test_simple.py', None), ('examples/params/test_in_class_parameterized.py', {'param': 'param'}), ('examples/params/test_different_parameter_types.py', - {'integer': 1, 'floating_point': 1.5, 'boolean': True, 'none': None}) + {'integer': 1, 'floating_point': 1.5, 'boolean': True, 'none': None}), + ('examples/params/test_binary_symbol_in_parameters.py', {'text': BINARY_TEXT.replace('\0', '\\0')}), ]) def test_parameters(mock_client_init, test, expected_params): """Verify different tests have correct parameters.