Das WebTest-Modul erleichtert das Schreiben von Code zum Testen von WSGI-basierten Webanwendungen.
Sie können es mit pip installieren.
sudo pip install webtest
Das folgende Beispiel zeigt eine JSON-RPC-Serverimplementierung unter Verwendung des Flaschenframeworks.
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']=='Berg':
return makeRes('OK', {'henji':'wie?'}
else:
return makeRes('OK', {'henji':'Huh?'}
if __name__=='__main__':
app.run(host=HOST, port=PORT, debug=DEBUG, reloader=True)
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':'Berg'
})
self.assertEqual(res.json['henji'], 'wie?')
def test_api_aikotoba2(self):
res = test_app.post_json('/aikotoba',{
'kotoba':'Fluss'
})
self.assertEqual(res.json['henji'], 'Huh?')
if __name__ == '__main__':
unittest.main()
python app.py
python app_test.py
Das Ergebnis wird so ausgegeben.
..
----------------------------------------------------------------------
Ran 2 tests in 0.079s
OK
Wenn die Zusicherung der UnitTest-Klasse nicht übereinstimmt, sieht die Ausgabe wie folgt aus.
.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'], 'Huh?')
AssertionError: 'Huh?' != 'Huh?'
-Huh?
? ^
+Huh?
? ^
----------------------------------------------------------------------
Ran 2 tests in 0.126s
FAILED (failures=1)
Recommended Posts