美文网首页
Django—Rest接口测试

Django—Rest接口测试

作者: Cassie测试路 | 来源:发表于2022-04-28 05:35 被阅读0次

1、测试POST接口

  • SnippetList


    image.png
models.py
class Snippet(models.Model):

    title = models.CharField(max_length=20, blank=True, default='', verbose_name='代码片段标题')
    code = models.TextField()
    linenos = models.BooleanField(default=False)   # 是否显示行号
    created_time = models.DateTimeField(auto_now_add=True)
serializers.py
from rest_framework import serializers
from .models import Snippet

class SnippetSerializer(serializers.ModelSerializer):
    class Meta:
        model = Snippet
        # fields指定输出的字段
        fields = ('id', 'title', 'code', 'linenos')
        # extra_kwargs:serializer对post/put数据进行校验
        extra_kwargs = {
            # 反序列化之后保存title到数据库时的格式限制
            'title': {
                'required': True,
                'min_length': 2,
                'max_length': 10,
                'error_messages': {
                    'required': 'title字段必填',
                    'min_length': '字段太短',
                    'max_length': '字段太长',
                }
            },
            'code': {
                'required': True
            },
            'id': {
                'read_only': True,
            },
        }

    # title不允许重复
    def validate_title(self, title):
        if Snippet.objects.filter(title=title).first():
            raise serializers.ValidationError("title已经存在")
        return title

views.py
from rest1020.models import Snippet
from rest1020.serializers import SnippetSerializer
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.status import HTTP_201_CREATED, HTTP_200_OK, HTTP_400_BAD_REQUEST, HTTP_204_NO_CONTENT, HTTP_404_NOT_FOUND


# 列出所有snipptes或者创建一个新的snippet
class SnippetList(APIView):

    def get(self, request):
        snippets = Snippet.objects.all()
        serializer = SnippetSerializer(snippets, many=True)
        serializer_data = serializer.data
        return Response(serializer_data, status=HTTP_200_OK)

    def post(self, request):
        # print(type(request))   # <class 'rest_framework.request.Request'>
        # print(type(request.data))  # dict类型
        serializer = SnippetSerializer(data=request.data)
        # 参数校验 
        if serializer.is_valid():
            # title名称不允许重复
            if serializer.validate_title(request.data['title']):
                serializer.save()
                return Response(serializer.data, status=HTTP_201_CREATED)
        return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)
测试结果

1、title不传递时,报错400


image.png

2、title传递但长度不符合规定时,报错400


image.png

3、title为空字符串


image.png

4、title名称已经存在


image.png

5、title符合规则,请求成功


image.png
改写views.py使用serializer.is_valid(raise_exception=True)
  • views.py
    def post(self, request):
        serializer = SnippetSerializer(data=request.data)
        if serializer.is_valid(raise_exception=True):
            serializer.save()
            return Response(serializer.data, status=HTTP_201_CREATED)
        return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)
  • 接口测试:title名称已经存在


    image.png
image.png

2.测试 PUT接口

  • SnippetDetail


    image.png

1、对象不存在时的处理:返回体:提示用户不存在,状态:422

3、测试GET接口

  • 对象不存在时的处理:
  1. 返回体:空,状态:200
  2. 返回体:提示用户不存在,状态:422

4. 自定义Response结构体

5、使用generics通用视图

  • 使用generics通用视图后,API页面端点会显示有2种
  • 有Raw data和HTML form两种格式


    HTML form格式
    Raw data格式

相关文章

网友评论

      本文标题:Django—Rest接口测试

      本文链接:https://www.haomeiwen.com/subject/ukkzmktx.html