gpt4 book ai didi

python - 如何使 django 测试框架从实时数据库读取?

转载 作者:行者123 更新时间:2023-12-01 06:16:34 33 4
gpt4 key购买 nike

我意识到这里有一个类似的问题,但这个问题有不同的方法:我有一个 django 应用程序,它对使用 djapian 索引的数据进行查询;我想为此应用程序的搜索组件编写单元测试,显然,我需要 django 设置模块以及与事件数据库的所有连接,因此 django 提供的测试运行程序似乎很理想。 但是,django 测试框架创建了一个虚拟数据库,我不想将所有数据转储到固定装置中,然后对其进行索引(测试将永远花费 !);

我的数据不会面临风险,因为测试只会从数据库中读取,那么如何实现这一点呢? -我对整个单元测试很陌生,所以我在类似的问题中读到的编写新的测试运行程序的解决方案并没有给我一点启发,至少没有一些细节 p>

最佳答案

阅读 djapian 的测试用例时,我发现了一些非常有趣的东西:这些人所做的是使用 TestCase 类的 setUp 方法:他们创建一个对象,然后使用索引器的 update 方法,因此他们实际上拥有一个文档搜索一种编写受控查询测试的方法!出于好奇,该方法看起来像这样:

def setUp(self):
p = Person.objects.create(name="Alex")

for i in range(self.num_entries):
Entry.objects.create(author=p, title="Entry with number %s" % i, text="foobar " * i)

Entry.indexer.update()

我认为这可以,但我们必须记住我正在这里测试一个小搜索引擎,所以这个解决方案可能是简单的出路;不过,我无法提出反对意见,所以如果你们有一个答案可以帮助定义一个在 Python 中测试此类 Web 应用程序的策略,那么我们非常欢迎!

-我想我现在会满足这样的要求(我也想用完全填充的数据库来测试查询的延迟,但我想我可以稍后在 Funkload 中进行基准测试来做到这一点)

编辑:好的,为了忠实于任何感兴趣的人的解决方案,我遇到了另一个问题:xapian 索引(如评论中所述)。为了解决这个问题,我创建了一个默认测试运行程序,将生产 xapian 索引更改为测试索引(较小的索引,使用管理脚本创建)。这个运行者相当简单:

def custom_run_tests(test_labels, verbosity=1, interactive=True, extra_tests=[]):
"""Set the test indices"""
settings.CATEGORY_CLASSIFIER_DATA = settings.TEST_CLASSIFIER_DATA
return run_tests(test_labels, verbosity, interactive, extra_tests)

并且,为了使用它,我只需添加一个设置:

TEST_RUNNER = 'search.tests.custom_run_tests'

出于性能和可读性的原因,我放弃了上述方法(在设置中创建文档):为了测试数据库,我需要大量带有一些文本(一两个段落)的文档,所以我最终创建了一个固定装置为此(我使用了一个管理命令在真实数据库中创建文档,将它们序列化 - 将它们写入文件 - 然后删除它们)。所以,最后,我根本没有从实时数据库中读取数据,而是使用了用有点 hacky 的脚本和自定义运行器创建的测试装置,这并不难:)

关于python - 如何使 django 测试框架从实时数据库读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3034509/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com