Index: tests/Makefile.am
===================================================================
--- tests/Makefile.am	(revision f8cd310f8a2e04f07eba9dbf60597d9236e4932f)
+++ tests/Makefile.am	(revision 5b993e03abbf0909dc4a844c4d739f76b52ad08c)
@@ -28,5 +28,5 @@
 timeouts=
 
-TEST_PY = python ${builddir}/test.py
+TEST_PY = python3 ${builddir}/test.py
 
 # applies to both programs
Index: tests/Makefile.in
===================================================================
--- tests/Makefile.in	(revision f8cd310f8a2e04f07eba9dbf60597d9236e4932f)
+++ tests/Makefile.in	(revision 5b993e03abbf0909dc4a844c4d739f76b52ad08c)
@@ -360,5 +360,5 @@
 concurrent = 
 timeouts = 
-TEST_PY = python ${builddir}/test.py
+TEST_PY = python3 ${builddir}/test.py
 
 # applies to both programs
Index: tests/config.py.in
===================================================================
--- tests/config.py.in	(revision f8cd310f8a2e04f07eba9dbf60597d9236e4932f)
+++ tests/config.py.in	(revision 5b993e03abbf0909dc4a844c4d739f76b52ad08c)
@@ -1,3 +1,3 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # encoding: utf-8
 """
Index: tests/pybin/settings.py
===================================================================
--- tests/pybin/settings.py	(revision f8cd310f8a2e04f07eba9dbf60597d9236e4932f)
+++ tests/pybin/settings.py	(revision 5b993e03abbf0909dc4a844c4d739f76b52ad08c)
@@ -1,7 +1,5 @@
-from __future__ import print_function
-
 import os
 import sys
-import tools
+from . import tools
 
 try :
Index: tests/pybin/tools.py
===================================================================
--- tests/pybin/tools.py	(revision f8cd310f8a2e04f07eba9dbf60597d9236e4932f)
+++ tests/pybin/tools.py	(revision 5b993e03abbf0909dc4a844c4d739f76b52ad08c)
@@ -1,4 +1,2 @@
-from __future__ import print_function
-
 import __main__
 import argparse
@@ -12,4 +10,5 @@
 import sys
 import time
+import types
 
 from pybin import settings
@@ -58,17 +57,15 @@
 # Remove 1 or more files silently
 def rm( files ):
-	if isinstance( files, basestring ):
-		sh("rm -f %s > /dev/null 2>&1" % files )
-	else:
-		for file in files:
-			sh("rm -f %s > /dev/null 2>&1" % file )
+	if isinstance(files, str ): files = [ files ]
+	for file in files:
+		sh("rm -f %s > /dev/null 2>&1" % file )
 
 # Create 1 or more directory
 def mkdir( files ):
-	if isinstance( files, basestring ):
-		sh("mkdir -p %s" % os.path.dirname(files) )
-	else:
-		for file in files:
-			sh("mkdir -p %s" % os.path.dirname(file) )
+	if isinstance(files, str ): files = [ files ]
+	for file in files:
+		p = os.path.normpath( file )
+		d = os.path.dirname ( p )
+		sh( "mkdir -p {}".format(d) )
 
 
@@ -200,5 +197,8 @@
 	# Start the walk
 	dname = settings.SRCDIR
-	os.path.walk(dname, step, '')
+	for dirname, _, names in os.walk(dname):
+		for name in names:
+			path = os.path.join(dirname, name)
+			op( path )
 
 ################################################################################
@@ -268,5 +268,5 @@
 		cmd = "%s 2> /dev/null" % column
 		proc = Popen(cmd, stdin=PIPE, stderr=None, shell=True)
-		proc.communicate(input=text + "\n")
+		proc.communicate(input=bytes(text + "\n", "UTF-8"))
 	else:
 		print(text)
Index: tests/test.py
===================================================================
--- tests/test.py	(revision f8cd310f8a2e04f07eba9dbf60597d9236e4932f)
+++ tests/test.py	(revision 5b993e03abbf0909dc4a844c4d739f76b52ad08c)
@@ -1,4 +1,3 @@
-#!/usr/bin/python
-from __future__ import print_function
+#!/usr/bin/python3
 
 from pybin.tools import *
@@ -102,5 +101,5 @@
 		print('ERROR: invalid arguments', file=sys.stderr)
 		parser.print_help(sys.stderr)
-    		sys.exit(1)
+		sys.exit(1)
 
 	# script must have at least some tests to run or be listing
@@ -112,5 +111,5 @@
 	# check that exactly one of the booleans is set to true
 	if not sum( (listing, all_tests, some_tests, some_dirs) ) > 0 :
-		print('ERROR: must have option \'--all\', \'--list\', \'--include\', \'-I\' or non-empty test list', file=sys.stderr)
+		print('''ERROR: must have option '--all', '--list', '--include', '-I' or non-empty test list''', file=sys.stderr)
 		parser.print_help()
 		sys.exit(1)
@@ -281,5 +280,5 @@
 	elif options.list :
 		print("Listing for %s:%s"% (settings.arch.string, settings.debug.string))
-		fancy_print("\n".join(map(lambda t: "%s" % (t.toString()), tests)))
+		fancy_print("\n".join(map(lambda t: t.toString(), tests)))
 
 	else :
