2020import threading
2121import traceback
2222from collections import OrderedDict
23+ from datetime import datetime , timezone
2324from enum import Enum
2425from functools import wraps
2526from os import curdir
2829
2930from _pytest .doctest import DoctestItem
3031from py .path import local
31- from pytest import Class , Function , Item , Module , Package , PytestWarning , Session
32+ from pytest import Class , Function , Item , Module , Package , Session
3233from reportportal_client .aio import Task
3334from reportportal_client .core .rp_issues import ExternalIssue , Issue
34- from reportportal_client .helpers import markdown_helpers , timestamp
35+ from reportportal_client .helpers import markdown_helpers
3536
3637from .config import AgentConfig
3738
8081LOGGER = logging .getLogger (__name__ )
8182
8283KNOWN_LOG_LEVELS = ("TRACE" , "DEBUG" , "INFO" , "WARN" , "ERROR" )
83- MAX_ITEM_NAME_LENGTH : int = 1024
84- TRUNCATION_STR : str = "..."
8584ROOT_DIR : str = str (os .path .abspath (curdir ))
8685PYTEST_MARKS_IGNORE : set [str ] = {"parametrize" , "usefixtures" , "filterwarnings" }
8786NOT_ISSUE : Issue = Issue ("NOT_ISSUE" )
@@ -238,7 +237,7 @@ def _build_start_launch_rq(self) -> dict[str, Any]:
238237 start_rq = {
239238 "attributes" : self ._get_launch_attributes (attributes ),
240239 "name" : self ._config .rp_launch ,
241- "start_time" : timestamp ( ),
240+ "start_time" : datetime . now ( tz = timezone . utc ),
242241 "description" : self ._config .rp_launch_description ,
243242 "rerun" : self ._config .rp_rerun ,
244243 "rerun_of" : self ._config .rp_rerun_of ,
@@ -497,21 +496,6 @@ def collect_tests(self, session: Session) -> None:
497496 self ._merge_code (test_tree )
498497 self ._build_item_paths (test_tree , [])
499498
500- def _truncate_item_name (self , name : str ) -> str :
501- """Get name of item.
502-
503- :param name: Test Item name
504- :return: truncated to maximum length name if needed
505- """
506- if len (name ) > MAX_ITEM_NAME_LENGTH :
507- name = name [: MAX_ITEM_NAME_LENGTH - len (TRUNCATION_STR )] + TRUNCATION_STR
508- LOGGER .warning (
509- PytestWarning (
510- f'Test leaf ID was truncated to "{ name } " because of name size constrains on Report Portal'
511- )
512- )
513- return name
514-
515499 def _get_item_description (self , test_item : Any ) -> Optional [str ]:
516500 """Get description of item.
517501
@@ -580,9 +564,9 @@ def _build_start_suite_rq(self, leaf: dict[str, Any]) -> dict[str, Any]:
580564 parent_item_id = self ._lock (leaf ["parent" ], lambda p : p .get ("item_id" )) if "parent" in leaf else None
581565 item = leaf ["item" ]
582566 payload = {
583- "name" : self . _truncate_item_name ( leaf ["name" ]) ,
567+ "name" : leaf ["name" ],
584568 "description" : self ._get_item_description (item ),
585- "start_time" : timestamp ( ),
569+ "start_time" : datetime . now ( tz = timezone . utc ),
586570 "item_type" : "SUITE" ,
587571 "code_ref" : code_ref ,
588572 "parent_item_id" : parent_item_id ,
@@ -882,9 +866,9 @@ def _process_metadata_item_finish(self, leaf: dict[str, Any]) -> None:
882866 def _build_start_step_rq (self , leaf : dict [str , Any ]) -> dict [str , Any ]:
883867 payload = {
884868 "attributes" : leaf .get ("attributes" , None ),
885- "name" : self . _truncate_item_name ( leaf ["name" ]) ,
869+ "name" : leaf ["name" ],
886870 "description" : leaf ["description" ],
887- "start_time" : timestamp ( ),
871+ "start_time" : datetime . now ( tz = timezone . utc ),
888872 "item_type" : "STEP" ,
889873 "code_ref" : leaf .get ("code_ref" , None ),
890874 "parameters" : leaf .get ("parameters" , None ),
@@ -963,7 +947,7 @@ def _build_finish_step_rq(self, leaf: dict[str, Any]) -> dict[str, Any]:
963947 issue = None
964948 payload = {
965949 "attributes" : leaf .get ("attributes" , None ),
966- "end_time" : timestamp ( ),
950+ "end_time" : datetime . now ( tz = timezone . utc ),
967951 "status" : status ,
968952 "issue" : issue ,
969953 "item_id" : leaf ["item_id" ],
@@ -979,7 +963,7 @@ def _finish_suite(self, finish_rq: dict[str, Any]) -> None:
979963 self .rp .finish_test_item (** finish_rq )
980964
981965 def _build_finish_suite_rq (self , leaf ) -> dict [str , Any ]:
982- payload = {"end_time" : timestamp ( ), "item_id" : leaf ["item_id" ]}
966+ payload = {"end_time" : datetime . now ( tz = timezone . utc ), "item_id" : leaf ["item_id" ]}
983967 return payload
984968
985969 def _proceed_suite_finish (self , leaf ) -> None :
@@ -1056,7 +1040,7 @@ def finish_suites(self) -> None:
10561040 self ._lock (leaf , lambda p : self ._proceed_suite_finish (p ))
10571041
10581042 def _build_finish_launch_rq (self ) -> dict [str , Any ]:
1059- finish_rq = {"end_time" : timestamp ( )}
1043+ finish_rq = {"end_time" : datetime . now ( tz = timezone . utc )}
10601044 return finish_rq
10611045
10621046 def _finish_launch (self , finish_rq ) -> None :
@@ -1074,7 +1058,7 @@ def _build_log(
10741058 ) -> dict [str , Any ]:
10751059 sl_rq = {
10761060 "item_id" : item_id ,
1077- "time" : timestamp ( ),
1061+ "time" : datetime . now ( tz = timezone . utc ),
10781062 "message" : message ,
10791063 "level" : log_level ,
10801064 }
@@ -1123,7 +1107,7 @@ def report_fixture(self, name: str, error_msg: str) -> Generator[None, Any, None
11231107 return
11241108
11251109 reporter = self .rp .step_reporter
1126- item_id = reporter .start_nested_step (name , timestamp ( ))
1110+ item_id = reporter .start_nested_step (name , datetime . now ( tz = timezone . utc ))
11271111
11281112 try :
11291113 outcome = yield
@@ -1140,11 +1124,11 @@ def report_fixture(self, name: str, error_msg: str) -> Generator[None, Any, None
11401124 )
11411125 exception_log = self ._build_log (item_id , traceback_str , log_level = "ERROR" )
11421126 self .rp .log (** exception_log )
1143- reporter .finish_nested_step (item_id , timestamp ( ), status )
1127+ reporter .finish_nested_step (item_id , datetime . now ( tz = timezone . utc ), status )
11441128 except Exception as e :
11451129 LOGGER .error ("Failed to report fixture: %s" , name )
11461130 LOGGER .exception (e )
1147- reporter .finish_nested_step (item_id , timestamp ( ), "FAILED" )
1131+ reporter .finish_nested_step (item_id , datetime . now ( tz = timezone . utc ), "FAILED" )
11481132
11491133 def _get_python_name (self , scenario : Scenario ) -> str :
11501134 python_name = f"test_{ make_python_name (self ._get_scenario_template (scenario ).name )} "
@@ -1301,7 +1285,7 @@ def _finish_bdd_step(self, leaf: dict[str, Any], status: str) -> None:
13011285
13021286 reporter = self .rp .step_reporter
13031287 item_id = leaf ["item_id" ]
1304- reporter .finish_nested_step (item_id , timestamp ( ), status )
1288+ reporter .finish_nested_step (item_id , datetime . now ( tz = timezone . utc ), status )
13051289 leaf ["exec" ] = ExecStatus .FINISHED
13061290
13071291 def _is_background_step (self , step : Step , feature : Feature ) -> bool :
@@ -1343,15 +1327,15 @@ def start_bdd_step(self, feature: Feature, scenario: Scenario, step: Step) -> No
13431327 background_leaf = scenario_leaf ["children" ][feature .background ]
13441328 background_leaf ["children" ][step ] = step_leaf
13451329 if background_leaf ["exec" ] != ExecStatus .IN_PROGRESS :
1346- item_id = reporter .start_nested_step (BACKGROUND_STEP_NAME , timestamp ( ))
1330+ item_id = reporter .start_nested_step (BACKGROUND_STEP_NAME , datetime . now ( tz = timezone . utc ))
13471331 background_leaf ["item_id" ] = item_id
13481332 background_leaf ["exec" ] = ExecStatus .IN_PROGRESS
13491333 else :
13501334 scenario_leaf ["children" ][step ] = step_leaf
13511335 if feature .background :
13521336 background_leaf = scenario_leaf ["children" ][feature .background ]
13531337 self ._finish_bdd_step (background_leaf , "PASSED" )
1354- item_id = reporter .start_nested_step (self . _truncate_item_name ( f"{ step .keyword } { step .name } " ), timestamp ( ))
1338+ item_id = reporter .start_nested_step (f"{ step .keyword } { step .name } " , datetime . now ( tz = timezone . utc ))
13551339 step_leaf ["item_id" ] = item_id
13561340 step_leaf ["exec" ] = ExecStatus .IN_PROGRESS
13571341
0 commit comments