一尘不染

在Django应用中进行单元测试elasticsearch

elasticsearch

我有一个使用elasticsearch的Django应用。我想拥有100%的代码测试覆盖率,因此我需要测试对Elasticsearch(本地“安装”)的API调用。

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

IMO最好模拟elasticsearch并仅检查python代码(测试是否使用正确的参数调用了所有内容)。


阅读 199

收藏
2020-06-22

共1个答案

一尘不染

您可以编写一些实际上正在调用elasticsearch的基本集成测试,然后用单元测试介绍视图,模型等内部其余的相关方法。这样,您可以测试所有内容,而不必模拟elasticsearch,并发现可能不会出现的错误/行为。

我们正在使用django haystack(https://github.com/django-haystack/django-
haystack),它为搜索后端提供了统一的api,其中包括elasticsearch以及以下管理命令:

  • build_solr_schema
  • clear_index
  • haystack_info
  • rebuild_index
  • update_index

您可以将以上内容包装在基本集成测试类中,以管理搜索索引。例如:

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
2020-06-22