146 lines
3.7 KiB
Markdown
146 lines
3.7 KiB
Markdown
|
|
# Tests de ScoDoc
|
|
|
|
ScoDoc est basé sur Flask, se référer à la doc de Flask pour aller plus loin.
|
|
|
|
On travaille toujours en tant qu'utilisateur `scodoc`, dans le *virtualenv*:
|
|
|
|
```bash
|
|
su scodoc # si nécessaire
|
|
cd /opt/scodoc
|
|
source venv/bin/activate
|
|
```
|
|
|
|
## Lancement interactif
|
|
|
|
```bash
|
|
flask shell
|
|
```
|
|
|
|
Pour mémoire, un certains nombre de commandes en ligne facilitant la gestion de
|
|
ScoDoc sont disponibles, afficher la liste avec
|
|
|
|
```bash
|
|
flask --help
|
|
```
|
|
|
|
## Tests unitaires
|
|
|
|
On utilise `pytest`. Ainsi, la commande
|
|
|
|
```bash
|
|
pytest tests/unit
|
|
```
|
|
|
|
lance l'ensemble des tests unitaires.
|
|
|
|
Ces tests sont lancés automatiquement avant la création du paquet Debian
|
|
(release).
|
|
|
|
Rappelons quelques options utiles de `pytest`: `-x` permet de s'arrêter sur la
|
|
première erreur, et `--pdb` lance directement le debugger sur l'erreur.
|
|
Ainsi,
|
|
|
|
```bash
|
|
pytest --pdb -x tests/api/test_api_departements.py
|
|
```
|
|
|
|
lancera un test en mode "interactif", utile pour les mises au point.
|
|
|
|
Et pour lancer un seul test:
|
|
|
|
```bash
|
|
pytest -x --pdb tests/unit/test_but_cursus.py::test_refcomp_niveaux_info
|
|
```
|
|
|
|
### Création de la base de données pour les tests unitaires
|
|
|
|
```bash
|
|
./tools/create_database.sh SCODOC_TEST
|
|
export FLASK_ENV=test
|
|
flask db upgrade
|
|
```
|
|
|
|
## Tests Selenium (web)
|
|
|
|
*Ce projet est abandonné pour l'instant* (Aurélien, JMP).
|
|
|
|
## Portail pour tests
|
|
|
|
Un faux portail "apogée" pour inscrire de faux étudiants avec photos. Utile pour tester les fonctions d'inscription/synchronisation, et aussi pour peupler rapidement une base de donnée.
|
|
|
|
Le code se trouve dans `tools/fakeportal/`.
|
|
|
|
Le serveur écoute par défaut sur `tcp/8678`. Il faudra paramétrer l'URL du
|
|
"portail" dans les préférences du ScoDoc à tester, qui est en général sur le
|
|
même hôte, donc `http://localhost:8678`.
|
|
|
|
Lancement:
|
|
|
|
```bash
|
|
/opt/scodoc/tools/fakeportal/fakeportal.py
|
|
```
|
|
|
|
## Tests de l'API ScoDoc9
|
|
|
|
L'API est [documentée ici](ScoDoc9API.md).
|
|
Des tests sont disponibles sous `scodoc/tests/api`. Le mécanisme de test est un
|
|
peu différent de celui des tests unitaire: on test un *client* de l'API. Il faut
|
|
donc un serveur, tournant sur la même machine ou sur une machine distante. Ce
|
|
serveur doit avoir été configuré avec des données de test.
|
|
|
|
### TL;DR
|
|
|
|
Si votre installation de développement est bien configurée, il suffit de lancer
|
|
|
|
```bash
|
|
tools/test_api.sh
|
|
```
|
|
|
|
### Configuration du serveur pour tester l'API
|
|
|
|
1. modifier `/opt/scodoc/.env` pour indiquer
|
|
```bash
|
|
FLASK_ENV=test_api
|
|
FLASK_DEBUG=1
|
|
```
|
|
|
|
1. En tant qu'utilisateur scodoc, lancer:
|
|
```bash
|
|
tools/create_database.sh --drop SCODOC_TEST_API
|
|
flask db upgrade
|
|
flask sco-db-init --erase
|
|
flask init-test-database
|
|
```
|
|
Ces commandes vont effacer la base `SCODOC_TEST_API` si elle existe, la
|
|
recréer, mettre à jour le schéma pour la dernière version de ScoDoc installée,
|
|
l'initialiser et la peupler de données fictives pour les tests.
|
|
|
|
1. Relancer ScoDoc:
|
|
```bash
|
|
flask run --host 0.0.0.0 --debug
|
|
```
|
|
|
|
### Configuration du client de test API
|
|
|
|
1. Copier le fichier `scodoc/tests/api/dotenv_exemple` dans
|
|
`scodoc/tests/api/.env`, et éditer ce fichier `.env`pour y configurer votre
|
|
*client* de test (ne pas confondre avec `scodoc/.env` qui est la config de
|
|
votre serveur).
|
|
Normalement, il est suffisant d'indiquer l'URL de votre serveur. Si le
|
|
client de test est sur la même machine que le serveur ScoDoc, c'est simplement:
|
|
|
|
```bash
|
|
SCODOC_URL="http://localhost:5000/"
|
|
```
|
|
|
|
### Lancement des tests de l'API
|
|
|
|
Le serveur scodoc étant lancé comme expliqué ci-dessus, on utilise `pytest` sur
|
|
le client (qui peut être un autre shell de la même machine, bien sûr).
|
|
|
|
```bash
|
|
cd /opt/scodoc/
|
|
pytest tests/api/test_api_xxx.py # remplacer xxx par votre test
|
|
```
|