我有这个django代码,它通过inscode从redis获取数据并返回。如果redis关闭了,它应该跳出try,expect block并从数据库(postgresql)读取数据。
class GetOrderBook(APIView):
def get(self, request, format=None):
# get parameters
inscode = None
if 'i' in request.GET:
inscode = request.GET['i']
if inscode != None:
try:
#raise ('disabling redis!')
r_handle = redisconnection
data = r_handle.get(inscode)
if data != None:
return Response(200)
else:
print('not found in cache')
except BaseException as err:
print(err)
orderbook = OrderBook.objects.filter(
symbol__inscode=inscode).order_by('rownum')
if len(orderbook) > 0:
data = OrderBookSer(orderbook, many=True).data
data_formatted = {'buynum': [0]*5, 'buyvol': [0]*5, 'buyprice': [
0]*5, 'sellnum': [0]*5, 'sellvol': [0]*5, 'sellprice': [0]*5}
return Response(data_formatted, status=status.HTTP_200_OK)
else:
return Response({'Bad Request'}, status.HTTP_404_NOT_FOUND)
return Response({'Bad Request'}, status.HTTP_400_BAD_REQUEST)
但问题是,它不从数据库阅读,我也写了这个测试,它返回200,如果你读数据。但是当Redis关闭时,它不会读数据,并返回404给我。
def test_redis_function(self, api_client, test_user):
url = self.url
api_client.force_authenticate(user=test_user)
response = api_client.get(url, {'i': '2400322364771558'})
assert response.status_code == status.HTTP_200_OK
如果你能帮我我会很高兴的
1条答案
按热度按时间v6ylcynt1#
pytest和django一起为你的测试创建了新的测试数据库,看起来你忘记在开始这个测试之前创建OrderBook类的对象了。为您的测试添加设置功能,或者只是添加类似于
在API_client调用之前。
但更好的做法-使用Django Factory Boy https://factoryboy.readthedocs.io/en/stable/orms.html