diff --git a/test/test.py b/test/test.py
index a288c26..e03cb45 100755
--- a/test/test.py
+++ b/test/test.py
@@ -36,7 +36,6 @@
 import sys
 
 import crossrunner
-from crossrunner.compat import path_join
 
 # 3.3 introduced subprocess timeouts on waiting for child
 req_version = (3, 3)
@@ -46,15 +45,15 @@
 
 ROOT_DIR = os.path.dirname(os.path.realpath(os.path.dirname(__file__)))
 TEST_DIR_RELATIVE = 'test'
-TEST_DIR = path_join(ROOT_DIR, TEST_DIR_RELATIVE)
-FEATURE_DIR_RELATIVE = path_join(TEST_DIR_RELATIVE, 'features')
+TEST_DIR = os.path.join(ROOT_DIR, TEST_DIR_RELATIVE)
+FEATURE_DIR_RELATIVE = os.path.join(TEST_DIR_RELATIVE, 'features')
 CONFIG_FILE = 'tests.json'
 
 
 def run_cross_tests(server_match, client_match, jobs, skip_known_failures, only_known_failures, retry_count, regex):
     logger = multiprocessing.get_logger()
     logger.debug('Collecting tests')
-    with open(path_join(TEST_DIR, CONFIG_FILE), 'r') as fp:
+    with open(os.path.join(TEST_DIR, CONFIG_FILE), 'r') as fp:
         j = json.load(fp)
     tests = crossrunner.collect_cross_tests(j, server_match, client_match, regex)
     if not tests:
@@ -85,12 +84,12 @@
 
 
 def run_feature_tests(server_match, feature_match, jobs, skip_known_failures, only_known_failures, retry_count, regex):
-    basedir = path_join(ROOT_DIR, FEATURE_DIR_RELATIVE)
+    basedir = os.path.join(ROOT_DIR, FEATURE_DIR_RELATIVE)
     logger = multiprocessing.get_logger()
     logger.debug('Collecting tests')
-    with open(path_join(TEST_DIR, CONFIG_FILE), 'r') as fp:
+    with open(os.path.join(TEST_DIR, CONFIG_FILE), 'r') as fp:
         j = json.load(fp)
-    with open(path_join(basedir, CONFIG_FILE), 'r') as fp:
+    with open(os.path.join(basedir, CONFIG_FILE), 'r') as fp:
         j2 = json.load(fp)
     tests = crossrunner.collect_feature_tests(j, j2, server_match, feature_match, regex)
     if not tests:
@@ -171,7 +170,7 @@
     client_match = list(chain(*[x.split(',') for x in options.client]))
 
     if options.update_failures or options.print_failures:
-        dire = path_join(ROOT_DIR, FEATURE_DIR_RELATIVE) if options.features is not None else TEST_DIR
+        dire = os.path.join(ROOT_DIR, FEATURE_DIR_RELATIVE) if options.features is not None else TEST_DIR
         res = crossrunner.generate_known_failures(
             dire, options.update_failures == 'overwrite',
             options.update_failures, options.print_failures)
