Skip to content

Instantly share code, notes, and snippets.

@malexandre
Last active August 29, 2015 13:59
Show Gist options
  • Save malexandre/10994396 to your computer and use it in GitHub Desktop.
Save malexandre/10994396 to your computer and use it in GitHub Desktop.
Exécution des tests en Python

Pour exécuter des tests en Python à partir de la console, il faut utiliser nosetests. Nosetests est dispo sur les dépots Python avec son plugins Google AppEngine :

sudo pip install nose nosegae

Il faut ensuite appeler la bonne ligne de commande. Pour se faire, voici une fonction bash à mettre dans son ~/.bashrc :

function gae-test()
{
    local project=`pwd | egrep -o "^.*app/"`
    if [[ "$project" == "" ]]; then
        project=`find -type d -name "app" | head -n1`
    fi
    nosetests --with-gae --gae-lib-root "$APPENGINE" --gae-application "$project" --without-sandbox --nologcapture -v
}

Cette fonction utilise la variable APPENGINE qui doit être exportée dans l'environnement bash (export APPENGINE=/home/user/google_appengine par exemple) qui contient le path vers le SDK Google AppEngine. Elle recherche le dossier "app" dans le path courent, et si elle ne le trouve pas, elle recherche le premier dossier "app" dans les dossiers enfants au dossier actuel. Cela permet d'exécuter la fonction n'importe où dans l'arborescence du projet, à partir du moment où l'application Google AppEngine est contenu dans un dossier "app".

Les fichiers de tests doivent suivre le model suivant :

# coding=utf-8
import webtest
import logging
from unittest import TestCase
from google.appengine.ext import testbed
from google.appengine.ext.db import BadValueError
from google.appengine.ext.ndb import Key

class TestManager(TestCase):
    def setUp(self):
        """
        Activate mock.
        This method is called before each tests.
        """
        logging.getLogger().setLevel(logging.CRITICAL)
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()
        self.__initDatastore()
    
    def tearDown(self):
        """
        Deactivate mock.
        This method is called after each tests.
        """
        self.testbed.deactivate()
        logging.getLogger().setLevel(logging.DEBUG)
    
    def __initDatastore(self):
        #TODO
        pass
        
    def test_get(self):
        """
        Test get
        """
        #TODO
        pass
        
    def test_put(self):
        """
        Test put
        """
        #TODO
        pass

Attention : Seul les logs de niveau "CRITICAL" apparaîtront sur la console. Tous les autres seront ignorés.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment