Maison  >  Article  >  interface Web  >  Comment implémenter les tests automatisés de l'API Python

Comment implémenter les tests automatisés de l'API Python

php中世界最好的语言
php中世界最好的语言original
2018-04-09 16:44:012033parcourir

Cette fois, je vais vous montrer comment implémenter les tests automatisés de l'API de Python. Quelles sont les précautions pour les tests automatisés de l'API de Python. Voici des cas pratiques, jetons un coup d'œil.

Tout le monde devrait connaître l'importance des tests de projet pour un projet. Les amis qui écrivent du python devraient avoir écrit 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 restful testpost.py, qui comprend 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 la requête, j'en ai défini trois couramment utilisés ceux ici Méthode :

méthode post : request.get_json(), lors de l'appel de l'API, la valeur est passée en mode json
méthodes get et put : request.args ou reqparse.RequestParser( ), appelant l'API Lorsque, 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')
puis é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 api.url_for de flask_restful, ou url_for de flask. Laissez-moi parler de l'utilisation spécifique de ces deux méthodes

flask_restful. api.url_for description

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 dans le plan de l'API, il a été défini en ajoutant une classe via api.add_resource(TestPost, '//postMeth')

Instructions d'utilisation pour l'url_for de flask

url_for('testPostb.testpost', PostData='adb', ddos='123'), dans la chaîne 'testPostb.testpost',

testPostb fait référence au nom du plan, c'est-à-dire testPostb = testPostb dans Blueprint ('testPostb', nom) dans Blueprint('testPostb', nom).
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')

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é :

La valeur transmise par url_for a une relation correspondante avec la valeur dans request. La dernière est la méthode du point de terminaison dans flask_restful, qui doit être utilisée. être la classe dans api.add_resource Prénom minuscule. Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

Explication détaillée des étapes d'utilisation de l'interface de test unittest en Python

Comment Python compte le nombre de lettres apparaître

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn