Heim  >  Artikel  >  Web-Frontend  >  So implementieren Sie automatisierte Python-API-Tests

So implementieren Sie automatisierte Python-API-Tests

php中世界最好的语言
php中世界最好的语言Original
2018-04-09 16:44:012006Durchsuche

Dieses Mal zeige ich Ihnen, wie Sie die API-Automatisierung von Python implementieren. Was sind die Vorsichtsmaßnahmen für die API-Automatisierung von Python? Hier sind praktische Fälle.

Jeder sollte wissen, wie wichtig Projekttests für ein Projekt sind. 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 die Methoden get, post und put 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 drei häufig verwendete Werte definiert hier eine Methode:

Post-Methode: request.get_json(), beim Aufruf der API wird der Wert im JSON-Modus übergeben

Get- und Put-Methoden: request.args oder reqparse.RequestParser( ), Aufruf der API Wenn die Zeichenfolge

übergeben wird, definieren Sie zweitens die Blueprint-Datei init.py

und schreiben Sie dann das Testskript testPostM. 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, '/<string:PostData>/postMeth')

ps: Die aufgerufene API-URL verwendet hauptsächlich api.url_for von flask_restful oder url_for von flask api.url_for Beschreibung
#!/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 = {'Accept': 'application/json',
    'Content-Type': 'application/json'
    }
 class APITestCase(unittest.TestCase):
  def setUp(self):
   # self.app = create_app(os.getenv("SECAUTOCFG") or 'default')
   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='adb', ddos='123'))
   self.assertTrue(response.status_code == 200)
   response = self.client.get(url_for('testPostb.testpost', PostData='adb', ddos='123'))
   self.assertTrue(response.status_code == 200) 
   self.assertTrue(json.loads(response.data)['PostData'] =='adb')
   response = self.client.post(url_for('testPostb.testpost', PostData='adb'), headers=headers,
          data=json.dumps({"ddos": '123'}))
   print json.loads(response.data)
   self.assertTrue(response.status_code == 200)
   response = self.client.put(url_for('testPostb.testpost', PostData='adb', ddos='123'))
   self.assertTrue(json.loads(response.data) == 'helloadb123')
   response = self.client.put(url_for('testPostb.testpost', PostData='adb'))
   print json.loads(response.data)['PostData']
   self.assertTrue(response.status_code == 200)

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

Verwendungsanweisungen für flask's url_for

definiert url_for('testPostb.testpost', PostData='adb', ddos='123'), in der Zeichenfolge 'testPostb.testpost' bezieht sich testPostb auf den Namen des Blueprints, d. h. 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')

Starten Sie das Testskript:

Kleine Zusammenfassung:

Der von url_for übergebene Wert hat eine entsprechende Beziehung zum Wert in der Anfrage. Das letzte ist die Endpunktmethode in flask_restful, die muss sei die Klasse in api.add_resource Kleingeschriebener Vorname.

C:\secauto3>python run.py test
test_post (testPostM.APITestCase) ... ok
----------------------------------------------------------------------
Ran 1 test in 0.056s
OK
Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website.

Empfohlene Lektüre:

Detaillierte Erläuterung der Schritte zur Verwendung der Unittest-Testschnittstelle in Python

Wie Python die Anzahl der Buchstaben zählt erscheinen

Das obige ist der detaillierte Inhalt vonSo implementieren Sie automatisierte Python-API-Tests. 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