'''
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)