最近又开始在写自己的第三个GAE应用了,吸取前两次的经验,这次在文档和测试上要多用点功夫了。
说到测试,开发阶段的代码跑unit test应该是必须的,于是找到了这个:GAEUnit。
看看它的介绍吧:
GAEUnit is a unit test framework that helps to automate testing of your Google App Engine application. With a single configuration change (it can be completed within 30 seconds), your unit tests can be run in the real GAE app server environment using a web browser.
GAEUnit is simple. It contains only one file: gaeunit.py. Just copy that file into your application directory and add the test URL to app.yaml.
GAEUnit的用法也非常的简单,把gaeunit.py copy到GAE项目目录,然后在app.yaml里加上这样一句:
- url: /test.*
login: admin # This is important if you deploy the test directory in production!
script: gaeunit.py
这里加上login: admin是指只有这个site的admin用户才可以调用测试。当然,在开发阶段,如果你想省事的话,也可以注释掉。
接下来,运行GAE,然后查看http://localhost:8080/test,就会发现有一个很简洁的单元测试页面了。
怎么样,很cool吧!如果你的GAE已经部署了,这样就可以在appspot站点上进行测试了,不要忘记把login: admin加上了,否则,任何人都可以查看你的单元测试页面了,如果你喜欢这样的话也无妨。
当然,你需要在GAE项目目录里,增加一个test目录,然后开始写单元测试。我这里就是使用unittest,这里举一个简单的例子:
[serviceTest.py]
import unittest from models import * import service class TestService(unittest.TestCase): def setUp(self): pass def test_saveUser(self): # create an user model user = User(name='Test') # add this user model into datastore and check service.saveUser(user) other = service.getUserList({'name': 'Test'}).get() self.assertEqual('Test', other.name) # update the user model and check other.name='ABC' service.saveUser(other) self.assertEquals(None, service.getUserList({'name': 'Test'})) self.assertEquals(1, service.getUserList({'name': 'ABC'}).count())
这里还有一篇单于GAE上做unittest的文章(http://ihere.appspot.com/2008/12/game-unittest-above-summary.html),写的很不错,但我还没有仔细研究,有空再试试。