【发布时间】:2018-09-02 01:14:41
【问题描述】:
我的 python 应用程序测试是在远程服务器上使用命令nosetests 执行的。我无法修改测试的启动方式,也无法为其添加选项。我有带有测试的 Django 应用,但测试无法正常工作。
我的项目结构:
project
├── README.md
├── setup.py
├── mysite
│ ├── blog
│ │ ├── __init__.py
│ │ ├── models.py
│ │ ├── tests.py
| | ├── ...
│ ├── db.sqlite3
│ ├── manage.py
│ ├── mysite
│ │ ├── __init__.py
│ │ ├── settings.py
| | ├── ...
命令nosetests 在project 目录中执行。我希望它能够正确运行 tests.py,它有 2 个 Django 测试用例。我尝试在项目根目录中创建tests 目录并使用DiscoverRunner 调用测试):
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
test_dir = os.path.dirname(os.path.dirname(__file__)) # one level up
sys.path.insert(0, os.path.join(test_dir, 'mysite'))
class ServerTest(unittest.TestCase):
def test_runtests(self):
django.setup()
self.test_runner = DiscoverRunner(verbosity=1, interactive=True, failfast=False)
failures = self.test_runner.run_tests(['mysite'])
self.assertEqual(failures, 0)
它可以工作,但问题是所有测试都被视为单个测试,并且服务器会生成错误报告。
另一个解决方案:如果我将空的__init__.py 添加到project/mysite 鼻子发现tests.py 但测试失败,因为'Apps are not loaded yet' 这可能意味着我必须更早调用django.setup() 但我不知道该怎么做它。我找到了一个用于鼻子的插件,但我无法在远程机器上安装插件或更改选项。
任何想法如何使我的任何方法解决问题?
【问题讨论】:
-
如果您尝试通过
python manage.py test在本地运行测试,测试是否正常工作? -
@BartDur 是的。如果我使用 DiscoveryRunner.run_tests 运行它们,它们也可以正常工作,但它们算作一个测试
-
你能在远程机器上使用
virtualenv吗? -
你能在本地使用
nosetest运行它们吗? -
你能将文件添加到项目的根目录吗?
标签: python django nose django-nose