python unittest implémente l'API testing_python automatisé

不言
Libérer: 2018-04-04 16:44:55
original
1971 Les gens l'ont consulté

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}
Copier après la connexion

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, &#39;/<string:PostData>/postMeth&#39;)
Copier après la connexion

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 = {&#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)
Copier après la connexion

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



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).

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
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal