LiveServerTestCase在python脚本中运行时修改生产数据库

时间:2014-06-09 04:21:11

标签: django

当我在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)

.sss

在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。

1 个答案:

答案 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()