How to run tests in django using database with data?
Asked Answered
O

1

6

I want to test my views using data from postgres localhost database (with already loaded data). I'm using tox with pytest and pytest-django.

My question: How to set up / connect to local database to get all the data model schema and data itself? Or maybe it is better to use factory_boy? Or to load whole data from .sql script (if yes, how)?

Example of my test:

def test_foo_view(custom_client_login):
    response = custom_client_login.get('/foo/bar/123/')

    assert response.status_code == 200
    assert 'Transaction no. 123' in response.content

But instead of getting status code 200 I get 404, which points that no data is in test database. But when I lunch runserver and go to that view ('localhost:8000/foo/bar/123/') I will get status 200 and html webpage with some data.

Please help!


I'm using:

  • Django==1.7.11
  • pytest==3.0.6
  • pytest-django==3.1.2
  • tox==2.6.0
Ocreate answered 2/3, 2017 at 15:16 Comment(7)
Use the test runner setup (def setUp) and create a site to use within your view testTourism
@Tourism could you please elaborate a little bit more about your answer? isn't def setUp using with unittest?Ocreate
docs.djangoproject.com/en/1.10/topics/testing/overview have a look at thatTourism
@Tourism I see. But I wanted to avoid creating objects (and creating whole database structure) and just use my local db. Any thoughts?Ocreate
maybe you are looking for fixtures then... django-testing-docs.readthedocs.io/en/latest/fixtures.htmlTourism
Possible duplicate of Django test to use existing databaseExothermic
@Exothermic Thanks for pointing that out. Your link gave another two answers How to run django unit-tests on production database? and How can I specify a database for Django Tests to use instead of having it build it everytime?. I thinkt that i would need to mix those answers and find a way to implement it using pytest with tox.Ocreate
O
5

Just found a way! It was simpler then I thought! Without writing any custom TestRunners etc.

The answer is in pytest-django docs in Chapter 5 -> Examples -> Use a read only database.

Check out other examples, which are really handy in such situations.

Thanks!

Ocreate answered 3/3, 2017 at 13:33 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.