如何在谷歌应用引擎中运行python单元测试

时间:2014-01-18 01:41:11

标签: python google-app-engine unit-testing

我对谷歌应用引擎和python相当新,所以请耐心等待。 我正在尝试第一次对gae进行python单元测试,同时遵循Webapp2指南

但是当我运行测试时,我不断收到以下错误:

Traceback (most recent call last):
  File "test.py", line 2, in <module>
    import webapp2
ImportError: No module named webapp2

这是我的test.py文件:

import unittest
import webapp2

# from the app main.py
import main

class TestHandlers(unittest.TestCase):
   def test_hello(self):
       # Build a request object passing the URI path to be tested.
       # You can also pass headers, query arguments etc.
       request = webapp2.Request.blank('/')
       # Get a response for that request.
       response = request.get_response(main.app)

       # Let's check if the response is correct.
       self.assertEqual(response.status_int, 200)
       self.assertEqual(response.body, 'Hello, world!')

if __name__ == '__main__':
    unittest.main()

这是我的main.py文件:

import webapp2

class HelloHandler(webapp2.RequestHandler):
    def get(self):
        self.response.write('Hello, world!')

app = webapp2.WSGIApplication([('/', HelloHandler)])

def main():
    app.run()

if __name__ == '__main__':
    main()

这是我的app.yaml文件:

application: test-app
version: 1
runtime: python27
api_version: 1
threadsafe: true

- url: /.*
  script: main.app

libraries:
- name: jinja2
  version: latest

builtins:
- remote_api: on

我当前的文件夹结构是:

Test-app
         app.yaml
         main.py
         test.py
         index.yaml

要运行我正在进行的测试:

$ cd test-app
$ python test.py

任何人都可以指出我的写作方向,为什么我收到上面的错误信息,为什么我不能运行这个简单的测试。

我试图发布尽可能多的信息,希望足够,有人给我一点帮助。

感谢。

3 个答案:

答案 0 :(得分:2)

webapp2包含在google提供的运行时中,但您需要使用app.yaml中的libraries指令配置它的支持

请参阅直接支持的第三方库https://developers.google.com/appengine/docs/python/tools/libraries27

上的文档

在你的情况下,你会包括

libraries:
- name: webapp2
  version: "latest" 

在您的app.yaml中,然后您可以部署代码,而无需在代码库中包含webapp2。

对于未在第三方库文档中列出的库或未列出的版本,另一个答案是正确的。

答案 1 :(得分:1)

感谢Tim Hoffman和cdonts的回复他们肯定让我想到了这一点,Tim Hoffman你几乎是对的。

我的意思是webapp2已经作为google app引擎中的库包含在内(google_appengine / lib / webapp2-2.5.2)。所以我无法运行我的测试的原因是因为我没有将google_appengine / lib添加到$ PYTHONPATH,这就是“导入webapp2”未按预期工作的原因。

因此,由于我正在使用virtualenv,我所做的只是通过运行以下命令将google_appengine / lib(目录)添加到我的virtualenv的$ PYTHONPATH:

# add2virtualenv ---> adds/this/directory/to/the/PYTHONPATH
$ add2virtualenv google_appengine/lib/webapp2-2.5.2 

# check which directories have been added to the virtualenv
$ add2virtualenv
Usage: add2virtualenv dir [dir ...]

Existing paths:
google_appengine/lib/webapp2-2.5.2 

测试现在正在运行并按预期工作,谢谢你们。

答案 2 :(得分:-1)

Google App Engine支持某些Web框架:Django,web.py,webapp2和其他,但它不包含它们。您需要将他们的源代码(或您的webbapp2源代码)与您的应用程序一起放置。

您可以从here下载webapp2框架。

现在你将拥有:

Test-app
     app.yaml
     main.py
     test.py
     index.yaml
     webapp2/

进行部署,您已做好准备!

希望它有所帮助。