code: def run(self):
          
          try:
              self.loader.find_and_load_step_definitions()
          except StepLoadingError, e:
              print "Error loading step definitions:\n", e
              return
  
          results = []
          if self.explicit_features:
              features_files = self.explicit_features
          else:
              features_files = self.loader.find_feature_files()
          if self.random:
              random.shuffle(features_files)
  
          if not features_files:
              self.output.print_no_features_found(self.loader.base_dir)
              return
  
          processes = Pool(processes=self.parallelization)
          test_results_it = processes.imap_unordered(
              worker_process, [(self, filename) for filename in features_files]
          )
          
          all_total = ParallelTotalResult()
          for result in test_results_it:
              all_total += result['total']
              sys.stdout.write(result['stdout'])
              sys.stderr.write(result['stderr'])
  
          return all_total
docs: Find and load step definitions, and them find and load
          features under `base_path` specified on constructor