为ElasticSearch索引创建测试夹具的类似混合器的工具
elasticsearch-fixtures的Python项目详细描述
弹性搜索装置
这个工具的灵感来自klen's Mixer。
此工具已优化为与Django
和pytest
一起使用。
它允许您在yout elasticsearch实例中将文档添加到测试索引中 当你运行单元测试时。
有了elasticsearch_fixtures
您可以这样做:
fromelasticsearch_fixtures.es_mixerimportESMixeres_mixer=ESMixer(host='http://localhost:9200/')deftest_something():doc1=es_mixer.blend('indexname',id=1,title='test')assertdoc1['source']['title']=='test'
注意:如果您提供了一个^ {CD4>},一个具有{{CD4}}的文档已经存在,那么 文档不会被更新,但会被完全替换。
您也可以在不提供id
的情况下创建文档。ElasticSearch将
自动创建id
:
deftest_something():doc1=es_mixer.blend('indexname',title='test')print(doc1['id'])
,您可以更新已经在索引中的现有文档:
deftest_something():es_mixer.blend('indexname',id=1,title='test')doc1=es_mixer.update('indexname',id=1,title='new title')assertdoc1['source']['title']=='new_title'
警告:我们不是专家。我们只是开始在附近使用es 2019年6月,我们遇到的第一个问题是,我们不知道如何 为django视图和graphene解析器正确编写unittests 功能。可能有更好的方法来做到这一点。如果你知道,我们 很想听听(打开一个话题告诉我们!).
安装
pip install elasticsearch-fixtures
配置
为了确保您的测试在开始时擦除索引
同样在每次测试之后,创建以下conftest.py
:
"""Global settings for pytest."""importpytestfromdjango.confimportsettingsfromelasticsearch_fixtures.es_mixerimportESMixeres_mixer=ESMixer(host=settings.ELASTICSEARCH_HOST)index=settings.ELASTICSEARCH_INDEX@pytest.fixture(scope='session',autouse=True)defsetup_elasticsearch():es_mixer.wipe_index(index)@pytest.fixture(autouse=True)defcleanup_elasticsearch():yieldes_mixer.wipe_index(index)
如您所见,在本例中,我们还使用了一个django设置,名为
ELASTICSEARCH_HOST
(带有尾随斜杠)和ELASTICSEARCH_INDEX
。的
当然,你可以随意命名自己的设置。