0

テスト駆動開発を使用して、アプリ エンジンで Python アプリケーションを開発しています。私が作成したテストの 1 つは、ローカル サーバーに対して 2 つの HTTP 要求を行います (アプリケーションの通常の動作をシミュレートします)。最初のリクエストはデータベース エンティティを生成し、サーバー上で割り当てた ID を返します。2 番目のリクエストは取得した ID を他のデータと共に送信して、最初のレコードを更新します。私の問題は、2 番目の要求で --high_replication (高レプリケーション データストアのシミュレーション) を使用してサーバーを実行しようとすると、サーバーがまだデータストアで ID を見つけられないことです。( --high_replication がなければ動作します)。各リクエスト間にスリープを追加することで、これを回避する方法を見つけましたが、もっと良い方法があると確信しています。

情報やヘルプは非常に感謝しています。

より多くの情報を提供するために、これはテストの一部です:

response = self.sendPing()
response = self.updatePing(response['response'])
self.assertEquals(response['response'], 'OK')

これに対して私が見つけた回避策は次のとおりです。

response = self.sendPing()
time.sleep(1)
response = self.updatePing(response['response'])
self.assertEquals(response['response'], 'OK')

リクエストの間に1秒間スリープすると、良い結果が得られます

コドコッド

4

2 に答える 2

0

When you use --high_replication, the datastore simulates eventual consistency behavior.

As Sologoub mentioned, you can make proper fully-consistent datastore calls to get proper reads.

Another option is to force the dev_appserver datastore to behave in a fully consistent manner. You might want to use this to simplify certain tests, but keep in mind that it's not simulating real world consistency behavior.

See the documentation: https://developers.google.com/appengine/docs/python/tools/localunittesting#Writing_HRD_Datastore_Tests

You want to set PseudoRandomHRConsistencyPolicy to 100

于 2012-12-27T00:43:12.723 に答える
0

あなたが提供したコードは、データのクエリ方法についてあまり教えてくれません。

純粋に理論的な観点から、ここにはいくつかのオプションがあります。

  1. 作成されたエンティティのキ​​ーを使用し、応答でキーを返し、そのキーを使用してレコードを取得します。結果整合性は、キーによる取得には適用されません。
  2. 名前付きキーを使用します。この質問の回答を参照してください
  3. 祖先クエリを使用します。それらは常に一貫しています。
于 2012-12-26T05:35:35.753 に答える