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}
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')
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)
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
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!