code: def test_fail_execute_complete(self, soft_fail, expected_exception):
      op = S3KeySensor(
          task_id="s3_key_sensor",
          bucket_key=[
              "s3://test_bucket/file*",
              "s3://test_bucket/*.zip",
          ],
          wildcard_match=True,
      )
      op.soft_fail = soft_fail
      message = "error"
      with pytest.raises(expected_exception, match=message):
          op.execute_complete(
              context={}, event={"status": "error", "message": message}
          )
  
imports: from __future__ import annotations
  from datetime import datetime
  from unittest import mock
  import pytest
  import time_machine
  from airflow.exceptions import AirflowException, AirflowSkipException
  from airflow.models import DAG, DagRun, TaskInstance
  from airflow.models.variable import Variable
  from airflow.providers.amazon.aws.sensors.s3 import S3KeySensor, S3KeysUnchangedSensor
  from airflow.utils import timezone
label_desc: Use image node_id 15 for calling the TestS3KeySensor obj's underlying member method code with example usage: obj.test_fail_execute_complete(soft_fail, expected_exception) without return types