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.