diff --git a/src/transformers/testing_utils.py b/src/transformers/testing_utils.py index 8d6c1b19377eca..49c2aefa09260e 100644 --- a/src/transformers/testing_utils.py +++ b/src/transformers/testing_utils.py @@ -2385,6 +2385,10 @@ def wrapper(*args, **kwargs): env = copy.deepcopy(os.environ) env["_INSIDE_SUB_PROCESS"] = "1" + # This prevents the entries in `short test summary info` given by the subprocess being truncated. so the + # full information can be passed to the parent pytest process. + # See: https://docs.pytest.org/en/stable/explanation/ci.html + env["CI"] = "true" # If not subclass of `unitTest.TestCase` and `pytestconfig` is used: try to grab and use the arguments if "pytestconfig" in kwargs: @@ -2402,6 +2406,22 @@ def wrapper(*args, **kwargs): subprocess.run(command, env=env, check=True, capture_output=True) except subprocess.CalledProcessError as e: exception_message = e.stdout.decode() + lines = exception_message.split("\n") + # Add a first line with more informative information instead of just `= test session starts =`. + # This makes the `short test summary info` section more useful. + if "= test session starts =" in lines[0]: + text = "" + for line in lines[1:]: + if line.startswith("FAILED "): + text = line[len("FAILED ") :] + text = "".join(text.split(" - ")[1:]) + elif line.startswith("=") and line.endswith("=") and " failed in " in line: + break + elif len(text) > 0: + text += f"\n{line}" + text = "(subprocess) " + text + lines = [text] + lines + exception_message = "\n".join(lines) raise pytest.fail(exception_message, pytrace=False) return wrapper diff --git a/utils/notification_service.py b/utils/notification_service.py index 039ee8b29a3781..6c9eab3a85387b 100644 --- a/utils/notification_service.py +++ b/utils/notification_service.py @@ -1076,6 +1076,11 @@ def prepare_reports(title, header, reports, to_truncate=True): for line in artifact["summary_short"].split("\n"): if line.startswith("FAILED "): + # Avoid the extra `FAILED` entry given by `run_test_using_subprocess` causing issue when calling + # `stacktraces.pop` below. + # See `run_test_using_subprocess` in `src/transformers/testing_utils.py` + if " - Failed: (subprocess)" in line: + continue line = line[len("FAILED ") :] line = line.split()[0].replace("\n", "") @@ -1186,6 +1191,11 @@ def prepare_reports(title, header, reports, to_truncate=True): if failed: for line in artifact["summary_short"].split("\n"): if line.startswith("FAILED "): + # Avoid the extra `FAILED` entry given by `run_test_using_subprocess` causing issue when calling + # `stacktraces.pop` below. + # See `run_test_using_subprocess` in `src/transformers/testing_utils.py` + if " - Failed: (subprocess)" in line: + continue line = line[len("FAILED ") :] line = line.split()[0].replace("\n", "")