Skip to main content

Mixer-like tool to create test-fixtures for an Elasticsearch index

Project description

Elasticsearch Fixtures

This tool is heavily inspired by klen's Mixer.

This tool is optimized to be used with Django and pytest.

It allows you to add documents to a test-index in yout Elasticsearch instance when you run your unittests.

With elasticsearch_fixtures you can do something like this:

from elasticsearch_fixtures.es_mixer import ESMixer

es_mixer = ESMixer(host='http://localhost:9200/')

def test_something():
  doc1 = es_mixer.blend('indexname', id=1, title='test')
  assert doc1['source']['title'] == 'test'

Note: If you provide an id and a document with that id already exists, that document will not be updated, but fully replaced.

You can also create documents without providing an id. Elasticsearch will then auto-create an id:

def test_something():
  doc1 = es_mixer.blend('indexname', title='test')
  print(doc1['id'])

And you can update an existing document that is already in the index:

def test_something():
  es_mixer.blend('indexname', id=1, title='test')
  doc1 = es_mixer.update('indexname', id=1, title='new title')
  assert doc1['source']['title'] == 'new_title'

Big word of warning: We are no ES experts. We have only started using ES around June 2019 and one of the first problems that we had was that we did not know how to properly write unittests for our Django views and Graphene resolver functions. There are probably much better ways to do this. If you know one, we would love to hear about it (just open an issue and tell us about it!).

Installation

pip install elasticsearch-fixtures

Configuration

In order to make sure that your tests wipe the index at the very beginning and also after each test, create the following conftest.py:

"""Global settings for pytest."""
import pytest

from django.conf import settings

from elasticsearch_fixtures.es_mixer import ESMixer

es_mixer = ESMixer(host=settings.ELASTICSEARCH_HOST)
index = settings.ELASTICSEARCH_INDEX


@pytest.fixture(scope='session', autouse=True)
def setup_elasticsearch():
    es_mixer.wipe_index(index)


@pytest.fixture(autouse=True)
def cleanup_elasticsearch():
    yield
    es_mixer.wipe_index(index)

As you can see, in this example we also use a Django setting called ELASTICSEARCH_HOST (with a trailing slash) and ELASTICSEARCH_INDEX. Of course you can name your own settings however you like.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

elasticsearch-fixtures-0.1.1.tar.gz (4.1 kB view details)

Uploaded Source

Built Distribution

elasticsearch_fixtures-0.1.1-py3-none-any.whl (4.5 kB view details)

Uploaded Python 3

File details

Details for the file elasticsearch-fixtures-0.1.1.tar.gz.

File metadata

  • Download URL: elasticsearch-fixtures-0.1.1.tar.gz
  • Upload date:
  • Size: 4.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/39.2.0 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.6.5

File hashes

Hashes for elasticsearch-fixtures-0.1.1.tar.gz
Algorithm Hash digest
SHA256 85ed14d3c725b7fbd8b655425ffbefe179dc5f761d0513ea17fe4b5e3d80a45f
MD5 4c485e729498e7eb2b9a33981bdaaa86
BLAKE2b-256 c823faf424f9aed12e80f40f52a7e3af896629d1480578cf56151f25a561ce35

See more details on using hashes here.

File details

Details for the file elasticsearch_fixtures-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: elasticsearch_fixtures-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 4.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/39.2.0 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.6.5

File hashes

Hashes for elasticsearch_fixtures-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 159e6959c42812ffcb2b3918e0b6c28d905f564395c98d15ccd6f77178e9edee
MD5 b7c4f07cd73c1ba1f0a6a028473d1d6c
BLAKE2b-256 eeefe5a4ce2b670f7fd2f839b3c2a59d7a01bdfcfebe73a70c313d2fd2fb58c5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page