Écrire du code dans UnitTest une application Web Python

Le module WebTest facilite l'écriture de code pour tester les applications Web basées sur WSGI.

Comment installer

Vous pouvez l'installer avec pip.

sudo pip install webtest

Exemple de code

Voici un exemple d'implémentation de serveur JSON-RPC utilisant le framework de bouteille.

Côté application Web

app.py


from bottle import Bottle, HTTPResponse

HOST='localhost'
PORT=8080
DEBUG=True

app = Bottle()

def makeRes(code, data):
	data['retcode'] = code
	r = HTTPResponse(status=200, body=json.dumps(data))
	r.set_header('Content-Type', 'application/json')
	return r

@app.post('/aikotoba')
def api_aikotoba():
	o = request.json
	if o is None:
		return makeRes('ERR_PARAM', {})
	if not 'kotoba' in o:
		return makeRes('ERR_PARAM', {})
	if o['kotoba']=='Montagne':
		return makeRes('OK', {'henji':'hein?'}
	else:
		return makeRes('OK', {'henji':'Hein?'}

if __name__=='__main__':
	app.run(host=HOST, port=PORT, debug=DEBUG, reloader=True)

Unité Côté test

test_app.py


import unittest
import api 
from webtest import TestApp

os.environ['WEBTEST_TARGET_URL'] = 'http://localhost:8080'
test_app = TestApp(api.app)

class ApiTest(unittest.TestCase):
	def test_api_aikotoba1(self):
		res = test_app.post_json('/aikotoba',{
			'kotoba':'Montagne' 
		})
		self.assertEqual(res.json['henji'], 'hein?')
	def test_api_aikotoba2(self):
		res = test_app.post_json('/aikotoba',{
			'kotoba':'rivière' 
		})
		self.assertEqual(res.json['henji'], 'Hein?')

if __name__ == '__main__':
    unittest.main()

Mise en œuvre des tests

1. Démarrez le serveur de test.

python app.py

2. Exécutez UnitTest.

python app_test.py

3. Vérifiez le résultat.

Le résultat est affiché comme ceci.

..
----------------------------------------------------------------------
Ran 2 tests in 0.079s

OK

Si l'assertion de la classe UnitTest ne correspond pas, la sortie ressemblera à celle ci-dessous.

.F
======================================================================
FAIL: test_api_aikotoba2 (__main__.ApiTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_app.py", line 16, in test_api_aikotoba2
    self.assertEqual(res.json['henji'], 'Hein?')
AssertionError: 'Hein?' != 'Hein?'
-Hein?
? ^
+Hein?
? ^


----------------------------------------------------------------------
Ran 2 tests in 0.126s

FAILED (failures=1)

Recommended Posts

Écrire du code dans UnitTest une application Web Python
Je veux écrire en Python! (2) Écrivons un test
Ecrire le code de test du sélénium en python
Qiita (1) Comment écrire un nom de code
Ecrire le test dans la docstring python
N'est-il pas acceptable d'écrire du code de test?
[Python] Ce que j'ai fait pour faire un test unitaire
Étapes pour développer une application Web en Python
Pourquoi Python doit-il écrire un deux-points?
Je veux écrire dans un fichier avec Python
Réécrire le code Python2 en Python3 (2to3)
modèle de test unitaire python
Déployer des applications Web Python 3.6 / Django / Postgres sur Azure
Je veux écrire en Python! (1) Vérification du format de code
Python Ver. Présentation de WebPay avec un peu de code
(Python) Essayez de développer une application Web en utilisant Django
Étapes de l'installation de Python 3 à la création d'une application Django
[Python] Comment écrire une docstring conforme à PEP8
Déployer une application Web créée avec Streamlit sur Heroku
Comment tester unitaire une fonction contenant l'heure actuelle à l'aide de Freezegun en Python
Comment héberger le traitement du backend d'application Web en Python à l'aide d'un sous-domaine de serveur de location
Écrire en csv avec Python
Convertir le code python 3.x en python 2.x
Comment déployer une application Web créée avec Flask sur Heroku
Exemple pour mettre l'application Web Python Flask sur Azure App Service (Web App)
Comment lancer AWS Batch à partir de l'application cliente Python
Ecrire un programme python pour trouver la distance d'édition [python] [distance Levenshtein]
Comment rédiger un test de traitement utilisant BigQuery
Comment écrire une classe méta qui prend en charge à la fois python2 et python3
Ecrire une dichotomie en Python
Exécutez le code de sortie sur le serveur Web local en tant que "A, faisant semblant d'être B" en python
Ecrire un test piloté par table en C
[Python] Ecrire dans un fichier csv avec Python
Python: Introduction à Flask: création d'une application d'identification de numéro à l'aide de MNIST
Comment écrire du code pour accéder à python dashDB sur Bluemix ou local
Écrire la sortie standard dans un fichier
Code qui génère un score au hasard
Ecrire des algorithmes A * (A-star) en Python
Essayez de créer un environnement python avec Visual Studio Code et WSL
J'ai écrit le code pour écrire le code Brainf * ck en python
Ecrire un graphique à secteurs en Python
Ecrire le plugin vim en Python
Écrire une recherche de priorité en profondeur en Python
Comment faire un test unitaire Part.1 Modèle de conception pour l'introduction
J'ai écrit un script pour extraire les liens de pages Web en Python
5 façons de créer un chatbot Python
[Pytest] [mock] Les débutants en développement Web ont résumé le test unitaire et simulé en python.
Ecrire un test unitaire de langage C en Python
Ecrire un script batch avec Python3.5 ~
J'ai écrit un code pour convertir quaternion en angle de graissage de type z-y-x avec Python
J'ai créé une application Web en Python qui convertit Markdown en HTML
Jetons JavaScript et écrivons un front-end Web en Python!
Procédure de création d'un environnement virtuel Python avec VS Code sous Windows
[Python] Créez un linebot pour écrire le nom et l'âge sur l'image
Écrivez un "bot" de scraping web sans tête de base en Python avec Beautiful Soup 4