【问题标题】:Django WebTest and Django Nose Selenium SAVEPOINT errorsDjango WebTest 和 Django Nose Selenium SAVEPOINT 错误
【发布时间】:2011-11-10 15:34:43
【问题描述】:

我正在使用 *django_webtest* 来测试我的视图,并使用 *django_nose_selenium* 来测试我网站上的 ajax(我无法让 webtest.sel 正常工作 + 运行单元测试时由于 debug=False 没有提供静态文件)。

我正在使用运行完整的测试套件 ./manage.py test project --with-selenium --with-cherrypyliveserver 并在 django_webtest 和 selenium 测试之间不断出现不稳定的行为。 似乎当我有 odd 数量的 django webtest 时,套件通过 - 当它是 even 数量时,我得到 SAVEPOINT 只能用于事务块异常(请参阅堆栈下面)。我通过添加一个简单的测试用例(assertTrue(2 == 1+1))发现了这一点。

这可能与cherrypy服务器设置有关吗?对可能发生的事情有任何想法吗? 您使用什么工具组合来测试您的视图 + ajax?

======================================================================
ERROR: test_update_project_files (proj.apps.project.tests.UpdateProjectTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/proj/../proj/apps/project/tests/integration_tests.py", line 88, in test_update_project_files
    response = self.app.get("/project/manage/sample-project-name/",  user="username")
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/django_webtest/__init__.py", line 71, in get
    url, params, headers, extra_environ, status, expect_errors)
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/webtest/app.py", line 756, in get
    expect_errors=expect_errors)
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/django_webtest/__init__.py", line 42, in do_request
    response = super(DjangoTestApp, self).do_request(req, status, expect_errors)
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/webtest/app.py", line 1000, in do_request
    res = req.get_response(app, catch_exc_info=True)
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/webob/request.py", line 1145, in get_response
    application, catch_exc_info=True)
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/webob/request.py", line 1118, in call_application
    app_iter = application(self.environ, start_response)
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/webtest/lint.py", line 173, in lint_app
    iterator = application(environ, start_response_wrapper)
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/django_webtest/middleware.py", line 77, in __call__
    return self.app(environ, start_response)
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/django/contrib/staticfiles/handlers.py", line 68, in __call__
    return self.application(environ, start_response)
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/django/core/handlers/wsgi.py", line 272, in __call__
    response = self.get_response(request)
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/django/core/handlers/base.py", line 169, in get_response
    response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/django/core/handlers/base.py", line 89, in get_response
    response = middleware_method(request)
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/django_webtest/middleware.py", line 49, in process_request
    auth.login(request, user)
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/django/contrib/auth/__init__.py", line 80, in login
    request.session.cycle_key()
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/django/contrib/sessions/backends/base.py", line 271, in cycle_key
    self.create()
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/django/contrib/sessions/backends/db.py", line 40, in create
    self.save(must_create=True)
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/django/contrib/sessions/backends/db.py", line 61, in save
    sid = transaction.savepoint(using=using)
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/django/db/transaction.py", line 162, in savepoint
    return connection.savepoint()
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/django/db/backends/__init__.py", line 223, in savepoint
    self._savepoint(sid)
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/django/db/backends/__init__.py", line 70, in _savepoint
    self.cursor().execute(self.ops.savepoint_create_sql(sid))
  File "/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 44, in execute
    return self.cursor.execute(query, args)
DatabaseError: SAVEPOINT can only be used in transaction blocks

-------------------- >> begin captured stdout << ---------------------
query exception SAVEPOINT s140735086238912_x1

--------------------- >> end captured stdout << ----------------------
-------------------- >> begin captured logging << --------------------
tracking.middleware: DEBUG: Created a new visitor: {'session_key': '8a0c9599b9fcf95d75fc01ad3ed4411e', 'ip_address': '127.0.0.1'}
--------------------- >> end captured logging << ---------------------

----------------------------------------------------------------------
Ran 3 tests in 28.389s

FAILED (errors=1)
Destroying test database for alias 'default' ('test_mydb')...

【问题讨论】:

    标签: django selenium webtest


    【解决方案1】:

    我正在使用 webtest.sel 没有问题。如果您正在测试中,只需添加一些东西来为您的静态文件提供服务

    假设一个环境变量:

    TEST=True ./manage.py test project
    

    然后在你的 urls.py 中:

    if settings.DEBUG or 'TEST' in os.environ:
        # serve static files
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-11
      • 2012-09-09
      • 1970-01-01
      • 2013-03-13
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多