diff --git a/selftest/suite_test.ok b/selftest/suite_test.ok
index cd5a9e7..79c37cc 100644
--- a/selftest/suite_test.ok
+++ b/selftest/suite_test.ok
@@ -110,7 +110,7 @@
 ----------------------------------------------
 tst test_error.py:[LINENR]: I am 'test_suite' / 'test_error.py:[LINENR]'  [test_suite↪test_error.py:[LINENR]]  [test_error.py:[LINENR]]
 tst test_error.py:[LINENR]: ERR: AssertionError: test_error.py:[LINENR]: assert False  [test_suite↪test_error.py:[LINENR]]  [test_error.py:[LINENR]: assert False]
-tst test_error.py:[LINENR]: Test FAILED (N.N sec)  [test_suite↪test_error.py:[LINENR]]  [suite.py:[LINENR]]
+tst test_error.py:[LINENR]: Test FAILED (N.N sec)  [test_suite↪test_error.py:[LINENR]]  [test.py:[LINENR]]
 ---------------------------------------------------------------------
 trial test_suite FAIL
 ---------------------------------------------------------------------
@@ -133,7 +133,7 @@
 ----------------------------------------------
 tst test_fail.py:[LINENR]: I am 'test_suite' / 'test_fail.py:[LINENR]'  [test_suite↪test_fail.py:[LINENR]]  [test_fail.py:[LINENR]]
 tst test_fail.py:[LINENR]: ERR: EpicFail: This failure is expected  [test_suite↪test_fail.py:[LINENR]]  [test_fail.py:[LINENR]]
-tst test_fail.py:[LINENR]: Test FAILED (N.N sec)  [test_suite↪test_fail.py:[LINENR]]  [suite.py:[LINENR]]
+tst test_fail.py:[LINENR]: Test FAILED (N.N sec)  [test_suite↪test_fail.py:[LINENR]]  [test.py:[LINENR]]
 ---------------------------------------------------------------------
 trial test_suite FAIL
 ---------------------------------------------------------------------
@@ -155,7 +155,7 @@
 trial test_suite test_fail_raise.py
 ----------------------------------------------
 tst test_fail_raise.py:[LINENR]: ERR: ExpectedFail: This failure is expected  [test_suite↪test_fail_raise.py:[LINENR]]  [test_fail_raise.py:[LINENR]: raise ExpectedFail('This failure is expected')]
-tst test_fail_raise.py:[LINENR]: Test FAILED (N.N sec)  [test_suite↪test_fail_raise.py:[LINENR]]  [suite.py:[LINENR]]
+tst test_fail_raise.py:[LINENR]: Test FAILED (N.N sec)  [test_suite↪test_fail_raise.py:[LINENR]]  [test.py:[LINENR]]
 ---------------------------------------------------------------------
 trial test_suite FAIL
 ---------------------------------------------------------------------
@@ -233,7 +233,7 @@
 tst hello_world.py:[LINENR]: one  [test_suite↪hello_world.py:[LINENR]]  [hello_world.py:[LINENR]]
 tst hello_world.py:[LINENR]: two  [test_suite↪hello_world.py:[LINENR]]  [hello_world.py:[LINENR]]
 tst hello_world.py:[LINENR]: three  [test_suite↪hello_world.py:[LINENR]]  [hello_world.py:[LINENR]]
-tst hello_world.py:[LINENR] Test passed (N.N sec)  [test_suite↪hello_world.py]  [suite.py:[LINENR]]
+tst hello_world.py:[LINENR] Test passed (N.N sec)  [test_suite↪hello_world.py]  [test.py:[LINENR]]
 ---------------------------------------------------------------------
 trial test_suite PASS
 ---------------------------------------------------------------------
@@ -311,7 +311,7 @@
 tst hello_world.py:[LINENR]: one  [test_suite↪hello_world.py:[LINENR]]  [hello_world.py:[LINENR]]
 tst hello_world.py:[LINENR]: two  [test_suite↪hello_world.py:[LINENR]]  [hello_world.py:[LINENR]]
 tst hello_world.py:[LINENR]: three  [test_suite↪hello_world.py:[LINENR]]  [hello_world.py:[LINENR]]
-tst hello_world.py:[LINENR] Test passed (N.N sec)  [test_suite↪hello_world.py]  [suite.py:[LINENR]]
+tst hello_world.py:[LINENR] Test passed (N.N sec)  [test_suite↪hello_world.py]  [test.py:[LINENR]]
 ---------------------------------------------------------------------
 trial test_suite PASS
 ---------------------------------------------------------------------
diff --git a/src/osmo_gsm_tester/report.py b/src/osmo_gsm_tester/report.py
index 82b2f13..a53504b 100644
--- a/src/osmo_gsm_tester/report.py
+++ b/src/osmo_gsm_tester/report.py
@@ -21,7 +21,7 @@
 import math
 from datetime import datetime
 import xml.etree.ElementTree as et
-from . import log, suite
+from . import log, suite, test
 
 def trial_to_junit_write(trial, junit_path):
     elements = et.ElementTree(element=trial_to_junit(trial))
@@ -48,20 +48,20 @@
         testsuite.append(testcase)
     return testsuite
 
-def test_to_junit(test):
+def test_to_junit(t):
     testcase = et.Element('testcase')
-    testcase.set('name', test.name())
-    testcase.set('time', str(math.ceil(test.duration)))
-    if test.status == suite.Test.SKIP:
+    testcase.set('name', t.name())
+    testcase.set('time', str(math.ceil(t.duration)))
+    if t.status == test.Test.SKIP:
         skip = et.SubElement(testcase, 'skipped')
-    elif test.status == suite.Test.FAIL:
+    elif t.status == test.Test.FAIL:
         failure = et.SubElement(testcase, 'failure')
-        failure.set('type', test.fail_type or 'failure')
-        failure.text = test.fail_message
-        if test.fail_tb:
+        failure.set('type', t.fail_type or 'failure')
+        failure.text = t.fail_message
+        if t.fail_tb:
             system_err = et.SubElement(testcase, 'system-err')
-            system_err.text = test.fail_tb
-    elif test.status != suite.Test.PASS:
+            system_err.text = t.fail_tb
+    elif t.status != test.Test.PASS:
         error = et.SubElement(testcase, 'error')
         error.text = 'could not run'
     return testcase
@@ -102,12 +102,12 @@
     msgs.extend([test_to_text(t) for t in suite.tests])
     return '\n    '.join(msgs)
 
-def test_to_text(test):
-    msgs = ['%s: %s' % (test.status, test.name())]
-    if test.start_timestamp:
-        msgs.append('(%.1f sec)' % test.duration)
-    if test.status == suite.Test.FAIL:
-        msgs.append('%s: %s' % (test.fail_type, test.fail_message))
+def test_to_text(t):
+    msgs = ['%s: %s' % (t.status, t.name())]
+    if t.start_timestamp:
+        msgs.append('(%.1f sec)' % t.duration)
+    if t.status == test.Test.FAIL:
+        msgs.append('%s: %s' % (t.fail_type, t.fail_message))
     return ' '.join(msgs)
 
 # vim: expandtab tabstop=4 shiftwidth=4
diff --git a/src/osmo_gsm_tester/suite.py b/src/osmo_gsm_tester/suite.py
index 5b9df76..25aef35 100644
--- a/src/osmo_gsm_tester/suite.py
+++ b/src/osmo_gsm_tester/suite.py
@@ -20,11 +20,9 @@
 import os
 import sys
 import time
-import traceback
 import pprint
-from . import config, log, template, util, resource, schema, event_loop
-from . import osmo_nitb, osmo_hlr, osmo_mgcpgw, osmo_mgw, osmo_msc, osmo_bsc, osmo_stp, modem, esme, sms
-from . import testenv
+from . import config, log, template, util, resource, schema, event_loop, test
+from . import osmo_nitb, osmo_hlr, osmo_mgcpgw, osmo_mgw, osmo_msc, osmo_bsc, osmo_stp, modem, esme
 
 class Timeout(Exception):
     pass
@@ -59,94 +57,6 @@
                 continue
             self.test_basenames.append(basename)
 
-
-class Test(log.Origin):
-    UNKNOWN = 'UNKNOWN'
-    SKIP = 'skip'
-    PASS = 'pass'
-    FAIL = 'FAIL'
-
-    _run_dir = None
-
-    def __init__(self, suite_run, test_basename):
-        self.basename = test_basename
-        super().__init__(log.C_TST, self.basename)
-        self.suite_run = suite_run
-        self.path = os.path.join(self.suite_run.definition.suite_dir, self.basename)
-        self.status = Test.UNKNOWN
-        self.start_timestamp = 0
-        self.duration = 0
-        self.fail_type = None
-        self.fail_message = None
-
-    def get_run_dir(self):
-        if self._run_dir is None:
-            self._run_dir = util.Dir(self.suite_run.get_run_dir().new_dir(self._name))
-        return self._run_dir
-
-    def run(self):
-        try:
-            log.large_separator(self.suite_run.trial.name(), self.suite_run.name(), self.name(), sublevel=3)
-            self.status = Test.UNKNOWN
-            self.start_timestamp = time.time()
-            testenv.setup(self.suite_run, self, sys.modules[__name__], event_loop, sms)
-            with self.redirect_stdout():
-                util.run_python_file('%s.%s' % (self.suite_run.definition.name(), self.basename),
-                                     self.path)
-            if self.status == Test.UNKNOWN:
-                 self.set_pass()
-        except Exception as e:
-            if hasattr(e, 'msg'):
-                msg = e.msg
-            else:
-                msg = str(e)
-            if isinstance(e, AssertionError):
-                # AssertionError lacks further information on what was
-                # asserted. Find the line where the code asserted:
-                msg += log.get_src_from_exc_info(sys.exc_info())
-            # add source file information to failure report
-            if hasattr(e, 'origins'):
-                msg += ' [%s]' % e.origins
-            tb_str = traceback.format_exc()
-            if isinstance(e, resource.NoResourceExn):
-                tb_str += self.suite_run.resource_status_str()
-            self.set_fail(type(e).__name__, msg, tb_str, log.get_src_from_exc_info())
-        except BaseException as e:
-            # when the program is aborted by a signal (like Ctrl-C), escalate to abort all.
-            self.err('TEST RUN ABORTED: %s' % type(e).__name__)
-            raise
-
-    def name(self):
-        l = log.get_line_for_src(self.path)
-        if l is not None:
-            return '%s:%s' % (self._name, l)
-        return super().name()
-
-    def set_fail(self, fail_type, fail_message, tb_str=None, src=4):
-        self.status = Test.FAIL
-        self.duration = time.time() - self.start_timestamp
-        self.fail_type = fail_type
-        self.fail_message = fail_message
-
-        if tb_str is None:
-            # populate an exception-less call to set_fail() with traceback info
-            tb_str = ''.join(traceback.format_stack()[:-1])
-
-        self.fail_tb = tb_str
-        self.err('%s: %s' % (self.fail_type, self.fail_message), _src=src)
-        if self.fail_tb:
-            self.log(self.fail_tb, _level=log.L_TRACEBACK)
-        self.log('Test FAILED (%.1f sec)' % self.duration)
-
-    def set_pass(self):
-        self.status = Test.PASS
-        self.duration = time.time() - self.start_timestamp
-        self.log('Test passed (%.1f sec)' % self.duration)
-
-    def set_skip(self):
-        self.status = Test.SKIP
-        self.duration = 0
-
 class SuiteRun(log.Origin):
     UNKNOWN = 'UNKNOWN'
     PASS = 'PASS'
@@ -176,7 +86,7 @@
     def load_tests(self):
         self.tests = []
         for test_basename in self.definition.test_basenames:
-            self.tests.append(Test(self, test_basename))
+            self.tests.append(test.Test(self, test_basename))
 
     def register_for_cleanup(self, *obj):
         assert all([hasattr(o, 'cleanup') for o in obj])
@@ -243,12 +153,12 @@
             event_loop.register_poll_func(self.poll)
             if not self.reserved_resources:
                 self.reserve_resources()
-            for test in self.tests:
-                if names and not test.name() in names:
-                    test.set_skip()
+            for t in self.tests:
+                if names and not t.name() in names:
+                    t.set_skip()
                     continue
-                self.current_test = test
-                test.run()
+                self.current_test = t
+                t.run()
                 self.stop_processes()
                 self.objects_cleanup()
                 self.reserved_resources.put_all()
@@ -284,10 +194,10 @@
         passed = 0
         skipped = 0
         failed = 0
-        for test in self.tests:
-            if test.status == Test.PASS:
+        for t in self.tests:
+            if t.status == test.Test.PASS:
                 passed += 1
-            elif test.status == Test.FAIL:
+            elif t.status == test.Test.FAIL:
                 failed += 1
             else:
                 skipped += 1
diff --git a/src/osmo_gsm_tester/test.py b/src/osmo_gsm_tester/test.py
new file mode 100644
index 0000000..82b290f
--- /dev/null
+++ b/src/osmo_gsm_tester/test.py
@@ -0,0 +1,116 @@
+# osmo_gsm_tester: test class
+#
+# Copyright (C) 2017 by sysmocom - s.f.m.c. GmbH
+#
+# Author: Pau Espin Pedrol <pespin@sysmocom.de>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import os
+import sys
+import time
+import traceback
+from . import testenv
+
+from . import log, util, resource
+
+class Test(log.Origin):
+    UNKNOWN = 'UNKNOWN'
+    SKIP = 'skip'
+    PASS = 'pass'
+    FAIL = 'FAIL'
+
+    _run_dir = None
+
+    def __init__(self, suite_run, test_basename):
+        self.basename = test_basename
+        super().__init__(log.C_TST, self.basename)
+        self.suite_run = suite_run
+        self.path = os.path.join(self.suite_run.definition.suite_dir, self.basename)
+        self.status = Test.UNKNOWN
+        self.start_timestamp = 0
+        self.duration = 0
+        self.fail_type = None
+        self.fail_message = None
+
+    def get_run_dir(self):
+        if self._run_dir is None:
+            self._run_dir = util.Dir(self.suite_run.get_run_dir().new_dir(self._name))
+        return self._run_dir
+
+    def run(self):
+        try:
+            log.large_separator(self.suite_run.trial.name(), self.suite_run.name(), self.name(), sublevel=3)
+            self.status = Test.UNKNOWN
+            self.start_timestamp = time.time()
+            from . import suite, event_loop, sms
+            testenv.setup(self.suite_run, self, suite, event_loop, sms)
+            with self.redirect_stdout():
+                util.run_python_file('%s.%s' % (self.suite_run.definition.name(), self.basename),
+                                     self.path)
+            if self.status == Test.UNKNOWN:
+                 self.set_pass()
+        except Exception as e:
+            if hasattr(e, 'msg'):
+                msg = e.msg
+            else:
+                msg = str(e)
+            if isinstance(e, AssertionError):
+                # AssertionError lacks further information on what was
+                # asserted. Find the line where the code asserted:
+                msg += log.get_src_from_exc_info(sys.exc_info())
+            # add source file information to failure report
+            if hasattr(e, 'origins'):
+                msg += ' [%s]' % e.origins
+            tb_str = traceback.format_exc()
+            if isinstance(e, resource.NoResourceExn):
+                tb_str += self.suite_run.resource_status_str()
+            self.set_fail(type(e).__name__, msg, tb_str, log.get_src_from_exc_info())
+        except BaseException as e:
+            # when the program is aborted by a signal (like Ctrl-C), escalate to abort all.
+            self.err('TEST RUN ABORTED: %s' % type(e).__name__)
+            raise
+
+    def name(self):
+        l = log.get_line_for_src(self.path)
+        if l is not None:
+            return '%s:%s' % (self._name, l)
+        return super().name()
+
+    def set_fail(self, fail_type, fail_message, tb_str=None, src=4):
+        self.status = Test.FAIL
+        self.duration = time.time() - self.start_timestamp
+        self.fail_type = fail_type
+        self.fail_message = fail_message
+
+        if tb_str is None:
+            # populate an exception-less call to set_fail() with traceback info
+            tb_str = ''.join(traceback.format_stack()[:-1])
+
+        self.fail_tb = tb_str
+        self.err('%s: %s' % (self.fail_type, self.fail_message), _src=src)
+        if self.fail_tb:
+            self.log(self.fail_tb, _level=log.L_TRACEBACK)
+        self.log('Test FAILED (%.1f sec)' % self.duration)
+
+    def set_pass(self):
+        self.status = Test.PASS
+        self.duration = time.time() - self.start_timestamp
+        self.log('Test passed (%.1f sec)' % self.duration)
+
+    def set_skip(self):
+        self.status = Test.SKIP
+        self.duration = 0
+
+# vim: expandtab tabstop=4 shiftwidth=4
