Python 如何在谷歌应用程序引擎上进行自动测试?
我正在Google app engine上创建一个应用程序,我想知道是否有办法用python进行自动测试Python 如何在谷歌应用程序引擎上进行自动测试?,python,google-app-engine,Python,Google App Engine,我正在Google app engine上创建一个应用程序,我想知道是否有办法用python进行自动测试 谢谢 我使用gaeunit——它可能适合也可能不适合您的需要,但一旦它开始使用,就很容易添加到。我还添加了一个xml输出,这样我就可以将结果塞回junit分析器,这样我的jenkins就可以在代码签入后报告没有任何问题。David Robinson提到了开发单元测试。 如果您希望使用python进行自动化用户(生产)测试,请选择selenium rc或selenium webdriver(改
谢谢 我使用gaeunit——它可能适合也可能不适合您的需要,但一旦它开始使用,就很容易添加到。我还添加了一个xml输出,这样我就可以将结果塞回junit分析器,这样我的jenkins就可以在代码签入后报告没有任何问题。David Robinson提到了开发单元测试。 如果您希望使用python进行自动化用户(生产)测试,请选择selenium rc或selenium webdriver(改进版和独立版) 你可以用selenium RC创造奇迹
请参阅我们通常不会进行太多测试。我们曾经有一个“80%测试覆盖率”的规则,但发现这并不能让我们更好更快。我们使用的大多数代码和数据结构都是防御性设计的,所以很少有无法挽回的伤害。我们的用户更喜欢快速的周转时间,而不是100%的正常运行时间 我们有两个应用程序设置:my
app.appspot.com
和myapp test.appspot.com
。整个代码库的设计确保了app test.appspot.com
不会改变外部系统中的状态
偶尔我们会将数据从app.appspot.com
复制到app test.appspot.com
。它可能会变得混乱,因为数据存储的id生成计数器不会得到更新,但它工作得足够好
我们在这两个系统上开发。前端开发主要在app.appspot.com
上完成,后端实验在apptest.appspot.com
上完成
我们有三个分支:master、rc和production.rc由master更新,production由rc更新。rc由运营部门或他们每天部署到rc.app.appspot.com。每周将生产部署到production.app.appspot.com(也可以通过其他应用名称访问)
开发人员通常使用dev-whoami
.app.appspot.com进行实验。我们很少使用开发服务器,因为我们需要从数据存储中获取大量数据
现在来看测试:我们主要使用验收测试。我们有一个称为restest\u 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('...')
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
主机名和凭据有默认值,但可以被环境变量覆盖。我们修复的大多数错误都有回归测试。我们使用Makefile
s来驱动整个过程。例如:
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存储库进行,如下所示:
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('...')
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上标记有当前版本的版本。然后对这个新部署的版本运行restest.py
。出现故障时,mmake
停止执行。如果没有出现故障,则部署“生产版本”
我们还运行mandantory,并检查源代码签入
总而言之,我们有非常简单的测试,但要针对生产代码和数据运行很多测试。对我们来说,这捕获了我们所犯的大部分错误,而我们所做的努力相对较少。答案的多样性证明,这个问题应该更具体地说明测试类型。