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

4
我正在Google应用引擎上创建一个应用程序,想知道是否有使用Python进行自动化测试的方法。
谢谢!

2
正如答案的多样性所证明的那样,这个问题应该更具体地说明测试的类型。 - David Robinson
3个回答

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更新,production从rc更新。rc每天由我们的运营人员部署到rc.app.appspot.com。production每周部署到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('...')

主机名和凭据有默认值,但可以通过环境变量进行覆盖。我们曾经修复的大多数错误都有回归测试。我们使用Makefile来驱动整个流程。例如:

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。如果失败,make将停止执行。如果没有失败,则部署“生产版本”。
我们还在源代码检入时运行必需的pep8pyflakespylint检查。
总的来说,我们的测试非常简单,但是我们会反复运行它们,并针对生产代码和数据进行测试。对我们来说,这可以捕获我们大部分的错误,而且付出的努力相对较少。

0

我使用gaeunit - http://code.google.com/p/gaeunit/ - 它可能或可能不适合您的需求,但一旦它开始工作,添加测试用例就非常容易。我还添加了一个XML输出,以便我可以将结果传回JUnit分析器,以便我的Jenkins在代码检查后报告没有任何问题。


0

David Robinson 提到了开发单元测试。 如果你正在寻找使用 python 进行自动化用户(生产)测试,那么选择 selenium RC 或 selenium webdriver(改进版本和独立版)。

使用 selenium RC 可以做很多事情。

参考 http://seleniumhq.org/projects/webdriver/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接