当我在python脚本中运行我的测试时,它会修改我的生产数据库。如果我从命令行运行它不会。当我说修改时,它会清除我现有的用户并将其替换为我为测试创建的用户。
我按照此设置进行了设置:https://docs.djangoproject.com/en/1.4/topics/testing/#django.test.LiveServerTestCase 我创建了一个| setUp |设置用户的方法。
当我运行此时,生产数据库未被修改: python2.7 manage.py test yPayment
在我的python脚本中,我有: 来自django.utils import unittest class yPaymentTest(LiveServerTestCase) ... suite_payment = unittest.TestLoader()。loadTestsFromTestCase(yPaymentTest) unittest.TextTestRunner(冗长= 2).RUN(suite_payment)
以下是命令行的完整输出 [brian @ centos-dv7 yPaymentProj] $ /usr/local/python2.7/lib/python2.7/site-packages/virt_env/django1p4/bin/python2.7 manage.py test yPayment 为别名创建测试数据库'默认' ... Traceback(最近一次调用最后一次): 文件" /usr/local/python2.7/lib/python2.7/wsgiref/handlers.py" ;,第85行,运行中 self.result = application(self.environ,self.start_response) 文件" /usr/local/python2.7/lib/python2.7/site-packages/virt_env/django1p4/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py" ,第67行,通话 return self.application(environ,start_response) 文件" /usr/local/python2.7/lib/python2.7/site-packages/virt_env/django1p4/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py" ,第67行,通话 return self.application(environ,start_response) 文件" /usr/local/python2.7/lib/python2.7/site-packages/virt_env/django1p4/lib/python2.7/site-packages/django/core/handlers/wsgi.py" ,第241行,通话 response = self.get_response(request) 文件" /usr/local/python2.7/lib/python2.7/site-packages/virt_env/django1p4/lib/python2.7/site-packages/django/core/handlers/base.py" ,第151行,在get_response中 response = self.handle_uncaught_exception(request,resolver,sys.exc_info()) 文件" /usr/local/python2.7/lib/python2.7/site-packages/virt_env/django1p4/lib/python2.7/site-packages/django/core/handlers/base.py" ,第226行,在handle_uncaught_exception中 返回回调(request,** param_dict) 文件" /usr/local/python2.7/lib/python2.7/site-packages/virt_env/django1p4/lib/python2.7/site-packages/django/utils/decorators.py" ;, line 91,在_wrapped_view中 response = view_func(request,* args,** kwargs) 文件" /usr/local/python2.7/lib/python2.7/site-packages/virt_env/django1p4/lib/python2.7/site-packages/django/views/defaults.py" ;, line 32,在server_error中 t = loader.get_template(template_name)#您需要创建500.html模板。 文件" /usr/local/python2.7/lib/python2.7/site-packages/virt_env/django1p4/lib/python2.7/site-packages/django/template/loader.py" ;, line 145,在get_template中 template,origin = find_template(template_name) 文件" /usr/local/python2.7/lib/python2.7/site-packages/virt_env/django1p4/lib/python2.7/site-packages/django/template/loader.py" ;, line 138,在find_template中 提升TemplateDoesNotExist(名称) TemplateDoesNotExist:500.html /usr/local/python2.7/lib/python2.7/site-packages/virt_env/django1p4/lib/python2.7/site-packages/django/db/models/fields/的初始化即可。 py:808:RuntimeWarning:DateTimeField收到了一个天真的日期时间(2014-06-08 22:54:32.927908),而时区支持处于活动状态。 RuntimeWarning) /usr/local/python2.7/lib/python2.7/site-packages/virt_env/django1p4/lib/python2.7/site-packages/django/db/models/fields/的初始化即可。 py:808:RuntimeWarning:DateTimeField收到了一个天真的日期时间(2014-06-08 22:54:32.927916),而时区支持处于活动状态。 RuntimeWarning) /usr/local/python2.7/lib/python2.7/site-packages/virt_env/django1p4/lib/python2.7/site-packages/django/db/models/fields/的初始化即可。 py:808:RuntimeWarning:DateTimeField收到了一个天真的日期时间(2014-06-08 22:54:34.690671),而时区支持处于活动状态。 RuntimeWarning)
在12.259s中进行4次测试
好(跳过= 3) 销毁别名的测试数据库'默认' ...
这是python脚本的输出 test_custom_admin_add_card( main .yPaymentTest)... /usr/local/python2.7/lib/python2.7/site-packages/virt_env/django1p4/lib/python2.7/site-packages/django /db/models/fields/init.py:808:RuntimeWarning:DateTimeField收到了一个天真的日期时间(2014-06-08 22:57:54.016573),而时区支持处于活动状态。 RuntimeWarning) /usr/local/python2.7/lib/python2.7/site-packages/virt_env/django1p4/lib/python2.7/site-packages/django/db/models/fields/的初始化即可。 py:808:RuntimeWarning:DateTimeField收到了一个天真的日期时间(2014-06-08 22:57:54.016584),而时区支持处于活动状态。 RuntimeWarning) /usr/local/python2.7/lib/python2.7/site-packages/virt_env/django1p4/lib/python2.7/site-packages/django/db/models/fields/的初始化即可。 py:808:RuntimeWarning:DateTimeField收到了一个天真的日期时间(2014-06-08 22:57:55.843861),而时区支持处于活动状态。 RuntimeWarning) 好 test_custom_admin_login( main .yPaymentTest)...在调试其他功能时跳过'跳过' test_custom_admin_no_card( main .yPaymentTest)...在调试其他功能时跳过'跳过' test_custom_admin_required_login( main .yPaymentTest)...在调试其他功能时跳过'跳过'
在24.278s中进行4次测试
确定(跳过= 3)
我正在使用IDE运行脚本。
这是一个类似的问题:Django functional LiveServerTestCase - After submitting form with selenium, objects save to non-test database 但它并不适用,因为我使用的是self.live_server_url而不是硬编码网址。
我使用的是python 2.7,django 1.4.13和最新版本的Selenium。
答案 0 :(得分:0)
解决方案是使用DjangoTestSuiteRunner。我最终复制了方法DjangoTestSuiteRunner.run_tests并修改为使用测试套件。
代码是
from django.test.simple import DjangoTestSuiteRunner
from django.utils import unittest
suite_payment = unittest.TestLoader().loadTestsFromTestCase(yPaymentTest)
djangoRunner = DjangoTestSuiteRunner(verbosity=2)
djangoRunner.setup_test_environment()
old_config = djangoRunner.setup_databases()
djangoRunner.run_suite(suite_payment )
djangoRunner.teardown_databases(old_config)
djangoRunner.teardown_test_environment()