2012-07-26 3 views
3

i ont une application (google moteur app + datastore haute réplication) qui n'a pas été en utilisant la cohérence éventuelle (avec réplication) jusqu'à présent et tout mon test a parfaitement fonctionné.comment tester en cas de consistance éventuelle?

maintenant

, pour les tests locaux en haute réplication, dès que je me suis déplacé à la cohérence éventuelle, ils commencent à l'échec. comment puis-je empêcher cela? ou comment puis-je tester cette partie? j'en ai besoin pour la transaction x-entity.

J'utilise quelque chose de similaire à https://developers.google.com/appengine/docs/python/tools/localunittesting#Writing_HRD_Datastore_Tests

modifier:

J'ai besoin de tester le code correctement. Le problème que j'ai est avec la partie d'essai. Comment quelqu'un peut-il tester la cohérence éventuelle?

modifier 1: nous avons temporairement résolu le problème avec l'utilisation probabilité = 100% dans l'exemple ci-dessus lié. Mais les idées sont les bienvenues.

Répondre

0

Fixer les échecs.

Puisque vous avez pas de code et sont très vagues, il est difficile de répondre à votre question. Mais pour l'essentiel, le code de votre application ou vos tests ne prennent pas en compte la cohérence éventuelle (par exemple, une requête peut ne pas retourner avec une valeur qui vient juste d'être mise à jour dans la base de données). Lorsque vous avez activé la cohérence éventuelle dans le magasin de données, les résultats de la requête que vous obtenez seront différents.

Soit vous devez mettre à jour votre code pour gérer les situations de cohérence avec les éventuelles transactions ou mettre à jour vos tests pour attendre les résultats de la cohérence à terme.

modifier

Cette question est encore trop générale. Cela dépend si vous faites, disons des tests fonctionnels ou du système. Cherchez-vous des résultats particuliers? Ou juste un statut HTTP = 200?

En général, comme tous les tests, vous avez besoin d'identifier ce qui constitue un succès et ce qui constitue un cas d'échec. Dans une situation donnée, est-il acceptable que de vieilles données apparaissent? Dans ce cas, le test doit réussir avec l'ancienne ou la nouvelle valeur.

je recommande de commencer à se demander si vous voulez effectuer des tests déterministe ou non déterministe. Pour les tests déterministes, vous voulez essentiellement passer par les mêmes tests avec probabilité = 0 et probabilité = 100, et vous assurer que vous obtenez les valeurs correctes pour les deux.

Je n'ai pas compris comment écrire des tests non-déterministe, d'une manière tout à fait utile, autres que comme un test de stress. Vous pouvez vérifier que certaines valeurs requises sont satisfaites et que d'autres valeurs cohérentes tombent dans une plage valide. Ceci est beaucoup de travail, parce que très probablement vous avez une gamme de valeurs qui peuvent dépendre d'une autre plage de valeurs, et depuis votre sortie finale peut consister en deux, vous devrez valider que les combinaisons sont correctes - essentiellement vous finissez Reproduisez une partie de votre logique d'application si vous voulez vraiment vérifier que tout est correct.

+0

@iamgopal demande comment écrire des tests pour faire face à cela, vous dites qu'il/elle doit les fixer. Ce n'est pas une réponse! – Joe

+0

@ Joe D'après ce que je comprends de sa question, il demande « je me suis tourné sur la cohérence éventuelle et mes tests ne parviennent pas, comment puis-je les faire cesser échouer? », Autrement dit, « comment puis-je écrire des applications qui fonctionnent en finale cohérence". Je ne peux pas vraiment répondre à cela sans un exemple de ce que fait son application. – dragonx

+0

@dragonx Je ne suis peut-être pas clair au début, j'ai donc mis à jour la question. Je veux réparer le TEST et non le code. Et votre solution, "mettre à jour vos tests pour attendre une cohérence éventuelle" <- Je veux savoir comment faire cela? – iamgopal

0

La situation que vous êtes face est l'un des inconvénients (ou appeler une fonction) de données avec réplication Store. Habituellement, ces situations sont abordées via la mise en cache transparente à l'aide de memcache. Si vous aviez déjà travaillé avec une architecture maître/esclave db, les décalages d'esclaves sont traités de la même manière.

Questions connexes