code: def testRunExecutor_with_NotInprocessExecutor(self):
      executor_sepc = text_format.Parse(
          """
        class_path: "tfx.orchestration.portable.python_executor_operator_test.NotInprocessExecutor"
      """,
          executable_spec_pb2.PythonClassExecutableSpec(),
      )
      operator = python_executor_operator.PythonExecutorOperator(
          executor_sepc
      )
      input_dict = {"input_key": [standard_artifacts.Examples()]}
      output_dict = {"output_key": [standard_artifacts.Model()]}
      exec_properties = {"key": "value"}
      executor_output = operator.run_executor(
          self._get_execution_info(
              input_dict, output_dict, exec_properties
          )
      )
      self.assertProtoPartiallyEquals(
          """
            execution_properties {
              key: "key"
              value {
                string_value: "value"
              }
            }
            output_artifacts {
              key: "output_key"
              value {
                artifacts {
                }
              }
            }""",
          executor_output,
      )
  
imports: import os
  from typing import Any, Dict, List
  import tensorflow
  from tfx import types
  from tfx.dsl.components.base import base_executor
  from tfx.dsl.io import fileio
  from tfx.orchestration.portable import data_types
  from tfx.orchestration.portable import outputs_utils
  from tfx.orchestration.portable import python_executor_operator
  from tfx.proto.orchestration import executable_spec_pb2
  from tfx.proto.orchestration import execution_result_pb2
  from tfx.proto.orchestration import pipeline_pb2
  from tfx.types import standard_artifacts
  from tfx.utils import test_case_utils
  from google.protobuf import text_format
label_desc: Use image node_id 3 for calling the PythonExecutorOperatorTest obj's underlying member method code with example usage: obj.testRunExecutor_with_NotInprocessExecutor() without return types