如何解决如何使用boto3为api视图创建测试
我创建了以下视图以生成预签名凭证,以将文件上传到s3存储桶,我是测试和boto3的新手,我想知道如何为使用包的视图创建测试喜欢boto3吗?我读到可以模拟generate_presigned_post,但是我在理解如何做到这一点时遇到了麻烦,请你们帮我如何使用pytest测试类似情况?
class AnimesFileCredentials(views.APIView):
def get(self,request,pk,*args,**kwargs):
created_by = request.user.id
serializer = AnimesFileCredentialsSerializer(data=self.request.query_params)
if serializer.is_valid(raise_exception=True):
file_name = serializer.validated_data.get('file_name')
content_type = serializer.validated_data.get('content_type')
category = serializer.validated_data.get('category')
animes_file = {
'anime_id': pk,'document': file_name,'category': category,'created_by_id': created_by
}
AnimesFile.objects.create(**animes_file)
presigned_post = self.generate_presigned_post(file_name,content_type)
logger.info(f'created document: {file_name} to animes_id: {pk}.')
return Response(presigned_post)
return Response(serializer.errors)
def generate_presigned_post(self,file_name,content_type):
S3_BUCKET = settings.AWS_MEDIA_STORAGE_BUCKET_NAME
client = boto3.client('s3',endpoint_url=settings.AWS_S3_ENDPOINT_URL) # localstack dumy url
presigned_post = client.generate_presigned_post(
Bucket=S3_BUCKET,Key=file_name,Fields={'acl': 'private','Content-Type': content_type},Conditions=[{'acl': 'private'},{'Content-Type': content_type}],)
logger.info(f'created presign post to document: {file_name}.')
return presigned_post
我的测试真的很简单
@pytest.mark.parametrize('animes_file__category',[AnimesFile.ACTION])
def test_animes_file_generate_presigned_post(db,client,anime,animes_file):
url = reverse('api:files:animes-files',kwargs={'pk': anime.pk})
response = client.get(url,{'category': category,'content_file': 'application/jpg','file_name': animes_file.document})
data = response.json()
results = data.get('results')[0]
assert results
assert results['category'] == category
assert response.status_code == status.HTTP_200_OK
但是每次我尝试运行时,它都无法说我无法使用错误的凭据连接到s3,并且我认为正确的决定是不使用s3进行此测试,因为我认为模拟是最佳选择,我在寻找一些解决方案,但没有一个对我有用,您能帮助我了解如何解决此测试吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。