0

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それもうまくいきませんでした。

結論

これは私が得た限りです。テストベッドとセレン (またはセレンがアクセスするサーバー) を同じデータベースと対話させる方法に関するヒントをいただければ幸いです。

4

1 に答える 1

2

次のスニペットは、現在の SDK で正常に動作します。

    self.testbed = testbed.Testbed()
    self.testbed.setup_env(app_id='dev~foo')
    self.testbed.activate()
    self.testbed.init_datastore_v3_stub(datastore_file="/path/to/storage/datastore.db",
                                        use_sqlite=True)
    self.testbed.init_memcache_stub()

オプションで dev_appserver.py を起動し--storage_path=/path/to/storageます。

ノート:

  • setup_env(app_id=your_app_id)の前に呼び出す必要がありますactivate()。Appengineのドキュメントには、異なるシーケンスの例があります。これはおそらくドキュメントのバグです。
  • で「dev~」プレフィックスを使用する必要がありapp_idます。
于 2013-10-28T08:49:53.067 に答える