Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

## [Unreleased]
### Added
- Escaping of binary symbol '\0' in parameters, by @HardNorth

## [5.4.6]
### Added
- Support for `Python 3.13`, by @HardNorth
- Support for `name` Pytest marker, by @HardNorth
- `rp_hierarchy_test_file` configuration parameter, which controls display of test file name in the hierarchy, by @ramir-dn, @HardNorth
Expand Down
16 changes: 16 additions & 0 deletions examples/params/test_binary_symbol_in_parameters.py
Original file line number Diff line number Diff line change
@@ -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')
16 changes: 9 additions & 7 deletions pytest_reportportal/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
"""
Expand Down Expand Up @@ -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.

Expand All @@ -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.

Expand All @@ -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']),
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from setuptools import setup


__version__ = '5.4.6'
__version__ = '5.4.7'


def read_file(fname):
Expand Down
4 changes: 3 additions & 1 deletion tests/integration/test_parameters_report.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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.
Expand Down
Loading