您如何在Google App Engine上进行自动化测试?

时间:2012-01-10 06:49:55

标签: python google-app-engine

我正在谷歌应用引擎上创建一个应用程序,我想知道是否有办法用python进行自动化测试。

谢谢!

3 个答案:

答案 0 :(得分:2)

我们通常不会测试太多。我们曾经有过“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从master获取更新,并从rc生成。 rc每天部署到rc.app.appspot.com或由他们操作。生产每周部署到production.app.appspot.com(也可以通过其他应用程序名称访问。

开发人员通常会向开发人员 - 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('...')

主机名和凭据具有默认值,但可以被环境变量覆盖。我们修复过的大多数错误都有回归测试。我们使用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 git@github.com: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停止执行。如果没有发生故障,则部署“生产版本”。

我们还对源代码签入进行了强制性pep8pyflakespylint检查。

总而言之,我们有非常简单的头脑测试,但运行它们并且反对生产代码和数据。对我们来说,这可以捕获我们犯下的大部分错误,而且相对较少。

答案 1 :(得分:0)

我使用gaeunit - http://code.google.com/p/gaeunit/ - 这可能适合您的需求,也可能不适合您的需求,但一旦开始它就很容易添加。我还添加了一个xml输出,以便我可以将结果填充到junit分析器中,这样我的jenkins可以在代码检查后报告没有任何损坏。

答案 2 :(得分:0)

David Robinson指的是开发单元测试。 如果您正在寻找使用python进行自动化用户(生产)测试,请选择selenium rc或selenium webdriver(改进版本和独立版)。

你可以用硒RC做奇迹。

请参阅http://seleniumhq.org/projects/webdriver/