2014-01-18 15 views
4

我對谷歌應用引擎和python相當陌生,請耐心等待。 我試圖運行在GAE上的第一次蟒蛇單元測試,而在之後Webapp2如何在谷歌應用引擎中運行python單元測試

導但是,當我運行測試我不斷收到以下錯誤:

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

這是我的測試.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 

任何人都可以指出我的寫作方向,爲什麼我會收到上面的錯誤信息,爲什麼我不能運行這個簡單的進行測試。

我試圖發佈儘可能多的信息,希望就足夠了,有人給我一隻小手。

謝謝。

回答

-1

Google App Engine支持一些Web框架:Django,web.py,webapp2和其他,但不包括它們。您需要將他們的源代碼(或者您的案例webbapp2源代碼)與您的應用程序一起放置。

您可以從here下載webapp2框架。

所以,現在你將有:

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

使部署,你準備好了!

希望它有幫助。

+1

雖然一般來說這對於很多第三方庫是正確的,但它對許多django版本,webapp和webapp2等是不正確的。請參閱運行時提供的第三方庫文檔。 https://developers.google.com/appengine/docs/python/tools/libraries27 –

2

webapp2的包含在谷歌提供的運行時間,但是你需要使用庫來配置它的支持指令app.yaml中

請參閱有關直接支持的第三方庫https://developers.google.com/appengine/docs/python/tools/libraries27

在你的情況,你的文檔將包括

libraries: 
- name: webapp2 
    version: "latest" 
在你的app.yaml

,然後你可以不必在您的代碼庫webapp2的部署代碼。

對於沒有在第三方庫文檔或未列出版本中列出的庫,其他答案是正確的。

1

感謝蒂姆霍夫曼和CD字體的回覆,他們肯定讓我想到這一點,蒂姆霍夫曼你幾乎是正確的。

我的意思是webapp2已經包含在谷歌應用程序引擎(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 

測試正在運行狀態及工作如預期的那樣,謝謝你們兩位。

相關問題