code: def test_put_one_benchmark(
      benchmark, tempdir, s3root, blobs, expected
  ):
      # We generate the files here to avoid having them saved in the benchmark
      # result file which then prevents comparisons
      def _generate_files(blobs):
          for blob in blobs:
              prefix, fname, size = blob
              data = s3_data.RandomFile(prefix, fname, size)
              key = str(uuid4())
              path = os.path.join(tempdir, key)
              with open(path, "wb") as f:
                  f.write(data.data)
              yield key, path
  
      # Generate all files before the test so that we don't time this
      all_files = list(_generate_files(blobs))
  
      def _do():
          with S3(s3root=s3root) as s3:
              res = []
              for key, obj in all_files:
                  key = str(uuid4())  # New "name" every time
                  res.append(s3.put(key, obj, overwrite=False))
              return res
  
      res = benchmark(_do)
  
imports: import os
  from re import I
  import shutil
  from hashlib import sha1
  from tempfile import mkdtemp
  from itertools import groupby, starmap
  import random
  from uuid import uuid4
  from metaflow.plugins.datatools import s3
  import pytest
  from metaflow import current, namespace, Run
  from metaflow.plugins.datatools.s3 import S3, MetaflowS3AccessDenied, MetaflowS3NotFound, MetaflowS3URLException, MetaflowS3InvalidObject, S3PutObject, S3GetObject
  from metaflow.util import to_bytes, unicode_type
  from .None import s3_data
  from ..None import FakeFlow, DO_TEST_RUN
label_desc: Use image node_id 10 for calling a global function with example usage: test_put_one_benchmark(benchmark, tempdir, s3root, blobs, expected) and returns: res