回答
我们一般都不会测试太多。我们曾经有过“80%的测试覆盖率”规则,但发现这并没有让我们变得更好或更快。我们使用的大多数代码和数据结构都是非常防御性的,所以很少造成不可挽回的伤害。我们的用户更喜欢快速周转时间以达到100%的正常运行时间。
我们有两个应用程序设置:我的app.appspot.com
和我的app-test.appspot.com
。整个代码库是设计者确保app-test.appspot.com
永远不会改变外部系统的状态。
偶尔我们将数据从app.appspot.com
复制到app-test.appspot.com
。它可能会变得混乱,因为数据存储的id生成计数器不会被更新,但它工作得很好。
我们在两个系统上开发。前端开发主要在app.appspot.com
上完成,后端实验在app-test.appspot.com
上完成。
我们有三个分支:master,rc和production.rc从主控和从rc的产品更新。 rc每天都会通过rc.app.appspot.com进行部署或者对其进行操作。生产每周部署到production.app.appspot.com(也可通过其他应用程序名称访问)
开发人员通常会拒绝dev- whoami
.app.appspot.com进行试验我们使用的开发服务器很少因为凌晨从数据存储需要大量数据的
我们测试:我们主要使用的验收测试,我们有一点点的框架调用resttest_dsl
我们用它来形容这样的测试:
client.GET('/').responds_access_denied()
client.GET('/', auth='user').responds_html()
client.GET('/admin').responds_access_denied()
client.GET('/admin', auth='user').responds_access_denied()
client.GET('/admin', auth='admin').responds_html()
client.GET('/artikel/').responds_with_html_to_valid_auth()
client.GET('/artikel/?q=Ratzfratz', auth='user').responds_html()
client.GET('/api/ic/v3/a/14600/03/zukunft.json').responds_with_json_to_valid_auth()
client.GET('/kunden/SC50313/o/SO1194829/', auth='user').responds_html()
client.GET('/api/masterdata/artikel/v2/artnr/14600/bild=s210').redirects_to('...')
主机名和凭证有默认值,但可以被环境变量覆盖ES。我们曾经修复过的大多数错误都有一个回归测试。我们使用Makefile
来驱动整个东西。 Eg.g:
deploy:
appcfg.py update -V dev-`whoami` -A app .
TESTHOST=dev-`whoami`.app.appspot.com make resttest
open http://dev-`whoami`.app.appspot.com/
部署总是这样中央的Git仓库发生:
deploy_production:
rm -Rf tmp
mkdir tmp
(cd tmp ; git clone [email protected]:user/app.git)
(cd tmp/app ; git checkout production ; make dependencies)
(cd tmp/app ; git show-ref --hash=7 refs/remotes/origin/production > version.txt)
appcfg.py update -V "v`cat tmp/app/version.txt`" -A app tmp/app
(cd tmp/huWaWi ; TESTHOST="v`cat version.txt`".app.appspot.com make resttest)
appcfg.py update -V production -A app tmp/app
appcfg.py backends -V production -A app tmp/huWaWi app
我们首先部署到标有AppEngine上当前的修订版本。然后我们运行resttest.py
针对这个新部署的版本。失败时,m make
停止执行。如果未发生故障,则会部署“生产版本”。
我们还对源代码checkin运行语句pep8,pyflakes和pylint进行检查。
总而言之,我们有非常简单的头脑测试,但运行它们很多,并针对生产代码和数据。对我们来说,这大大减少了我们做出的相当少的工作。
我使用gaeunit - http://code.google.com/p/gaeunit/ - 这可能会或可能不适合您的需求,但一旦它添加到它很容易。我还添加了一个xml输出,以便我可以将结果填充到junit分析器中,这样我的jenkins就可以在代码检查后报告没有任何事情发生。
David Robinson指开发单元测试。 如果您正在使用python查找自动化用户(生产)测试,请使用硒硒或硒webdriver(改进版本为&独立版)。
你可以用硒RC做奇迹。
Canonical最近发布的http://testutils.org/sst/ – proppy 2012-01-10 10:31:13
- 1. Google App Engine,在Appspot服务器上进行负载测试
- 2. 如何在Google App Engine上测试Django视图?
- 3. Google App Engine + GWT + Eclipse:你的单元测试在哪里?
- 4. 在iPhone上运行Google App Engine测试服务器
- 5. Google App Engine - 你如何处理DatastoreTimeoutException?
- 6. 在Google App Engine上苦于进口
- 7. 在Google App Engine上调试WebService
- 8. 在Python中,如何测试我是否在Google App Engine SDK中?
- 9. Google App Engine的集成测试(java)
- 10. 部署在Google App Engine上的测试服务器
- 11. 在Google App Engine上运行Boto
- 12. 在Google App Engine上运行Drools规则
- 13. Google App Engine/WSGIApplication:如何检查调试?
- 14. 在Python Google App Engine项目中使用gae-session进行的Nosegae单元测试
- 15. Google App域上的Google App Engine
- 16. 如何在Google App Engine进行身份验证
- 17. 使用谷歌App Engine进行网站负载测试
- 18. 在Google App Engine的PHP运行时环境中,如何编写单元测试?
- 19. 在Google App Engine上通过GET和POST进行烧杯会话?
- 20. 为什么在Google App Engine上运行的进程挂起?
- 21. 单元测试Google App Engine上的入站邮件服务
- 22. Google App Engine上的客户端单元测试
- 23. App Engine上的A/B测试?
- 24. 运行Google App Engine测试项目时导入错误
- 25. 如何在Windows系统上测试App Engine项目?
- 26. 如何在Google App Engine上执行异步操作?
- 27. 如何在Google App Engine上有效地对分页内容进行memcached /清除?
- 28. Google App Engine上的PHP
- 29. Google App Engine上的web.py
- 30. Google App Engine上的ServletContext
正如答案的多样性所证明的那样,这个问题应该更具体一些关于测试的类型。 – 2012-01-10 20:49:21