diff --git a/dacapo/dynamic_analysis.py b/dacapo/dynamic_analysis.py
index 15e04693c79cc5ebc138b763b2aa5df6ab827e80..99f2948d32e6a079d1a4e0f81caa64be28b6c905 100644
--- a/dacapo/dynamic_analysis.py
+++ b/dacapo/dynamic_analysis.py
@@ -59,3 +59,8 @@ class DynamicAnalysis(object):
     """Returns the number of dynamic analysis results."""
     return len(self._benchmarks)
 
+  def __repr__(self):
+    invocations = range(1, len(self._benchmarks)+1)
+    return '\n'.join(['Invocation %s\n%s' % pair
+                      for pair in zip(invocations, self._benchmarks)])
+
diff --git a/dacapo/report.py b/dacapo/report.py
index 1d9b6e59c003912116dbc24b52df43c3f51a76d0..ca16162b6fd98313e2733864134bbb3ed596b28e 100644
--- a/dacapo/report.py
+++ b/dacapo/report.py
@@ -94,3 +94,22 @@ class Report(object):
   def label(self, value):
     """Sets the value of the label that describes this report."""
     self._label = value
+
+  def __repr__(self):
+
+    static_analysis = repr(self._static_analysis)
+
+    dyn_analysis_values = ['Benchmark: %s\n%s' % (bm, val)
+                           for bm, val in self._dyn_analysis.iteritems()]
+
+    dyn_analysis = '###'.join(dyn_analysis_values)
+
+    return '''
+############ Dynamic Analysis ############
+%s
+
+############ Static Analysis ############
+%s
+
+''' % (dyn_analysis, static_analysis)
+
diff --git a/dacapo/run.py b/dacapo/run.py
index 4abd0734146cc811e994560b4f8138713f76f959..609847cade1957a902a0feb0c052cabbc48bd8c2 100644
--- a/dacapo/run.py
+++ b/dacapo/run.py
@@ -156,22 +156,21 @@ performed on loaded classes during execution of a given benchmark.
 
 
 def main():
-  input_args = vars(_generate_main_args().parse_args())
+  parse = _generate_main_args()
+  input_args = vars(parse.parse_args())
   filtered_args = {x: y for x, y in input_args.iteritems() if y}
 
-  try:
-    run = Run()
-    run.config(**filtered_args)
-
-    if 'static_analysis' in filtered_args:
-      run.run_ckjm()
-    elif 'events' in filtered_args:
-      run.run_perf()
-    else:
-      run.run_ckjm()
-
-  except RuntimeError as err:
-    print err
+  run = Run()
+  run.config(**filtered_args)
+
+  if 'static_analysis' in filtered_args:
+    print run.run_ckjm()
+  elif 'events' in filtered_args:
+    print run.run_perf()
+  elif 'dacapo' in filtered_args:
+    print run.run_ckjm()
+  else:
+    parse.print_help()
 
 if __name__ == '__main__':
   main()
diff --git a/dacapo/static_analysis.py b/dacapo/static_analysis.py
index 5a3dd681941c920dec6bcdb05fea0ce5365fabe7..af59bba3be429883ff3d880f22aa4ff63db724ba 100644
--- a/dacapo/static_analysis.py
+++ b/dacapo/static_analysis.py
@@ -144,4 +144,6 @@ class StaticAnalysis(object):
     return self._df.loc[self._df['class'] == class_name]
 
   def __repr__(self):
-    return repr(self._df)
+    if self._df.size:
+      return repr(self._df)
+    return ''
diff --git a/tests/dynamic_analysis_test.py b/tests/dynamic_analysis_test.py
index 5bec52d66d5b6e3d6efe279f967358486db1867d..4493b5ab6fdb268ac55c1b028d5b51e30ee0f8d5 100644
--- a/tests/dynamic_analysis_test.py
+++ b/tests/dynamic_analysis_test.py
@@ -29,5 +29,18 @@ class TestDynamicAnalysis(unittest.TestCase):
 
     self.assertTrue(dyn_analysis.get_invocation(0).equals(self._ref_df))
 
+  def test_repr_empty(self):
+    dyn_analysis = DynamicAnalysis()
+    str_value = repr(dyn_analysis)
+    self.assertEqual(str_value, '')
+
+  def test_repr(self):
+    dyn_analysis = DynamicAnalysis()
+    dyn_analysis.add_invocation(self._ref_df)
+    str_value = repr(dyn_analysis)
+    self.assertEqual(str_value, '\n'.join(['Invocation %s\n%s' %
+                                           (1, str(self._ref_df))]))
+
+
 if __name__ == '__main__':
   unittest.main()
diff --git a/tests/report_test.py b/tests/report_test.py
index 23cfc02abb4414bbfabd2839d59cfe3cbc1ebfe9..b167959a5145d5a99c546da64a6874fd65b01aab 100644
--- a/tests/report_test.py
+++ b/tests/report_test.py
@@ -1,8 +1,8 @@
 """Test class for the report."""
 
 import unittest
-import pandas as pd
 from dacapo.report import Report
+import pandas as pd
 
 
 class TestReport(unittest.TestCase):
@@ -38,7 +38,19 @@ class TestReport(unittest.TestCase):
     ref = pd.DataFrame(test_result)
     report.add_dyn_analysis('fop', test_result)
     self.assertEqual(report.number_of_dyn_analyses, 1)
-    self.assertTrue(report.get_dyn_analysis('fop').get_invocation(0).equals(ref))
+    self.assertTrue(report.get_dyn_analysis('fop').get_invocation(0)
+                    .equals(ref))
+
+  def test_repr(self):
+    report = Report()
+    str_value = '''
+############ Dynamic Analysis ############
+
+
+############ Static Analysis ############
+
 
+'''
+    self.assertEqual(repr(report), str_value)
 if __name__ == '__main__':
   unittest.main()
diff --git a/tests/static_analysis_test.py b/tests/static_analysis_test.py
index 17f94e170cf6d79f10fe1456c90e4e6cd3728a19..a2745101972bc95de7da1b9c4ecfe0374406babf 100644
--- a/tests/static_analysis_test.py
+++ b/tests/static_analysis_test.py
@@ -2,6 +2,7 @@
 
 import unittest
 from dacapo.static_analysis import StaticAnalysis
+import mock
 
 
 class TestStaticAnalysis(unittest.TestCase):
@@ -17,9 +18,26 @@ class TestStaticAnalysis(unittest.TestCase):
 
   def test_bad_store(self):
     static_analysis = StaticAnalysis()
-    self.assertRaises(ValueError, static_analysis, 'class 1 2 3 4 5 6 7')
-    self.assertRaises(ValueError, static_analysis, '1 2 3 4 5 6 7 8')
-    self.assertRaises(ValueError, static_analysis, 'class 1 2 3 4 5 6 7 8 9')
+    self.assertRaises(ValueError, static_analysis._store_result,
+                      'class 1 2 3 4 5 6 7')
+    self.assertRaises(ValueError, static_analysis._store_result,
+                      '1 2 3 4 5 6 7 8')
+    self.assertRaises(ValueError, static_analysis._store_result,
+                      'class 1 2 3 4 5 6 7 8 9')
+
+  def test_repr_empty(self):
+    static_analysis = StaticAnalysis()
+    str_value = repr(static_analysis)
+    self.assertEqual(str_value, '')
+
+  @mock.patch('pandas.DataFrame')
+  def test_repr(self, mock_df):
+    mock_df.return_value.__repr__ = mock.Mock(return_value='static_analysis')
+    static_analysis = StaticAnalysis()
+    static_analysis._store_result('class 1 2 3 4 5 6 7 8')
+    str_value = repr(static_analysis)
+    self.assertEqual(str_value, 'static_analysis')
+
 
 if __name__ == '__main__':
   unittest.main()
diff --git a/tests/testsuite.py b/tests/testsuite.py
index 47250825e148ed0c1f8d2ca9e5e888559ccf21f2..5b2a85e87c62b4e8e147c7d3dc225220cca75da6 100644
--- a/tests/testsuite.py
+++ b/tests/testsuite.py
@@ -9,6 +9,7 @@ from tests.parser_test import TestStaticAnalysisParser
 from tests.plot_test import TestPlot
 from tests.report_test import TestReport
 from tests.run_test import TestRun
+from tests.static_analysis_test import TestStaticAnalysis
 from tests.util_test import TestUtil
 
 
@@ -17,6 +18,7 @@ def _get_test_cases():
       unittest.TestLoader().loadTestsFromTestCase(TestRun),
       unittest.TestLoader().loadTestsFromTestCase(TestProbesParser),
       unittest.TestLoader().loadTestsFromTestCase(TestStaticAnalysisParser),
+      unittest.TestLoader().loadTestsFromTestCase(TestStaticAnalysis),
       unittest.TestLoader().loadTestsFromTestCase(TestUtil),
       unittest.TestLoader().loadTestsFromTestCase(TestDynamicAnalysis),
       unittest.TestLoader().loadTestsFromTestCase(TestReport),