From 492a5c67f66f1f698907fb31922b041ee3be12f2 Mon Sep 17 00:00:00 2001 From: OpenHTF Owners Date: Mon, 13 Feb 2023 13:15:59 -0800 Subject: [PATCH] Add failure outcome details when Multidim measurements fail so that the user can check them (e.g. on the console). PiperOrigin-RevId: 509314086 --- openhtf/core/test_state.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/openhtf/core/test_state.py b/openhtf/core/test_state.py index 3f3487ad1..8a3d25056 100644 --- a/openhtf/core/test_state.py +++ b/openhtf/core/test_state.py @@ -79,6 +79,8 @@ class _Infer(enum.Enum): INFER_MIMETYPE: Literal[_Infer.INFER] = _Infer.INFER MimetypeT = Union[None, Literal[INFER_MIMETYPE], Text] +# MultiDim measurement failure code. +MULTIDIM_FAIL = 'Multidim Measurement Failure' class BlankDutIdError(Exception): """DUT serial cannot be blank at the end of a test.""" @@ -447,6 +449,30 @@ def finalize_from_phase_outcome( ) self._finalize(test_record.Outcome.FAIL) + def maybe_add_outcome_details_from_phases_multidim_measurements(self): + """Add additional outcome details for failed multidim measurements.""" + indent = ' ' + for phase in self.test_record.phases: + if phase.outcome == test_record.PhaseOutcome.FAIL: + for name, measurement in phase.measurements.items(): + if ( + measurement.outcome != measurements.Outcome.PASS + and measurement.dimensions + ): + message = [ + '%sfailed_item: %s (%s)' % (indent, name, measurement.outcome) + ] + message.append( + '%smeasured_value: %s' + % (indent * 2, measurement.measured_value) + ) + message.append('%svalidators:' % (indent * 2)) + for validator in measurement.validators: + message.append('%svalidator: %s' % (indent * 3, str(validator))) + self.test_record.add_outcome_details( + MULTIDIM_FAIL, '\n'.join(message) + ) + def finalize_normally(self) -> None: """Mark the state as finished. @@ -462,6 +488,8 @@ def finalize_normally(self) -> None: self._finalize(test_record.Outcome.PASS) elif any( phase.outcome == test_record.PhaseOutcome.FAIL for phase in phases): + # Look for multidim failures to add to outcome details. + self.maybe_add_outcome_details_from_phases_multidim_measurements() # Any FAIL phase results in a test failure. self._finalize(test_record.Outcome.FAIL) elif all(