Skip to content

Commit c73f684

Browse files
committed
fix: Raise exceptions for Dut created by DutFactory
1 parent 0a1973b commit c73f684

File tree

3 files changed

+25
-4
lines changed

3 files changed

+25
-4
lines changed

pytest-embedded-idf/tests/test_idf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ def test_idf_run_all_single_board_cases():
101101
'--junitxml',
102102
'report.xml',
103103
)
104-
result.assert_outcomes(passed=4, errors=0) # FIXME, dut-factory mode can't raise error now
104+
result.assert_outcomes(passed=3, failed=1)
105105

106106
junit_report = ET.parse('report.xml').getroot()[0]
107107

pytest-embedded/pytest_embedded/dut_factory.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -838,3 +838,16 @@ def create(
838838
_close_or_terminate(obj)
839839
del layout
840840
raise e
841+
842+
@classmethod
843+
def get_all_duts(cls) -> list[Dut]:
844+
"""Get all DUTs created by DutFactory."""
845+
846+
duts = []
847+
for layout in cls.obj_stack:
848+
# The DUT is always the last object in the layout
849+
dut = layout[-1]
850+
if isinstance(dut, Dut):
851+
duts.append(dut)
852+
853+
return duts

pytest-embedded/pytest_embedded/plugin.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1372,10 +1372,18 @@ def pytest_collection_modifyitems(self, config: Config, items: list[Function]):
13721372

13731373
@pytest.hookimpl(trylast=True)
13741374
def pytest_runtest_call(self, item: Function):
1375-
# raise dut failed cases
1375+
all_duts: list[Dut] = []
1376+
1377+
# Check DUTs created by fixture
13761378
if 'dut' in item.funcargs:
1377-
duts = [dut for dut in to_list(item.funcargs['dut']) if isinstance(dut, Dut)]
1378-
self._raise_dut_failed_cases_if_exists(duts) # type: ignore
1379+
fixture_duts = [dut for dut in to_list(item.funcargs['dut']) if isinstance(dut, Dut)]
1380+
all_duts.extend(fixture_duts)
1381+
1382+
# Check DUTs created by DutFactory
1383+
factory_duts = DutFactory.get_all_duts()
1384+
all_duts.extend(factory_duts)
1385+
1386+
self._raise_dut_failed_cases_if_exists(all_duts) # type: ignore
13791387

13801388
@pytest.hookimpl(trylast=True) # combine all possible junit reports should be the last step
13811389
def pytest_sessionfinish(self, session: Session, exitstatus: int) -> None:

0 commit comments

Comments
 (0)