खोज…


हमारे हैलो वर्ल्ड ऐप का परीक्षण

परिचय

इस न्यूनतम उदाहरण में, 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


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow