我有一个应用程序(google app engine + 高复制数据存储)直到现在都没有使用最终一致性(高复制)并且我的所有测试都运行良好。
现在,对于高复制的本地测试,一旦我转向最终一致性,它们就会开始失败。我该如何防止呢?或者我如何测试那部分? 我需要它来进行 x 实体交易。
我正在使用类似于 https://developers.google.com/appengine/docs/python/tools/localunittesting#Writing_HRD_Datastore_Tests 的东西
编辑:
我需要正确测试代码。我遇到的问题是测试部分。任何人如何测试最终一致性?
编辑 1: 我在上面的链接示例中使用 probability=100% 暂时解决了这个问题。但欢迎提出想法。
最佳答案
修复失败。
由于您没有代码并且非常模糊,因此很难回答您的问题。但本质上,您的应用程序代码或您的测试没有考虑最终一致性(即,查询可能不会返回刚刚在数据库中更新的值)。当您在数据存储中打开最终一致性时,您获得的查询结果将有所不同。
您要么需要更新代码以处理事务的最终一致性情况,要么更新测试以期望最终一致性结果。
编辑
这个问题还是太笼统了。这取决于您是在做功能测试还是系统测试。您在寻找特定的结果吗?或者只是一个 HTTP status=200?
一般而言,与所有测试一样,您需要确定什么是成功案例,什么是失败案例。在给定的情况下,旧数据的出现是否可以接受?在这种情况下,测试应该使用旧值或新值成功。
我建议您先考虑是要运行确定性测试还是非确定性测试。对于确定性测试,您基本上希望以概率 = 0 和概率 = 100 运行相同的测试,并确保您获得两者的正确值。
除了作为压力测试之外,我还没有想出如何以完全有用的方式编写非确定性测试。您可以验证是否满足某些要求的值,以及其他最终一致的值是否在有效范围内。这是很多工作,因为很可能你有一个值范围可能依赖于另一个值范围,并且由于你的最终输出可能包含两者,你必须验证组合是否正确 - 基本上你结束了如果您真的想验证一切是否正确,请重现您的一些应用程序逻辑。
关于python - 如何测试最终一致性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11670963/