code: def run_case(self, case_metric, **case_param):
      collection_name = case_param["collection_name"]
      task = case_param["task"]
      connection_type = case_param["connection_type"]
  
      # spawn locust requests
      task["during_time"] = utils.timestr_to_int(task["during_time"])
      task_types = task["types"]
      run_params = {"tasks": {}}
      run_params.update(task)
      info_in_params = {
          "index_field_name": case_param["index_field_name"],
          "vector_field_name": case_param["vector_field_name"],
          "dimension": case_param["dimension"],
          "collection_info": self.milvus.get_info(collection_name),
      }
      logger.info(info_in_params)
      run_params.update({"op_info": info_in_params})
      for task_type in task_types:
          run_params["tasks"].update(
              {
                  task_type["type"]: {
                      "weight": task_type["weight"]
                      if "weight" in task_type
                      else 1,
                      "params": task_type["params"]
                      if "params" in task_type
                      else None,
                  }
              }
          )
      # collect stats
      # pdb.set_trace()
      logger.info(run_params)
      locust_stats = locust_user.locust_executor(
          self.hostname,
          self.port,
          collection_name,
          connection_type=connection_type,
          run_params=run_params,
      )
      return locust_stats
  
imports: import time
  import copy
  import logging
  from .None import locust_user
  from .base import BaseRunner
  from milvus_benchmark import parser
  from milvus_benchmark import utils
  from milvus_benchmark.runners import utils
label_desc: Use image node_id 2 for calling the LocustRunner obj's underlying member method code with example usage: obj.run_case(case_metric) and returns: locust_stats