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, '/<string:PostData>/postMeth')
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 = {'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)
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
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!