Start and tear down test bank flask

Posted on

Question :

I’m doing a test of api, that I pass a json it validates me if everything went ok:

My base class:

# -*- coding: utf-8 -*-

import os
import unittest
from app import initialize
from mock import mock
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from app import database
os.environ = {

test_app = Flask(__name__)
database.AppRepository.db = SQLAlchemy(test_app)

class TestCase(unittest.TestCase):
    mock = mock
    user = initialize.web_app.test_client()

I believe that in this base file, it should have the functions teardown, Setup etc ..

 json_gardener = {"id": "1",
                    "name": "Jamme"}

And I have the following function that does the post in this case:

def test_post_gardener(self):
             response ='/gardeners', headers={'VALIDATION': 'XXXX'}, data=self.json_gardener)
            self.assertEqual(response.status_code, 201)

Until then everything works fine, but when I run the second time it obviously goes that the id already exists in the database and will give error.

My question to the following is there a way to upload a database to test and when it finishes running it dismount?


Answer :

According to the Flask documentation itself, there is the class tempfile that can be used for this as a database instance in the test class.

import os
import flaskr
import unittest
import tempfile

class FlaskrTestCase(unittest.TestCase):

    def setUp(self):
        self.db_fd,['DATABASE'] = tempfile.mkstemp()['TESTING'] = True =

    def tearDown(self):

    def test_empty_db(self):
        rv ='/')
        assert b'No entries here so far' in

    def login(self, username, password):
    return'/login', data=dict(
    ), follow_redirects=True)

    def logout(self):
        return'/logout', follow_redirects=True)

    def test_login_logout(self):
        rv = self.login('admin', 'default')
        assert b'You were logged in' in
        rv = self.logout()
        assert b'You were logged out' in
        rv = self.login('adminx', 'default')
        assert b'Invalid username' in
        rv = self.login('admin', 'defaultx')
        assert b'Invalid password' in

if __name__ == '__main__':

Source: link


Leave a Reply

Your email address will not be published. Required fields are marked *