Cet article présente principalement la méthode de python unittest pour implémenter en détail les tests automatisés de l'API. Il a une certaine valeur de référence. Les amis intéressés peuvent se référer à
L'importance des tests de projet pour un projet, tout le monde devrait le savoir. cela, les amis qui écrivent Python auraient dû écrire des scripts de test automatisés.
Récemment, je suis responsable des tests API dans les projets de l'entreprise. Voici un exemple simple pour trier les tests API.
Tout d'abord, écrivez le fichier d'interface API reposant testpost.py, qui contient les méthodes get, post et put
#!/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 :Pour la valeur de request, j'ai défini ici trois méthodes couramment utilisées :
méthode post : request.get_json(), lors de l'appel de l'API, la valeur est passée en mode json
méthode get et put : request.args ou reqparse.RequestParser(), lors de l'appel de l'API, la chaîne
est passée. Deuxièmement, définissez le fichier Blueprint 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')
Ensuite, écrivez le script de test 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 : L'URL de l'API appelée utilise principalement l'api.url_for de flask_restful, ou l'url_for de flask
la description de l'api .url_for de flask_restful
api.url_for(TestPost,PostData='adb'), TestPost fait ici référence à la classe définie dans le fichier d'interface api restful, car nous sommes dans l'api dans le plan , il a été défini en ajoutant une classe via api.add_resource(TestPost, '//postMeth')
Instructions d'utilisation de l'url_for de flask
testpost fait référence au nom du point de terminaison sous le plan. Dans flask_restful, il fait référence aux minuscules du nom de classe TestPost dans api.add_resource(TestPost, '//postMeth')
url_for('testPostb.testpost', PostData='adb', ddos='123'), 'testPostb.testpost' Dans la chaîne
testPostb fait référence au nom du plan, c'est-à-dire , testPostb = testPostb dans Blueprint('testPostb', nom) dans Blueprint('testPostb', nom).
<🎜. >
Démarrez le script de test :C:\secauto3>python run.py test test_post (testPostM.APITestCase) ... ok ---------------------------------------------------------------------- Ran 1 test in 0.056s OK
Petit résumé :
Il existe une relation correspondante entre la valeur transmise dans url_for et la valeur dans request. La dernière chose est la méthode de point de terminaison dans flask_restful, qui doit être la minuscule du nom de classe dans api.add_resource. Recommandations associées :Comment python utilise unittest pour tester les problèmes d'interface_python
python+requests+unittest API problèmes de test d'interface
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!