我只是想测试Flask REST服务的CRUD
操作。
CREATE
操作中,我想创建一个新对象。 UPDATE
操作中,我需要获取在Create操作中创建的对象的id并更新它。DELETE
操作中,我需要删除在Create operation中创建的对象。我该如何处理?
当前代码看起来像这样
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'])
答案 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')
...
然而,这是完成的工作。