2012-01-10 4 views
4

Googleアプリケーションエンジンでアプリを作成していて、Pythonで自動テストを行う方法があるかどうか疑問に思っています。Google App Engineでどのように自動テストを行うのですか?

ありがとうございます!

+2

回答の多様性からもわかるように、この質問はテストの種類についてはっきりとしているはずです。 –

答えて

2

を参照してください。私たちはかつて "80%のテストカバレッジ"ルールを持っていましたが、これが私たちをより良くするか速くするわけではないことが分かった。私たちが使用するほとんどのコードとデータ構造はかなり防御的に設計されているため、元に戻すことができない害はほとんどありません。当社のユーザーは、100%の稼働時間までのターンアラウンドタイムを優先します。

私はapp.appspot.comと私のapp-test.appspot.comという2つのアプリケーションを設定しました。 app-test.appspot.comが外部システムで状態を決して変更しないように、コードベース全体が設計者です。

app.appspot.comからapp-test.appspot.comにデータをコピーすることがあります。データストアのID生成カウンタが更新されないが、十分にうまく動作するので、面倒になることがあります。

両方のシステムで開発しています。フロントエンドの開発はほとんどapp.appspot.comで行われ、バックエンドのテストはapp-test.appspot.comで行われます。

私たちは3つの枝を持っています:master、rc、production.rcはmasterとrcのproductionから更新されます。 rcは毎日rc.app.appspot.comに配備されます。プロダクションは毎週production.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は実行を停止します。障害が発生しなかった場合、「本番バージョン」が導入されます。

また、ソースコードのチェックインチェックで、pep8pyflakespylintを実行します。

私たちは非常に簡単なテストをしていますが、それらを多く、実動コードとデータに対して実行します。私たちのために、これは私たちが作るほとんどのエラーを捉えます。

0

私はgaeunit-http://code.google.com/p/gaeunit/を使用していますが、あなたのニーズに合っているかもしれないし、そうでないかもしれませんが、いったん追加するとかなり簡単になります。また、結果をjunitアナライザに戻すことができるようにxml出力を追加しました。私のジェンキンは、何も壊れていないコードチェックインの後に報告することができます。

0

David Robinsonは、開発部門のテストを指します。 Pythonを使用してユーザー(生産)の自動テストをお探しの場合は、relまたはselenium webdriver(改善版&単体)をご利用ください。

あなたはセレンRCで不思議をすることができます。

は、我々は一般的にあまりテストされていないhttp://seleniumhq.org/projects/webdriver/

+0

Canonicalが最近公開したhttp://testutils.org/sst/ – proppy

関連する問題