Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django应用程序内部的单元测试弹性搜索_Python_Django_Unit Testing_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Python,Django,Unit Testing,elasticsearch" /> elasticsearch,Python,Django,Unit Testing,elasticsearch" />

Python Django应用程序内部的单元测试弹性搜索

Python Django应用程序内部的单元测试弹性搜索,python,django,unit-testing,elasticsearch,Python,Django,Unit Testing,elasticsearch,我有一个django应用程序,使用弹性搜索。我希望有100%的代码测试覆盖率,所以我需要测试对elasticsearch(在本地“安装”)的API调用 所以我的问题是:是模拟整个elasticsearch更好,还是应该运行elasticserver并检查结果 在我看来,最好是模拟elasticsearch,只检查python代码(测试是否使用正确的参数调用了所有内容)。您可以编写一些基本的集成测试,实际调用elasticsearch,然后使用单元测试覆盖视图、模型等中剩余的相关方法。通过这种方式

我有一个django应用程序,使用弹性搜索。我希望有100%的代码测试覆盖率,所以我需要测试对elasticsearch(在本地“安装”)的API调用

所以我的问题是:是模拟整个elasticsearch更好,还是应该运行elasticserver并检查结果


在我看来,最好是模拟elasticsearch,只检查python代码(测试是否使用正确的参数调用了所有内容)。

您可以编写一些基本的集成测试,实际调用elasticsearch,然后使用单元测试覆盖视图、模型等中剩余的相关方法。通过这种方式,您可以在不必模仿elasticsearch的情况下测试所有内容,并发现可能的错误/行为,否则您将无法发现这些错误/行为

我们正在使用django haystack(),它为搜索后端提供了统一的api,包括elasticsearch和以下管理命令:

  • 构建解决方案
  • 清除索引
  • 干草堆信息
  • 重建索引
  • 更新索引
您可以将上述内容封装在基本集成测试类中,以管理搜索索引。例如:

from django.core.management import call_command
from django.test import TestCase
from model_mommy import mommy


class IntegrationTestCase(TestCase):
    def rebuild_index(self):
        call_command('rebuild_index', verbosity=0, interactive=False)

class IntegrationTestUsers(IntegrationTestCase):
    def test_search_users_in_elasticsearch(self):
        user = mommy.make(User, first_name='John', last_name='Smith')
        user = mommy.make(User, first_name='Andy', last_name='Smith')
        user = mommy.make(User, first_name='Jane', last_name='Smith')
        self.rebuild_index()

        # Search api and verify results e.g. /api/users/?last_name=smith

我个人的观点是,称为真正的Elasticsearch的测试将比模拟它的测试产生更多的价值和信心。在Django中设置测试基础设施是非常可行的,这样可以隔离这些测试:

来自example.elasticsearch导入搜索\u媒体
def索引测试装置(es、索引名称、数据):
created=es.index(index=index\u name,body=data)
断言已创建[“结果”]=“已创建”
es.index.refresh(索引名称)
类TestElasticsearch:
def测试_elasticsearch(自身、elasticsearch):
索引测试夹具(
弹性搜索,
“电影”,
{
“鼻涕虫”:“第五集”,
“标题”:“星球大战:第五集-帝国反击战”,
“描述”:“叛军在冰星球霍斯被帝国残酷制服后,卢克·天行者开始与尤达一起进行绝地训练,而他的朋友则被达斯·维德和一位名为波巴·费特的赏金猎人在银河系各处追捕。”,
},
)
结果=搜索媒体(“星球大战”)
断言结果[0][“slug”]=“第五集”

我在我的个人博客中写了一些关于如何设置所有配置的内容(
docker compose
pytest
elasticsearch
,等等)。如果有帮助的话,还有一个工作示例演示。

我认为这是一个非常重要的问题,我自己也在努力解决这个问题,因此我建议您将问题改写,以避免将其关闭为“主要基于意见”。将其改写为删除“IMO”部分……明确删除“你们认为什么?”部分:)有时问“什么更好”(而不是“如何做”)的问题被视为“主要基于观点”,这就是我担心这个问题也会被关闭的原因。如果我对你的观点不感兴趣,我不会问它。。。但我明白你想说的。我去掉了最后一部分。我也在reddit上问了这个问题,让我们看看ppl会说什么。。。