3

我有一个应用程序(谷歌应用程序引擎 + 高复制数据存储),到目前为止还没有使用最终一致性(高复制),我的所有测试都运行良好。

现在,对于高复制的本地测试,一旦我转向最终一致性,它们就开始失败。我该如何防止呢?或者我如何测试那部分?我需要它来进行 x 实体交易。

我正在使用类似于https://developers.google.com/appengine/docs/python/tools/localunittesting#Writing_HRD_Datastore_Tests

编辑:

我需要正确测试代码。我遇到的问题是测试部分。任何人如何测试最终一致性?

编辑1:我暂时解决了在上面链接的示例中使用probability=100% 的问题。但想法是受欢迎的。

4

2 回答 2

0

您面临的情况是 High Replication Data Store 的缺点之一(或称其为功能)。通常这些情况是通过使用 memcache 的透明缓存来解决的。如果您之前有使用数据库主/从架构的经验,那么从属滞后以类似的方式解决。

于 2012-07-27T15:36:14.777 回答
0

修复故障。

由于您没有代码并且非常模糊,因此很难回答您的问题。但本质上,您的应用程序代码或您的测试都没有考虑最终的一致性(即,查询可能不会返回数据库中刚刚更新的值)。当您在数据存储中打开最终一致性时,您得到的查询结果会有所不同。

您要么需要更新代码以处理事务的最终一致性情况,要么更新测试以预期最终一致性结果。

编辑

这个问题还是太笼统了。这取决于你是在做功能测试还是系统测试。您是否正在寻找特定的结果?或者只是一个 HTTP 状态=200?

一般来说,像所有测试一样,您需要确定什么构成成功,什么构成失败。在给定的情况下,旧数据出现是否可以接受?在这种情况下,测试应该使用旧值或新值成功。

我建议您开始考虑是否要运行确定性或非确定性测试。对于确定性测试,您基本上希望以概率 = 0 和概率 = 100 运行相同的测试,并确保您获得两者的正确值。

除了作为压力测试之外,我还没有弄清楚如何以一种完全有用的方式编写非确定性测试。您可以验证是否满足某些要求的值,以及其他最终一致的值是否在有效范围内。这是很多工作,因为很可能您的值范围可能取决于另一个值范围,并且由于您的最终输出可能包含两者,因此您必须验证组合是否正确 - 基本上您结束了如果您真的想验证一切是否正确,请复制您的一些应用程序逻辑。

于 2012-07-26T15:01:52.017 回答