欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > DjangoRF-13-创建testcases子应用--测试用例模块

DjangoRF-13-创建testcases子应用--测试用例模块

2024/10/24 1:03:05 来源:https://blog.csdn.net/weixin_44919017/article/details/140888843  浏览:    关键词:DjangoRF-13-创建testcases子应用--测试用例模块

1、编写模型
class TestCase(BaseModel):
class MethodType(models.TextChoices):
GET = ‘get’, ‘get’
POST = ‘post’, ‘post’
HEAD = ‘head’, ‘head’
PUT = ‘put’, ‘put’
PATCH = ‘patch’, ‘patch’
DELETE = ‘delete’, ‘delete’
CONNECT = ‘connect’, ‘connect’
TRACE = ‘trace’, ‘trace’

class ResponseType(models.TextChoices):JSON = 'JSON', 'JSON'XML = 'XML', 'XML'HTML = 'HTML', 'HTML'REQUEST_FIELD_HELP = 'json格式的字符串,可选键与requests模块发送请求的参数一致'
ASSERTION_HELP = '''断言表达式,嵌套的数组json字符串[[期望值,条件,jsonpath提取表达式],..],
例如:[[0,"eq","$..code"],["OK","eq","$..msg"]]'''
MARKS_HELP = '字符串,用例标记,多个标记使用逗号隔开,例如:success,flow'
EXTRACT_HELP = '提取响应结果表达式,嵌套数组json字符串[[变量名,提取表达式],..]'title = models.CharField('用例名称', max_length=200, help_text='用例名称')
interface = models.ForeignKey(Interface, verbose_name='所属接口', on_delete=models.PROTECT, help_text='所属接口id',related_name='testcases')
test_suit = models.ForeignKey(TestSuit, verbose_name='所属测试套件', on_delete=models.SET_NULL, null=True, blank=True,related_name='testcases', help_text='所属测试套件id')
method = models.CharField('请求方法', max_length=12, choices=MethodType.choices, default=MethodType.GET,help_text='请求方法')
request = models.TextField('请求数据', help_text=REQUEST_FIELD_HELP, null=True, blank=True)
tester = models.CharField('测试工程师', max_length=48, null=True, blank=True, help_text='编写这条用例的测试工程师')
marks = models.CharField('标记', max_length=200, help_text=MARKS_HELP, null=True, blank=True)
status_code = models.SmallIntegerField('响应状态码', null=True, blank=True, help_text='请求响应状态码')
res_type = models.CharField('响应类型', max_length=24, choices=ResponseType.choices, default=ResponseType.JSON,help_text='字符串,响应类型,可选值 JSON XML HTML 必须大写')
assertion = models.TextField('断言表达式', help_text=ASSERTION_HELP, null=True, blank=True)
db_assertion = models.TextField('数据库断言表达式', help_text='数据库断言表达式,格式同断言表达式', null=True, blank=True)
extract = models.TextField('响应结果提取数据表达式', help_text=EXTRACT_HELP, null=True, blank=True)
order = models.SmallIntegerField('序号', null=True, blank=True, help_text='序号')def __str__(self):return self.titleclass Meta:db_table = 'tb_test_case'verbose_name = '测试用例'verbose_name_plural = verbose_nameordering = ['order', 'id']

进行迁移。
2、序列化(因为嵌套问题,一定要注意序列化先后顺序)
class TestCaseSerializer(serializers.ModelSerializer):

class Meta:model = TestCaseexclude = ['is_delete', 'u_time']def validate(self, attrs):"""选择的接口是不是当前项目的接口(模型的字段)"""interface = attrs.get('interface')test_suit = attrs.get('test_suit')if interface.module.project != test_suit.task.project:raise ValidationError('数据错误!')return attrs

3views编写
class TestCaseViewSet(ModelViewSet):
queryset = TestCase.objects.all()
serializer_class = TestCaseSerializer
permission_classes = [IsAuthenticated, TestCasePermission]
pagination_class = TenItemPerPagePagination
4、添加路由(权限不写了)
5、进行调试即可

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com