Google App Engine、Python、Selenium、Nose Tests などでヘッドレス テストをローカルで実行しようとしています。テストを実行します。
考えられる解決策の 1 つ
これは私が進歩した可能な解決策の1つですが、テストベッドで実行されているモデルと同じデータベースと対話するためにセレンを使用できる解決策を歓迎します:
実行dev_appserver
して8080
セレンをポイントすることもできますが、テストベッドのデータストアは、セレンがポイントしているサーバーとは異なります。私はdev_appserver
次のように実行してそれらを統合しようとしました:
$ dev_appserver.py --datastore_path tests/datastore --port 8080 .
そして私の単体テストではsetUp
:
self.testbed.init_datastore_v3_stub(datastore_file='tests/datastore',use_sqlite=True)
(私はuse_sqliteを設定していないのにエラーが発生したので設定しています。それdev_appserver
もsqliteを使用していると思うので、明らかに同じフォーマットを期待する必要があります)。
残念ながら、これは機能しません。データストアに (単体テストの一部として、または実行中のサーバーとして) エンティティを作成し、ファイルを削除してエンティティが消えることを確認することで、エンティティが永続的であることを確認できます。ただし、dev_appserver
エンティティを表示するために が提供するデータストア ビューアーを使用すると、単体テストで作成されたエンティティは検出されず、単体テストで実行されるコマンドは、ローカル サーバーに属するエンティティを検出しません。
可能性のある考えの 1 つはapp_id
、単体テストとサーバーの間で が異なるため、app_id
以下を使用して手動で設定したことです。
self.testbed.setup_env(app_id='foo')
私のファイルfoo
と同じ場所です。それが管理コンソールに表示されるものなので、app.yaml
試してみました。dev~foo
それもうまくいきませんでした。
結論
これは私が得た限りです。テストベッドとセレン (またはセレンがアクセスするサーバー) を同じデータベースと対話させる方法に関するヒントをいただければ幸いです。