code: def run(self):
      start_time = time.time()
      previous_time = start_time
      for iteration in range(NUM_ITERATIONS):
          for _ in range(ACTIONS_PER_ITERATION):
              actions, weights = zip(*self.weighted_actions)
              action_chosen = random.choices(actions, weights=weights)[
                  0
              ]
              print(f"Executing {action_chosen}")
              action_chosen()
  
          new_time = time.time()
          print(
              f"Iteration {iteration}:\n"
              f"  - Iteration time: {new_time - previous_time}.\n"
              f"  - Absolute time: {new_time}.\n"
              f"  - Total elapsed time: {new_time - start_time}."
          )
          update_progress(
              {
                  "iteration": iteration,
                  "iteration_time": new_time - previous_time,
                  "absolute_time": new_time,
                  "elapsed_time": new_time - start_time,
              }
          )
          previous_time = new_time
  
          if RAY_UNIT_TEST:
              break
  
imports: import asyncio
  import logging
  import os
  import random
  import string
  import time
  from typing import List
  import requests
  import ray
  from ray import serve
  from ray.serve.context import _get_global_client
  from ray.cluster_utils import Cluster
  from ray._private.test_utils import safe_write_to_results_json
label_desc: Use image node_id 5 for calling the RandomTest obj's underlying member method code with example usage: obj.run() without return types