code: def test_search_metrics_api_default_step(self):
      client = self.client
  
      query = self.isolated_query_patch('run["name"] == "Run # 3"')
      response = client.get(
          "/api/runs/search/metric/",
          params={"q": query, "report_progress": False},
      )
      self.assertEqual(200, response.status_code)
  
      decoded_response = decode_tree(
          decode_encoded_tree_stream(
              response.iter_bytes(chunk_size=512 * 1024)
          )
      )
      for run in decoded_response.values():
          for trace in run["traces"]:
              self.assertEqual([0, 0, 50], trace["slice"])
              values = trace["values"]
              dtype = values["dtype"]
              shape = values["shape"]
              data = values["blob"]
              array = np.frombuffer(data, dtype=dtype).reshape(shape)
              self.assertEqual(50, shape)  # default 50 steps
              self.assertAlmostEqual(0.99, array.max())
              self.assertAlmostEqual(0.99, array[49])
              self.assertEqual(50, len(array))
  
imports: import pytest
  import numpy
  from parameterized import parameterized
  from tests.base import PrefilledDataApiTestBase, ApiTestBase
  from tests.utils import decode_encoded_tree_stream
  from aim.storage.treeutils import decode_tree
  from aim.sdk.run import Run
label_desc: Use image node_id 3 for calling the TestRunApi obj's underlying member method code with example usage: obj.test_search_metrics_api_default_step() without return types