From 9fe2986c8205c11e21f61487397384f7aa2ab6d2 Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Tue, 21 May 2024 12:20:22 +0200 Subject: [PATCH] ci: ignore import error when collecting pytest cases locally --- tools/ci/idf_pytest/plugin.py | 36 +++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/tools/ci/idf_pytest/plugin.py b/tools/ci/idf_pytest/plugin.py index 1d58bc6bbd..b2e04402c4 100644 --- a/tools/ci/idf_pytest/plugin.py +++ b/tools/ci/idf_pytest/plugin.py @@ -1,9 +1,13 @@ # SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Apache-2.0 +import importlib +import logging import os +import sys import typing as t from collections import defaultdict from functools import cached_property +from unittest.mock import MagicMock from xml.etree import ElementTree as ET import pytest @@ -135,6 +139,38 @@ class IdfPytestEmbedded: multi_dut_without_param=multi_dut_without_param ) + def pytest_collectstart(self) -> None: + # mock the optional packages while collecting locally + if not os.getenv('CI_JOB_ID'): + # optional packages required by test scripts + for p in [ + 'scapy', + 'scapy.all', + 'websocket', # websocket-client + 'netifaces', + 'RangeHTTPServer', # rangehttpserver + 'dbus', # dbus-python + 'dbus.mainloop', + 'dbus.mainloop.glib', + 'google.protobuf', # protobuf + 'google.protobuf.internal', + 'bleak', + 'paho', # paho-mqtt + 'paho.mqtt', + 'paho.mqtt.client', + 'paramiko', + 'netmiko', + 'pyecharts', + 'pyecharts.options', + 'pyecharts.charts', + 'can', # python-can + ]: + try: + importlib.import_module(p) + except ImportError: + logging.warning(f'Optional package {p} is not installed, mocking it while collecting...') + sys.modules[p] = MagicMock() + @pytest.hookimpl(tryfirst=True) def pytest_collection_modifyitems(self, items: t.List[Function]) -> None: """