单元测试REST API Python

时间:2015-07-01 08:18:46

标签: python django rest django-rest-framework

我只是想测试Flask REST服务的CRUD操作。

  1. CREATE操作中,我想创建一个新对象。
  2. UPDATE操作中,我需要获取在Create操作中创建的对象的id并更新它。
  3. DELETE操作中,我需要删除在Create operation中创建的对象。
  4. 我该如何处理?

    当前代码看起来像这样

    class BaseTestCase(TestCase):
        def create_app(self):
            return create_app('testing')
    
        def setUp(self):
            self.response = self.client.get('/api/v1/list_portfolios').json
            self.portfolio_id = self.response['respbody']['Portfolios'][0]['_id']
            self.view_response = self.client.get('/api/v1/view_portfolio/' + self.portfolio_id).json
    
    class ModelTestAPI(BaseTestCase):
        def test_model_create(self):
            model_create_data = {
                "PortfolioId": "558d0e575dddb726b8cd06bc",
                "ModelName": "New Model",
                "ModelLifetimePeriod": "Month",
                "ModelLifetimeDuration": 12
            }
            response = self.client.post('/api/v1/model/create', data=dumps(model_create_data),
                                        content_type='application/json').json
            portfolio_model_id = response['respbody']['_id']
            print(portfolio_model_id)
    
            new_model_dict = model_create_data.copy()
            new_model_dict['_id'] = portfolio_model_id
    
            new_json = response['respbody'].copy()
            new_json.pop('CreateDate', None)
            new_json.pop('LastUpdateDate', None)
    
            self.assertDictEqual(new_model_dict, new_json)
    
        def test_model_update(self):
            data = {
                "ModelName": "UPDATE New Model",
                "ModelLifetimePeriod": "Month",
                "ModelLifetimeDuration": 6
            }
            portfolio_model_id = self.view_response['respbody']['PortfolioModels'][-1]['_id']
            json = self.client.put('/api/v1/model/' + portfolio_model_id, data=dumps(data),
                                   content_type='application/json').json
    
            data['_id'] = portfolio_model_id
            new_json = json['respbody'].copy()
            new_json.pop('CreateDate', None)
            new_json.pop('LastUpdateDate', None)
            new_json.pop('PortfolioId', None)
    
            self.assertDictEqual(data, new_json)
    
        def test_model_delete(self):
            portfolio_model_id = self.view_response['respbody']['PortfolioModels'][-1]['_id']
            json = self.client.delete('http://localhost:5000/api/v1/model/' + portfolio_model_id).json
            expected_dict = {'success': True}
            self.assertDictEqual(expected_dict, json['respbody'])
    

1 个答案:

答案 0 :(得分:1)

根据我的经验,首先建立一个Web服务,第二个开始编写unittest

Web服务示例:

from rest_framework.views import APIView
class view_example(APIView):
    def get(self, request, format=None):
        ...
    def post(self, request, format=None):
        ...
    def put(self, request, format=None):
        ...
    def delete(self, request, format=None):
        ...

如果您确定在urls.py注册视图,请编写unittest。

from rest_framework.test import APITestCase

class ViewExampleTests(APITestCase):
    def test_create(self):
        ...
        response = self.client.post(url, data, format='json')
        ...
    def test_update(self):
        ...
        response = self.client.put(url, data, format='json')
        ...
    def test_delete(self):
        ...
        response = self.client.delete(url, data, format='json')
        ...
    def test_read(self):
        ...
        response = self.client.get(url, data, format='json')
        ...

然而,这是完成的工作。