code: def execute(self, context=None, stdout=None, stderr=None):
          
          total_benchmark = Benchmark()
          self.context = context or Context()
          if self._is_collection():
              self.stdout = sys.stdout
              self.stderr = sys.stderr
          else:
              self.stdout = stdout or StringIO()
              self.stderr = stderr or StringIO()
          self._record_start_example(self.formatter)
          try:
              with total_benchmark, Replace(sys, 'stdout', self.stdout), Replace(sys, 'stderr', self.stderr):
                  self._setup()
                  self._execute()
                  self._teardown()
          except Exception as e:
              self.example.error = e
              self.example.traceback = sys.exc_info()[2] #traceback.format_exc()
          finally:
              self.example.real_time = total_benchmark.total_time
              self._record_end_example(self.formatter)
              self.context = None
              self.example.stdout = self.stdout
              self.example.stderr = self.stderr
          return self.example.error is None
docs: Does all the work of running an example.
  
          This includes:
          - building up the context.
          - capturing stdout & stderr
          - execute before functions
          - run example, catching any exceptions
          - execute after functions
          - record the results & timings to formatter and original example object