diff --git a/common/lib/capa/capa/tests/__init__.py b/common/lib/capa/capa/tests/__init__.py
index 7bd12bb65f..e69de29bb2 100644
--- a/common/lib/capa/capa/tests/__init__.py
+++ b/common/lib/capa/capa/tests/__init__.py
@@ -1,103 +0,0 @@
-"""Tools for helping with testing capa."""
-
-import gettext
-from path import path # pylint: disable=no-name-in-module
-import os
-import os.path
-
-import fs.osfs
-
-from capa.capa_problem import LoncapaProblem, LoncapaSystem
-from capa.inputtypes import Status
-from mock import Mock, MagicMock
-from mako.lookup import TemplateLookup
-
-import xml.sax.saxutils as saxutils
-
-TEST_DIR = os.path.dirname(os.path.realpath(__file__))
-
-
-def get_template(template_name):
- """
- Return template for a capa inputtype.
- """
- return TemplateLookup(
- directories=[path(__file__).dirname().dirname() / 'templates']
- ).get_template(template_name)
-
-
-def capa_render_template(template, context):
- """
- Render template for a capa inputtype.
- """
- return get_template(template).render_unicode(**context)
-
-
-def tst_render_template(template, context):
- """
- A test version of render to template. Renders to the repr of the context, completely ignoring
- the template name. To make the output valid xml, quotes the content, and wraps it in a
- """
- return '
{0}
'.format(saxutils.escape(repr(context)))
-
-
-def calledback_url(dispatch='score_update'):
- return dispatch
-
-xqueue_interface = MagicMock()
-xqueue_interface.send_to_queue.return_value = (0, 'Success!')
-
-
-def test_capa_system(render_template=None):
- """
- Construct a mock LoncapaSystem instance.
-
- """
- the_system = Mock(
- spec=LoncapaSystem,
- ajax_url='/dummy-ajax-url',
- anonymous_student_id='student',
- cache=None,
- can_execute_unsafe_code=lambda: False,
- get_python_lib_zip=lambda: None,
- DEBUG=True,
- filestore=fs.osfs.OSFS(os.path.join(TEST_DIR, "test_files")),
- i18n=gettext.NullTranslations(),
- node_path=os.environ.get("NODE_PATH", "/usr/local/lib/node_modules"),
- render_template=render_template or tst_render_template,
- seed=0,
- STATIC_URL='/dummy-static/',
- STATUS_CLASS=Status,
- xqueue={'interface': xqueue_interface, 'construct_callback': calledback_url, 'default_queuename': 'testqueue', 'waittime': 10},
- )
- return the_system
-
-
-def mock_capa_module():
- """
- capa response types needs just two things from the capa_module: location and track_function.
- """
- capa_module = Mock()
- capa_module.location.to_deprecated_string.return_value = 'i4x://Foo/bar/mock/abc'
- # The following comes into existence by virtue of being called
- # capa_module.runtime.track_function
- return capa_module
-
-
-def new_loncapa_problem(xml, capa_system=None, seed=723, use_capa_render_template=False):
- """Construct a `LoncapaProblem` suitable for unit tests."""
- render_template = capa_render_template if use_capa_render_template else None
- return LoncapaProblem(xml, id='1', seed=seed, capa_system=capa_system or test_capa_system(render_template),
- capa_module=mock_capa_module())
-
-
-def load_fixture(relpath):
- """
- Return a `unicode` object representing the contents
- of the fixture file at the given path within a test_files directory
- in the same directory as the test file.
- """
- abspath = os.path.join(os.path.dirname(__file__), 'test_files', relpath)
- with open(abspath) as fixture_file:
- contents = fixture_file.read()
- return contents.decode('utf8')
diff --git a/common/lib/capa/capa/tests/helpers.py b/common/lib/capa/capa/tests/helpers.py
new file mode 100644
index 0000000000..7bd12bb65f
--- /dev/null
+++ b/common/lib/capa/capa/tests/helpers.py
@@ -0,0 +1,103 @@
+"""Tools for helping with testing capa."""
+
+import gettext
+from path import path # pylint: disable=no-name-in-module
+import os
+import os.path
+
+import fs.osfs
+
+from capa.capa_problem import LoncapaProblem, LoncapaSystem
+from capa.inputtypes import Status
+from mock import Mock, MagicMock
+from mako.lookup import TemplateLookup
+
+import xml.sax.saxutils as saxutils
+
+TEST_DIR = os.path.dirname(os.path.realpath(__file__))
+
+
+def get_template(template_name):
+ """
+ Return template for a capa inputtype.
+ """
+ return TemplateLookup(
+ directories=[path(__file__).dirname().dirname() / 'templates']
+ ).get_template(template_name)
+
+
+def capa_render_template(template, context):
+ """
+ Render template for a capa inputtype.
+ """
+ return get_template(template).render_unicode(**context)
+
+
+def tst_render_template(template, context):
+ """
+ A test version of render to template. Renders to the repr of the context, completely ignoring
+ the template name. To make the output valid xml, quotes the content, and wraps it in a
+ """
+ return '
{0}
'.format(saxutils.escape(repr(context)))
+
+
+def calledback_url(dispatch='score_update'):
+ return dispatch
+
+xqueue_interface = MagicMock()
+xqueue_interface.send_to_queue.return_value = (0, 'Success!')
+
+
+def test_capa_system(render_template=None):
+ """
+ Construct a mock LoncapaSystem instance.
+
+ """
+ the_system = Mock(
+ spec=LoncapaSystem,
+ ajax_url='/dummy-ajax-url',
+ anonymous_student_id='student',
+ cache=None,
+ can_execute_unsafe_code=lambda: False,
+ get_python_lib_zip=lambda: None,
+ DEBUG=True,
+ filestore=fs.osfs.OSFS(os.path.join(TEST_DIR, "test_files")),
+ i18n=gettext.NullTranslations(),
+ node_path=os.environ.get("NODE_PATH", "/usr/local/lib/node_modules"),
+ render_template=render_template or tst_render_template,
+ seed=0,
+ STATIC_URL='/dummy-static/',
+ STATUS_CLASS=Status,
+ xqueue={'interface': xqueue_interface, 'construct_callback': calledback_url, 'default_queuename': 'testqueue', 'waittime': 10},
+ )
+ return the_system
+
+
+def mock_capa_module():
+ """
+ capa response types needs just two things from the capa_module: location and track_function.
+ """
+ capa_module = Mock()
+ capa_module.location.to_deprecated_string.return_value = 'i4x://Foo/bar/mock/abc'
+ # The following comes into existence by virtue of being called
+ # capa_module.runtime.track_function
+ return capa_module
+
+
+def new_loncapa_problem(xml, capa_system=None, seed=723, use_capa_render_template=False):
+ """Construct a `LoncapaProblem` suitable for unit tests."""
+ render_template = capa_render_template if use_capa_render_template else None
+ return LoncapaProblem(xml, id='1', seed=seed, capa_system=capa_system or test_capa_system(render_template),
+ capa_module=mock_capa_module())
+
+
+def load_fixture(relpath):
+ """
+ Return a `unicode` object representing the contents
+ of the fixture file at the given path within a test_files directory
+ in the same directory as the test file.
+ """
+ abspath = os.path.join(os.path.dirname(__file__), 'test_files', relpath)
+ with open(abspath) as fixture_file:
+ contents = fixture_file.read()
+ return contents.decode('utf8')
diff --git a/common/lib/capa/capa/tests/test_answer_pool.py b/common/lib/capa/capa/tests/test_answer_pool.py
index 7ca4923be2..8d1d3b800f 100644
--- a/common/lib/capa/capa/tests/test_answer_pool.py
+++ b/common/lib/capa/capa/tests/test_answer_pool.py
@@ -5,7 +5,7 @@ Tests the logic of the "answer-pool" attribute, e.g.
import unittest
import textwrap
-from . import test_capa_system, new_loncapa_problem
+from capa.tests.helpers import test_capa_system, new_loncapa_problem
from capa.responsetypes import LoncapaProblemError
diff --git a/common/lib/capa/capa/tests/test_capa_problem.py b/common/lib/capa/capa/tests/test_capa_problem.py
index edd02cd3c7..8a65b0f1d5 100644
--- a/common/lib/capa/capa/tests/test_capa_problem.py
+++ b/common/lib/capa/capa/tests/test_capa_problem.py
@@ -6,7 +6,7 @@ import textwrap
from lxml import etree
import unittest
-from . import new_loncapa_problem
+from capa.tests.helpers import new_loncapa_problem
@ddt.ddt
diff --git a/common/lib/capa/capa/tests/test_customrender.py b/common/lib/capa/capa/tests/test_customrender.py
index 9cb1de7d9b..16bba785fc 100644
--- a/common/lib/capa/capa/tests/test_customrender.py
+++ b/common/lib/capa/capa/tests/test_customrender.py
@@ -2,7 +2,7 @@ from lxml import etree
import unittest
import xml.sax.saxutils as saxutils
-from . import test_capa_system
+from capa.tests.helpers import test_capa_system
from capa import customrender
# just a handy shortcut
diff --git a/common/lib/capa/capa/tests/test_hint_functionality.py b/common/lib/capa/capa/tests/test_hint_functionality.py
index 76333ad22e..b96f6cadbd 100644
--- a/common/lib/capa/capa/tests/test_hint_functionality.py
+++ b/common/lib/capa/capa/tests/test_hint_functionality.py
@@ -14,7 +14,7 @@ from ddt import ddt, data, unpack
# pylint: disable=line-too-long
# For out many ddt data cases, prefer a compact form of { .. }
-from . import new_loncapa_problem, load_fixture
+from capa.tests.helpers import new_loncapa_problem, load_fixture
class HintTest(unittest.TestCase):
diff --git a/common/lib/capa/capa/tests/test_html_render.py b/common/lib/capa/capa/tests/test_html_render.py
index 85c88de8ac..3b9b2db62c 100644
--- a/common/lib/capa/capa/tests/test_html_render.py
+++ b/common/lib/capa/capa/tests/test_html_render.py
@@ -6,7 +6,7 @@ import textwrap
import mock
from .response_xml_factory import StringResponseXMLFactory, CustomResponseXMLFactory
-from . import test_capa_system, new_loncapa_problem
+from capa.tests.helpers import test_capa_system, new_loncapa_problem
class CapaHtmlRenderTest(unittest.TestCase):
diff --git a/common/lib/capa/capa/tests/test_inputtypes.py b/common/lib/capa/capa/tests/test_inputtypes.py
index 7d0b7ed860..e6dfc88a01 100644
--- a/common/lib/capa/capa/tests/test_inputtypes.py
+++ b/common/lib/capa/capa/tests/test_inputtypes.py
@@ -24,7 +24,7 @@ import unittest
import textwrap
import xml.sax.saxutils as saxutils
-from . import test_capa_system
+from capa.tests.helpers import test_capa_system
from capa import inputtypes
from capa.checker import DemoSystem
from mock import ANY, patch
diff --git a/common/lib/capa/capa/tests/test_responsetypes.py b/common/lib/capa/capa/tests/test_responsetypes.py
index e3f486ccbf..a73da83d89 100644
--- a/common/lib/capa/capa/tests/test_responsetypes.py
+++ b/common/lib/capa/capa/tests/test_responsetypes.py
@@ -17,7 +17,7 @@ import mock
from pytz import UTC
import requests
-from . import new_loncapa_problem, test_capa_system, load_fixture
+from capa.tests.helpers import new_loncapa_problem, test_capa_system, load_fixture
import calc
from capa.responsetypes import LoncapaProblemError, \
diff --git a/common/lib/capa/capa/tests/test_shuffle.py b/common/lib/capa/capa/tests/test_shuffle.py
index 958c0c2398..ff5c99c10e 100644
--- a/common/lib/capa/capa/tests/test_shuffle.py
+++ b/common/lib/capa/capa/tests/test_shuffle.py
@@ -3,7 +3,7 @@
import unittest
import textwrap
-from . import test_capa_system, new_loncapa_problem
+from capa.tests.helpers import test_capa_system, new_loncapa_problem
from capa.responsetypes import LoncapaProblemError
diff --git a/common/lib/capa/capa/tests/test_targeted_feedback.py b/common/lib/capa/capa/tests/test_targeted_feedback.py
index d8592c642c..41f70d33b2 100644
--- a/common/lib/capa/capa/tests/test_targeted_feedback.py
+++ b/common/lib/capa/capa/tests/test_targeted_feedback.py
@@ -5,7 +5,7 @@ i.e. those with the
element
import unittest
import textwrap
-from . import test_capa_system, new_loncapa_problem, load_fixture
+from capa.tests.helpers import test_capa_system, new_loncapa_problem, load_fixture
class CapaTargetedFeedbackTest(unittest.TestCase):
diff --git a/common/lib/capa/capa/tests/test_util.py b/common/lib/capa/capa/tests/test_util.py
index 1f470fb7d2..eee0cfcf3b 100644
--- a/common/lib/capa/capa/tests/test_util.py
+++ b/common/lib/capa/capa/tests/test_util.py
@@ -4,7 +4,7 @@ Tests capa util
import unittest
from lxml import etree
-from . import test_capa_system
+from capa.tests.helpers import test_capa_system
from capa.util import compare_with_tolerance, sanitize_html, get_inner_html_from_xpath