code: def testDynamicPropertiesEnd2EndPipeline(self):
      pipeline_name = "kubeflow-dynamic-exec-e2e-test-{}".format(
          test_utils.random_id()
      )
      components = (
          test_dynamic_exec_properties_pipeline.create_components()
      )
      pipeline = self._create_pipeline(pipeline_name, components)
      self._compile_and_run_pipeline(
          pipeline=pipeline, workflow_name=pipeline_name
      )
      artifacts = self._get_artifacts_with_type_and_pipeline(
          type_name="String", pipeline_name=pipeline_name
      )
      self.assertEqual(len(artifacts), 1)
  
imports: import os
  import subprocess
  import time
  from typing import List
  from absl import logging
  from grpc import insecure_channel
  import tensorflow
  from tfx.dsl.io import fileio
  from tfx.orchestration import test_utils
  from tfx.orchestration.experimental.core.testing import test_dynamic_exec_properties_pipeline
  from tfx.orchestration.kubeflow import test_utils
  from tfx.orchestration.test_pipelines import download_grep_print_pipeline
  from tfx.types import standard_artifacts
  from ml_metadata.proto import metadata_store_pb2
  from ml_metadata.proto import metadata_store_service_pb2
  from ml_metadata.proto import metadata_store_service_pb2_grpc
label_desc: Use image node_id 13 for calling the KubeflowEndToEndTest obj's underlying member method code with example usage: obj.testDynamicPropertiesEnd2EndPipeline() without return types