Heim >Backend-Entwicklung >Python-Tutorial >Python Unittest implementiert API automatisiertes Testing_python

Python Unittest implementiert API automatisiertes Testing_python

不言
不言Original
2018-04-04 16:44:552026Durchsuche

Dieser Artikel stellt hauptsächlich die Methode von Python Unittest zur Implementierung automatisierter API-Tests vor. Sie hat einen gewissen Referenzwert.

Die Bedeutung von Projekttests für ein Projekt sollte jeder wissen Freunde, die Python schreiben, sollten automatisierte Testskripte geschrieben haben.
Seit Kurzem bin ich für die API-Tests in den Projekten des Unternehmens verantwortlich. Hier ist ein einfaches Beispiel, um die API-Tests zu regeln.

Schreiben Sie zunächst die restful API-Schnittstellendatei testpost.py, die Get-, Post- und Put-Methoden enthält

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from flask import request
from flask_restful import Resource
from flask_restful import reqparse


test_praser = reqparse.RequestParser()
test_praser.add_argument('ddos')


class TestPost(Resource):
  def post(self, PostData):
    data = request.get_json()
    user = User('wangjing')
    if data['ddos']:
     return {'hello': 'uese', "PostData": PostData, 'ddos': 'data[\'ddos\']'}
    return {'hello': 'uese', "PostData": PostData}

  def get(self, PostData):
    data = request.args
    if data and data['ddos']:
      return "hello" + PostData + data['ddos'], 200
    return {'hello': 'uese', "PostData": PostData}

  def put(self, PostData):
    data = test_praser.parse_args()
    if data and data['ddos']:
      return "hello" + PostData + data['ddos'], 200
    return {'hello': 'uese', "PostData": PostData}

ps: Für den Wert von request habe ich hier drei häufig verwendete Methoden definiert:

Post-Methode: request.get_json() Beim Aufruf der API wird der Wert im JSON-Modus übergeben
Get- und Put-Methode: request.args oder reqparse.RequestParser(), beim Aufruf der API wird die Zeichenfolge

übergeben. Zweitens definieren Sie die Blueprint-Datei init.py

#!/usr/bin/env python
  # -*- coding: utf-8 -*-
  from flask import Blueprint
  from flask_restful import Api
  from testpost import TestPost

  testPostb = Blueprint('testPostb', __name__)
  api = Api(testPostb)
  api.add_resource(TestPost, &#39;/<string:PostData>/postMeth&#39;)

Dann schreiben Sie das Testskript testPostM.py


#!/usr/bin/env python
  # -*- coding: utf-8 -*-
  import unittest
  import json
  from secautoApp.api.testPostMeth import api
  from flask import url_for
  from run import app
  from secautoApp.api.testPostMeth import TestPost

  headers = {&#39;Accept&#39;: &#39;application/json&#39;,
        &#39;Content-Type&#39;: &#39;application/json&#39;
        }

  class APITestCase(unittest.TestCase):
    def setUp(self):
      # self.app = create_app(os.getenv("SECAUTOCFG") or &#39;default&#39;)
      self.app = app
      #   self.app_context = self.app.app_context()
      #   self.app_context.push()
      self.client = self.app.test_client()

    #
    # def tearDown(self):
    #   self.app_context.pop()

    def test_post(self):
      # with app.test_request_context():

      response = self.client.get(api.url_for(TestPost, PostData=&#39;adb&#39;, ddos=&#39;123&#39;))
      self.assertTrue(response.status_code == 200)

      response = self.client.get(url_for(&#39;testPostb.testpost&#39;, PostData=&#39;adb&#39;, ddos=&#39;123&#39;))
      self.assertTrue(response.status_code == 200)  
      self.assertTrue(json.loads(response.data)[&#39;PostData&#39;] ==&#39;adb&#39;)

      response = self.client.post(url_for(&#39;testPostb.testpost&#39;, PostData=&#39;adb&#39;), headers=headers,
                    data=json.dumps({"ddos": &#39;123&#39;}))
      print json.loads(response.data)
      self.assertTrue(response.status_code == 200)

      response = self.client.put(url_for(&#39;testPostb.testpost&#39;, PostData=&#39;adb&#39;, ddos=&#39;123&#39;))
      self.assertTrue(json.loads(response.data) == &#39;helloadb123&#39;)

      response = self.client.put(url_for(&#39;testPostb.testpost&#39;, PostData=&#39;adb&#39;))
      print json.loads(response.data)[&#39;PostData&#39;]
      self.assertTrue(response.status_code == 200)

ps: Die aufgerufene API-URL verwendet hauptsächlich api.url_for von flask_restful oder url_for von flask. Lassen Sie mich über die spezifische Verwendung dieser beiden Methoden sprechen

Beschreibung von api .url_for von flask_restful

api.url_for(TestPost,PostData='adb'), TestPost bezieht sich hier auf die Klasse, die in der Restful-API-Schnittstellendatei definiert ist, da wir uns in der API befinden Im Blueprint, Es wurde durch Hinzufügen einer Klasse über api.add_resource(TestPost, '//postMeth')

Anweisungen zur Verwendung von flask's url_for

definiert

url_for('testPostb.testpost', PostData='adb', ddos='123'), 'testPostb.testpost' In der Zeichenfolge bezieht sich
testPostb auf den Namen des Blueprints. testPostb = testPostb in Blueprint('testPostb', name) in Blueprint('testPostb', name).
testpost bezieht sich auf den Endpunktnamen von endpoit unter dem Blueprint. In flask_restful bezieht er sich auf den Kleinbuchstaben des Klassennamens TestPost in api.add_resource(TestPost, '//postMeth')

Testskript starten:

C:\secauto3>python run.py test
test_post (testPostM.APITestCase) ... ok

----------------------------------------------------------------------
Ran 1 test in 0.056s

OK

Kleine Zusammenfassung: Es besteht eine entsprechende Beziehung zwischen dem in url_for übergebenen Wert und der Wert in request. Das letzte ist die Endpunktmethode in flask_restful, die der Kleinbuchstabe des Klassennamens in api.add_resource sein muss.

Verwandte Empfehlungen:

Wie Python Unittest verwendet, um die Schnittstelle_python zu testen

python+requests+unittest API-Schnittstellentestprobleme

Das obige ist der detaillierte Inhalt vonPython Unittest implementiert API automatisiertes Testing_python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn