zoukankan      html  css  js  c++  java
  • 接口自动化平台搭建(三),设计表结构

    '''

    DateTimeField.auto_now:这个参数的默认值为false,设置为true时,能够在保存该字段时,将其值设置为当前时间,并且每次修改model,都会自动更新。因此这个参数在需要存储“最后修改时间”的场景下,十分方便。需要注意的是,设置该参数为true时,并不简单地意味着字段的默认值为当前时间,而是指字段会被“强制”更新到当前时间,你无法程序中手动为字段赋值;如果使用django再带的admin管理器,那么该字段在admin中是只读的。

    DateTimeField.auto_now_add:这个参数的默认值也为False,设置为True时,会在model对象第一次被创建时,将字段的值设置为创建时的时间,以后修改对象时,字段的值不会再更新。该属性通常被用在存储“创建时间”的场景下。与auto_now类似,auto_now_add也具有强制性,一旦被设置为True,就无法在程序中手动为字段赋值,在admin中字段也会成为只读的。


    '''
    class
    BaseTable(models.Model): create_time = models.DateTimeField(auto_now_add=True) update_time = models.DateTimeField(auto_now=True) class Meta: #在Meta内嵌类中设置 abstract=True ,该类就不能创建任何数据表。然而如果将它做为其他 model 的基类,那么该类的字段就会被添加到子类中。 abstract = True verbose_name = "公共字段表" db_table = 'BaseTable'

    1.建立基础表,相当于公共字段,其他表可以继承,主要是创建时间和更新时间

    2.建立用户信息表,继承公共表,主要记录用户名,密码,邮箱地址

    3.三级关系(项目——》模块——》用例)模块外键关联项目,用例外键关联模块

      在新增用例的时候确定关联关系

     

      

    4.公共header外键关联在模块下面,这样在新增用例的时候可以直接获取到,与用例的关联关系一致

      在新增header中确认关联关系

      

    5.创建前置与后置方法表,主要是为了对请求前进行处理,比如说时间戳,参数关联,公共参数,MD5与AES加密等等,后置是对返回进行处理比如说参数提取,结果断言,返回是加密字符串按照相应秘钥进行解密等等

      在新增用例的时候进行前置后置选择

      

    6.测试报告主要是为了保留历史记录向用户展示,同时便于以后对接口数据分析留下数据

    将返回结果json解析

    7.文件管理表是为了有的接口需要文件,图片等信息,我们需要一个有文件的上传与下载功能,例如(http://0.0.0.0:8000/static/file/ws.jpg)

    #继承公共字段
    class UserType(BaseTable):
        class Meta:
            verbose_name = '用户类型'
            db_table = 'UserType'
    
        type_name = models.CharField(max_length=20)
        type_desc = models.CharField(max_length=50)
        objects = UserTypeManager()
    
    #继承公共字段
    class UserInfo(BaseTable):
        class Meta:
            verbose_name = '用户信息'
            db_table = 'UserInfo'
    
        username = models.CharField(max_length=20)
        password = models.CharField(max_length=20)
        email = models.EmailField()
        #默认为1
        status = models.IntegerField(default=1)
        # user_type = models.ForeignKey(UserType, on_delete=models.CASCADE)
        objects = UserInfoManager()
    
    #继承公共字段
    class ProjectInfo(BaseTable):
        class Meta:
            verbose_name = '项目信息'
            db_table = 'ProjectInfo'
        #项目名称
        pro_name = models.CharField(max_length=50)
        #负责人
        responsible_name = models.CharField(max_length=20)
        #测试人员
        test_user = models.CharField(max_length=100)
        #开发人员
        dev_user = models.CharField(max_length=100)
        #发布应用
        publish_app = models.CharField(max_length=60)
        #简要描述
        simple_desc = models.CharField(max_length=100, null=True)
        #其他信息
        other_desc = models.CharField(max_length=100, null=True)
        #默认状态 1有效 0无效
        status = models.IntegerField(default=1)
        #表操作类
        objects = ProjectInfoManager()
    
    #继承公共字段
    class ModuleInfo(BaseTable):
        class Meta:
            verbose_name = '模块信息'
            db_table = 'ModuleInfo'
        #模块名称
        module_name = models.CharField(max_length=50)
        #外键关联ProjectInfo表(,需要在Foreign的第二参数中加入on_delete=models.CASCADE  主外关系键中,级联删除,也就是当删除主表的数据时候从表中的数据也随着一起删除)
        belong_project = models.ForeignKey(ProjectInfo, on_delete=models.CASCADE)
        #测试人员
        test_user = models.CharField(max_length=50)
        #提测时间
        lifting_time = models.DateTimeField(auto_now_add=True)
        #简要描述
        simple_desc = models.CharField(max_length=100, null=True)
        #其他信息
        other_desc = models.CharField(max_length=100, null=True)
        status = models.IntegerField(default=1)
        # 表操作类
        objects = ModuleInfoManager()
    
    #继承公共字段
    class HeaderCaseInfo(BaseTable):
        class Meta:
            verbose_name = '公共header表'
            db_table = 'HeaderCaseInfo'
        #headers名称
        name = models.CharField(max_length=50)
        #type类型为2 是headers配置
        type = models.IntegerField(default=2)
        #项目
        belong_project = models.CharField(max_length=50)
        #模块
        belong_module = models.ForeignKey(ModuleInfo, on_delete=models.CASCADE)
        #创建者
        author = models.CharField(max_length=20)
        #headers内容
        headers = models.TextField(null=True)
        status = models.IntegerField(default=1)
        #表操作类
        objects=HeaderCaseInfoManager()
    
    
    #继承公共字段
    class TestCaseInfo(BaseTable):
        class Meta:
            verbose_name = '用例信息'
            db_table = 'TestCaseInfo'
        #type是1 就是用例
        type = models.IntegerField(default=1)
        name = models.CharField(max_length=50)
        belong_project = models.CharField(max_length=50)
        belong_module = models.ForeignKey(ModuleInfo, on_delete=models.CASCADE)
        include = models.CharField(max_length=200, null=True)
        author = models.CharField(max_length=20)
        request = models.TextField()
        status = models.IntegerField(default=1)
        objects = TestCaseInfoManager()
        user_name=models.CharField(max_length=30,null=True)
    
    
    #前置方法表
    class Preposition(models.Model):
        class Meta:
            verbose_name = "前置方法表"
            db_table = 'Preposition'
        #前置方法名称
        name=models.CharField(max_length=250,unique=True)
    
    #后置方法表
    class Postposition(models.Model):
        class Meta:
            verbose_name = "后置方法表"
            db_table = 'Postposition'
        #后置方法名称
        name=models.CharField(max_length=250,unique=True)
    
    #继承公共字段
    class TestReports(BaseTable):
        class Meta:
            verbose_name = "测试报告"
            db_table = 'TestReports'
    
        #测试报告名称
        report_name = models.CharField(max_length=50)
        #用户名
        user_name=models.CharField(max_length=50)
        #名称
        belong_project = models.CharField(max_length=50,null=True)
        #模块名称
        belong_module = models.CharField(max_length=50,null=True)
        #结果
        reports = models.TextField()
        status = models.IntegerField(default=1)
    
    
    #请求返回内容
    class response_body(models.Model):
        class Meta:
            verbose_name = "请求返回内容表"
            db_table = 'response_body'
        #请求返回内容
        response_body=models.TextField()
    
    #提取返回内容放置表
    class extract(BaseTable):
        class Meta:
            verbose_name = "提取返回内容放置表"
            db_table = 'extract'
    
        #提取参数key
        key=models.CharField(max_length=64,unique=True)
        #提取参数value
        value=models.CharField(max_length=250)
    
    
    
    #继承公共字段
    class File(BaseTable):
        class Meta:
            verbose_name = "文件管理"
            db_table = 'File'
    
        #文件名称(唯一)
        name = models.CharField(max_length=250,unique=True)
        #用户名
        user_name=models.CharField(max_length=50)
        #路径
        path = models.CharField(max_length=50)
        status = models.IntegerField(default=1)
    
    #继承公共字段
    class Parameters(BaseTable):
        class Meta:
            verbose_name = "公共参数"
            db_table = 'Parameters'
    
        #文件名称(唯一)
        name = models.CharField(max_length=250,unique=True)
        #用户名
        user_name=models.CharField(max_length=50)
        #公共配置
        parameters = models.TextField()
        #状态 1有效 0失效
        status = models.IntegerField(default=1)
  • 相关阅读:
    LeetCode-102-二叉树的层序遍历
    LeetCode-086-分隔链表
    LeetCode-082-删除排序链表中的重复元素 II
    LeetCode-081-搜索旋转排序数组 II
    [leetcode]92. Reverse Linked List II反转链表2
    [leetcode]94. Binary Tree Inorder Traversal二叉树中序遍历
    [leetcode]100. Same Tree相同的树
    [leetcode]54. Spiral Matrix螺旋矩阵
    [leetcode]58. Length of Last Word最后一个词的长度
    [leetcode]41. First Missing Positive第一个未出现的正数
  • 原文地址:https://www.cnblogs.com/wangsen-123/p/9018205.html
Copyright © 2011-2022 走看看