Flask
परिक्षण
खोज…
हमारे हैलो वर्ल्ड ऐप का परीक्षण
परिचय
इस न्यूनतम उदाहरण में, pytest
का उपयोग pytest
हम परीक्षण करने जा रहे हैं कि वास्तव में हमारा हैलो वर्ल्ड ऐप "Hello, World!" 200 का HTTP स्थिति कोड ठीक है, जब यूआरएल पर GET अनुरोध के साथ मारा के साथ /
सबसे पहले अपने virtualenv में pytest
इंस्टॉल करें
pip install pytest
और सिर्फ संदर्भ के लिए, यह हमारा हैलो वर्ल्ड ऐप है:
# hello.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, World!'
परीक्षण को परिभाषित करना
हमारे hello.py
, हम test_hello.py
नामक एक परीक्षण मॉड्यूल को परिभाषित करते हैं जो py.test
द्वारा खोजा जा रहा है
# test_hello.py
from hello import app
def test_hello():
response = app.test_client().get('/')
assert response.status_code == 200
assert response.data == b'Hello, World!'
बस इस बिंदु पर, हमारी परियोजना संरचना tree
कमांड के साथ प्राप्त की गई है:
.
├── hello.py
└── test_hello.py
परीक्षण चल रहा है
अब हम इस परीक्षण को py.test
कमांड से चला सकते हैं जो स्वचालित रूप से हमारे test_hello.py
और इसके अंदर परीक्षण फ़ंक्शन की खोज करेगा
$ py.test
आपको कुछ आउटपुट और एक संकेत देखना चाहिए कि 1 परीक्षा पास हो गई है, जैसे
=== test session starts ===
collected 1 items
test_hello.py .
=== 1 passed in 0.13 seconds ===
फ्लास्क में लागू JSON API का परीक्षण करना
यह उदाहरण मानता है कि आप pytest का उपयोग करके फ्लास्क ऐप का परीक्षण करना जानते हैं
नीचे एक API है जो पूर्णांक मानों के साथ JSON इनपुट लेता है a
और b
उदा {"a": 1, "b": 2}
, उन्हें जोड़ता है और JSON प्रतिक्रिया में a a + b
योग देता है जैसे {"sum": 3}
।
# hello_add.py
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/add', methods=['POST'])
def add():
data = request.get_json()
return jsonify({'sum': data['a'] + data['b']})
इस एपीआई का परीक्षण सबसे pytest
हम इसे pytest
साथ टेस्ट कर सकते हैं
# test_hello_add.py
from hello_add import app
from flask import json
def test_add():
response = app.test_client().post(
'/add',
data=json.dumps({'a': 1, 'b': 2}),
content_type='application/json',
)
data = json.loads(response.get_data(as_text=True))
assert response.status_code == 200
assert data['sum'] == 3
अब py.test
कमांड से टेस्ट py.test
।
फ्लास्क-परीक्षण का उपयोग करके अपने परीक्षणों में सत्र चर तक पहुंचना और हेरफेर करना
अधिकांश वेब एप्लिकेशन कुछ महत्वपूर्ण जानकारी संग्रहीत करने के लिए सत्र ऑब्जेक्ट का उपयोग करते हैं। यह उदाहरण दिखाता है कि आप फ्लास्क-परीक्षण का उपयोग करके इस तरह के आवेदन का परीक्षण कैसे कर सकते हैं। जीथब पर पूर्ण कार्य उदाहरण भी उपलब्ध है।
इसलिए सबसे पहले अपने virtualenv में फ्लास्क-टेस्टिंग इंस्टॉल करें
pip install flask_testing
सत्र कुंजी का उपयोग करने में सक्षम होने के लिए आपको गुप्त कुंजी सेट करना होगा
app.secret_key = 'my-seCret_KEy'
आइए कल्पना करें कि आप अपने एप्लिकेशन फ़ंक्शन में हैं जो इस तरह से सत्र चर में कुछ डेटा संग्रहीत करने की आवश्यकता है
@app.route('/getSessionVar', methods=['GET', 'POST'])
def getSessionVariable():
if 'GET' == request.method:
session['sessionVar'] = 'hello'
elif 'POST' == request.method:
session['sessionVar'] = 'hi'
else:
session['sessionVar'] = 'error'
return 'ok'
इस फ़ंक्शन का परीक्षण करने के लिए आप flask_testing आयात कर सकते हैं और अपने परीक्षण वर्ग को flask_testing.TestCase इनहेरिट कर सकते हैं। सभी आवश्यक पुस्तकालयों को भी आयात करें
import flask
import unittest
import flask_testing
from myapp.run import app
class TestMyApp(flask_testing.TestCase):
परीक्षण शुरू करने से पहले बहुत महत्वपूर्ण है कि फ़ंक्शन create_app को लागू करना है अन्यथा कोई अपवाद नहीं होगा।
def create_app(self):
return app
परीक्षण करने के लिए आपका आवेदन काम कर रहा है जैसा कि आप चाहते हैं कि आपके पास कुछ संभावनाएं हैं। यदि आप केवल आश्वस्त करना चाहते हैं कि आपका फ़ंक्शन सत्र चर में विशेष मान सेट कर रहा है, तो आप केवल संदर्भ को आसपास रख सकते हैं और फ्लास्क को एक्सेस कर सकते हैं।
def testSession1(self):
with app.test_client() as lTestClient:
lResp= lTestClient.get('/getSessionVar')
self.assertEqual(lResp.status_code, 200)
self.assertEqual(flask.session['sessionVar'], 'hello')
एक और उपयोगी चाल GET और POST विधियों के बीच अंतर करना है जैसे कि अगले परीक्षण फ़ंक्शन में
def testSession2(self):
with app.test_client() as lTestClient:
lResp= lTestClient.post('/getSessionVar')
self.assertEqual(lResp.status_code, 200)
self.assertEqual(flask.session['sessionVar'], 'hi')
अब कल्पना करें कि आपका फ़ंक्शन सत्र चर को सेट करने की अपेक्षा करता है और इस तरह के विशेष मूल्यों पर अलग-अलग प्रतिक्रिया करता है
@app.route('/changeSessionVar')
def changeSessionVariable():
if session['existingSessionVar'] != 'hello':
raise Exception('unexpected session value of existingSessionVar!')
session['existingSessionVar'] = 'hello world'
return 'ok'
इस फ़ंक्शन का परीक्षण करने के लिए आपको तथाकथित सत्र लेनदेन का उपयोग करना होगा और परीक्षण क्लाइंट के संदर्भ में सत्र को खोलना होगा। यह फ़ंक्शन फ्लास्क 0.8 के बाद से उपलब्ध है
def testSession3(self):
with app.test_client() as lTestClient:
#keep the session
with lTestClient.session_transaction() as lSess:
lSess['existingSessionVar'] = 'hello'
#here the session is stored
lResp = lTestClient.get('/changeSessionVar')
self.assertEqual(lResp.status_code, 200)
self.assertEqual(flask.session['existingSessionVar'], 'hello world')
परीक्षण चलाना हमेशा की तरह एकतरफा है
if __name__ == "__main__":
unittest.main()
और कमांड लाइन में
python tests/test_myapp.py
अपने परीक्षणों को चलाने का एक और अच्छा तरीका यह है कि आप इस तरह से सबसे बेहतर डिस्कवरी का उपयोग करें:
python -m unittest discover -s tests