python - 如何测试最终一致性?

标签 python google-app-engine

我有一个应用程序(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/

相关文章:

java - 通过 Google App Engine servlet 上传 ZIP,并将内容保存到 Cloud Storage (Java)

python - 如何使用密码保护 Google App Engine 应用程序?

python - 如果我有起始 IP 和结束 IP,如何找到子网?

python - python类/子类继承背后的基本原理

python - 如何从 Scikit-learn 中的拟合模型获取属性列表?

google-app-engine - 将枚举传递给 python 中的 ndb.Model 字段

Python - pyparsing unicode字符

python - Windows 中 TEMP 目录的限制?

Python 语法高亮/智能感知?

java - 如何以编程方式运行应用程序引擎开发服务器(在java中)?