Django WebTest和Django Nose Selenium保存点错误

Django WebTest和Django Nose Selenium保存点错误,django,selenium,webtest,Django,Selenium,Webtest,我正在使用*django_webtest*测试我的视图,并使用*django_nose_selenium*在我的站点上测试ajax(我无法让webtest.sel正常工作,因为运行单元测试时debug=False,所以没有提供静态文件) 我正在使用 /manage.py测试项目——使用selenium——使用cherrypyliveserver,并在django_webtest和selenium测试之间不断获得不稳定的行为。 似乎当我有一个奇数的django webtest时,套件通过了-当它是

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

我正在使用
/manage.py测试项目——使用selenium——使用cherrypyliveserver
,并在django_webtest和selenium测试之间不断获得不稳定的行为。 似乎当我有一个奇数的django webtest时,套件通过了-当它是一个偶数时,我得到的保存点只能用于事务块异常(见下面的堆栈)。我发现通过添加一个简单的测试用例(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')...
======================================================================
错误:测试\更新\项目\文件(proj.apps.project.tests.UpdateProjectTestCase)
----------------------------------------------------------------------
回溯(最近一次呼叫最后一次):
文件“/Users/kepioo/Documents/code/virtualenvs/myproject/proj/。/proj/apps/project/tests/integration\u tests.py”,第88行,在test\u update\u project\u文件中
response=self.app.get(“/project/manage/sample project name/”,user=“username”)
文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/django_webtest/_init__.py”,第71行,在get中
url、参数、标题、额外环境、状态、预期错误)
get中的文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/webtest/app.py”,第756行
expect\u errors=expect\u errors)
文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/django_webtest/_init__.py”,第42行,在do_请求中
response=super(DjangoTestApp,self).do_请求(请求,状态,预期错误)
文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/webtest/app.py”,第1000行,在do_请求中
res=req.get\U响应(应用程序,捕获执行信息=True)
文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/webob/request.py”,第1145行,在get_响应中
应用程序,catch_exc_info=True)
call_应用程序中的文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/webob/request.py”,第1118行
应用程序=应用程序(self.environ,start\u响应)
文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/webtest/lint.py”,lint_应用程序第173行
迭代器=应用程序(环境,启动\响应\包装器)
文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/django\u webtest/middleware.py”,第77行,在调用中__
返回self.app(环境、启动和响应)
文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/django/contrib/staticfiles/handlers.py”,第68行,在__
返回self.application(环境、启动和响应)
文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/django/core/handlers/wsgi.py”,第272行,在__
响应=自我获取响应(请求)
文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/django/core/handlers/base.py”,第169行,在get_响应中
response=self.handle\u uncaught\u异常(请求、解析器、sys.exc\u info())
文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/django/core/handlers/base.py”,第89行,在get_响应中
响应=中间件\方法(请求)
文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/django\u webtest/middleware.py”,第49行,进程中请求
身份验证登录(请求、用户)
文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/django/contrib/auth/_init__.py”,第80行,登录
request.session.cycle_key()
文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/django/contrib/sessions/backends/base.py”,第271行,循环键
self.create()
文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/django/contrib/sessions/backends/db.py”,第40行,在create中
self.save(必须创建=True)
文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/django/contrib/sessions/backends/db.py”,第61行,保存
sid=transaction.savepoint(using=using)
保存点中的文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/django/db/transaction.py”,第162行
返回连接。保存点()
保存点中的文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/django/db/backends/_init__.py”,第223行
自我保存点(sid)
文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/django/db/backends/_init__.py”,第70行,保存点
self.cursor().execute(self.ops.savepoint\u create\u sql(sid))
文件“/Users/kepioo/Documents/code/virtualenvs/myproject/lib/python2.6/site packages/django/db/backends/postgresql_psycopg2/base.py”,第44行,在execute中
返回self.cursor.execute(查询,参数)
DatabaseError:保存点只能在事务块中使用

-------------------->>开始捕获标准输出>结束捕获标准输出>开始捕获日志>结束捕获日志我使用webtest.sel没有问题。如果您正在进行测试,只需添加一些东西来为静态文件提供服务

假设一个环境变量:

TEST=True ./manage.py test project
然后在URL.py中:

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