App Engine中的处理程序测试失败:webtest导入错误

3 投票
2 回答
883 浏览
提问于 2025-04-17 19:26

我对这个错误完全搞不懂:

======================================================================
ERROR: test_webtest (unittest2.loader.ModuleImportFailure)
----------------------------------------------------------------------
ImportError: Failed to import test module: test_webtest
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/unittest2/loader.py", line 260, in _find_tests
    module = self._get_module_from_name(name)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/unittest2/loader.py", line 238, in _get_module_from_name
    __import__(name)
  File "/Users/chris/Documents/gae/tasker/test/test_webtest.py", line 4, in <module>
    import webtest
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/webtest/__init__.py", line 9, in <module>
    from webtest.app import TestApp
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/webtest/app.py", line 65, in <module>
    class TestRequest(webob.BaseRequest):
AttributeError: 'module' object has no attribute 'BaseRequest'

事情是这样的:

  • 我正在为我的App Engine应用设置处理程序的单元测试。
  • 我在按照这个教程来搭建单元测试框架,包括页面底部的bash脚本,逐字照抄。
  • 我在终端运行测试,使用的命令是:

    ./run_tests.py /usr/local/google_appengine test/

  • 我在使用这个教程来构建我的处理程序测试。但是它从来没有通过导入这一关。我只需要在test/test_webtest.py里做这个就会出现错误:

    import webtest
    
  • 我已经安装了webtest:

    $ pip install WebTest
    Requirement already satisfied (use --upgrade to upgrade): WebTest in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
    Requirement already satisfied (use --upgrade to upgrade): six in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages (from WebTest)
    Requirement already satisfied (use --upgrade to upgrade): WebOb>=1.2 in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages (from WebTest)
    Requirement already satisfied (use --upgrade to upgrade): waitress in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages (from WebTest)
    Requirement already satisfied (use --upgrade to upgrade): beautifulsoup4 in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages (from WebTest)
    Requirement already satisfied (use --upgrade to upgrade): distribute in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/distribute-0.6.28-py2.7.egg (from waitress->WebTest)
    
  • 我一次性运行所有测试,包括那些没有错误的旧测试。但是在任何一个测试中导入webtest都会产生上面的错误。为什么会这样呢?

2 个回答

0

我在使用webtest和GAE(谷歌应用引擎),效果很好。为了帮助你,我会尝试找出我这边的设置和你那边的不同之处:

  • 我使用的是unittest,而不是unittest2
  • 我没有使用像你那样的run_tests.py脚本。我只是直接在命令行中这样调用它:nosetests --with-gae
0

这个问题其实是我不同的Python环境搞混了。

我电脑里的 pippython 路径指向的是 /user/local/bin/python,而实际上,webtest就是安装在这个地方。

不过,我从教程上复制的代码里有一个这样的开头:#!/usr/bin/python,所以当我用 ./run_tests.py 来运行它时,它是在一个没有安装webtest的环境下运行的。

要解决这个问题,只需要用 python ./run_tests.py 来运行,或者把开头改成 #!/user/local/bin/python 就可以了。

撰写回答