Home Web Front-end JS Tutorial How to implement python api automated testing

How to implement python api automated testing

Apr 09, 2018 pm 04:44 PM
api python automation

This time I will show you how to implement python's api automated testing. What are the precautions for implementing python's api automated testing? The following is a practical case, let's take a look.

Everyone should know the importance of project testing for a project. Friends who write python should have written automated test scripts.
Recently I am responsible for the API testing in the company's projects. Here is a simple example to sort out the API testing.

First, write the restful api interface file testpost.py, which includes get, post, and put methods

#!/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}
Copy after login

ps: For the value of request, I have defined three commonly used methods here:

Post method: request.get_json(), when calling the API, the value is passed in json mode
get and put methods: request.args or reqparse.RequestParser(), when calling the API, What is passed is the string

Secondly, define the Blueprint file 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')
Copy after login

Then, write the test script 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)
Copy after login

ps: The api url called mainly uses flask_restful's api.url_for, or flask's url_for. Let me talk about the specific use of these two methods

flask_restful's api. url_for description

api.url_for(TestPost,PostData='adb'), TestPost here refers to the class defined in the restful api interface file, because we have already Defined by adding a class through api.add_resource(TestPost, '//postMeth')

flask's url_for usage instructions

url_for ('testPostb.testpost', PostData='adb', ddos='123'),
testPostb in the string 'testPostb.testpost' refers to the name of the blueprint, that is, testPostb = Blueprint('testPostb', testPostb in Blueprint('testPostb',name) in name).
testpost refers to the endpoint name of endpoit under the blueprint. In flask_restful, it refers to the lower case of the class name TestPost in api.add_resource(TestPost, '//postMeth')

Start the test script :

C:\secauto3>python run.py test
test_post (testPostM.APITestCase) ... ok
----------------------------------------------------------------------
Ran 1 test in 0.056s
OK
Copy after login

Small summary: The value passed by url_for has a corresponding relationship with the value in request. The last is the endpoint method in flask_restful, which must be the class name in api.add_resource. lower case.

I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the php Chinese website!

Recommended reading:

Detailed explanation of the steps for using unittest test interface in python

How to count the number of occurrences of letters in Python

The above is the detailed content of How to implement python api automated testing. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What are the advantages and disadvantages of templating? What are the advantages and disadvantages of templating? May 08, 2024 pm 03:51 PM

What are the advantages and disadvantages of templating?

How to download deepseek Xiaomi How to download deepseek Xiaomi Feb 19, 2025 pm 05:27 PM

How to download deepseek Xiaomi

Google AI announces Gemini 1.5 Pro and Gemma 2 for developers Google AI announces Gemini 1.5 Pro and Gemma 2 for developers Jul 01, 2024 am 07:22 AM

Google AI announces Gemini 1.5 Pro and Gemma 2 for developers

How do you ask him deepseek How do you ask him deepseek Feb 19, 2025 pm 04:42 PM

How do you ask him deepseek

How to search deepseek How to search deepseek Feb 19, 2025 pm 05:18 PM

How to search deepseek

What software is NET40? What software is NET40? May 10, 2024 am 01:12 AM

What software is NET40?

What language is the browser plug-in written in? What language is the browser plug-in written in? May 08, 2024 pm 09:36 PM

What language is the browser plug-in written in?

How to program deepseek How to program deepseek Feb 19, 2025 pm 05:36 PM

How to program deepseek

See all articles