三、【數據建模篇】:用 Django Models 構建測試平臺核心數據

【數據建模篇】:用 Django Models 構建測試平臺核心數據

    • 前言
      • 我們要設計哪些核心數據?
      • 準備工作:創建 Django App
      • 開始設計數據模型 (Models)
        • 1. 通用基礎模型 (可選但推薦)
        • 2. 項目模型 (Project)
        • 3. 模塊模型 (Module)
        • 4. 測試用例模型 (TestCase)
      • 生成和應用數據庫遷移
      • 在 Django Admin 中查看和管理數據 (可選的快速驗證)
    • 總結

前言

  • 在上一篇,我們成功搭建了 Django 和 Vue3 的開發環境,就像給我們的“建筑工地”通了水電一樣。今天,我們要開始真正的“建筑設計”了——為我們的測試平臺設計數據模型。
  • 什么是數據模型?簡單來說,數據模型就是我們測試平臺需要存儲和管理的信息的藍圖。比如,一個測試平臺肯定要有“項目”、“測試用例”、“測試報告”這些東西,數據模型就是用來精確定義這些“東西”包含哪些信息(比如項目名稱、用例步驟、報告結果等),以及它們之間是如何關聯的。
  • 在 Django 中,我們使用 Models 來定義數據模型。你只需要用 Python 代碼來描述你的數據結構,Django 會自動幫你處理與數據庫交互的復雜細節(比如創建數據庫表)。

我們要設計哪些核心數據?

一個基礎的測試平臺,通常會包含以下核心數據:

  1. 項目 (Project):管理不同的測試項目。
  2. 模塊 (Module):項目下的功能模塊,用于組織測試用例。
  3. 測試用例 (TestCase):具體的測試點,包含一系列操作步驟。
  4. 測試步驟 (TestStep):測試用例中的單個操作,如訪問URL、點擊按鈕、校驗結果等(為了簡化入門,我們初期可以將步驟內置于用例中,后續可拆分)。
  5. 測試配置 (EnvironmentConfig / TestConfig):用于存儲不同測試環境的配置信息,如URL、賬戶等 (初期簡化,可放在項目中或后續添加)。
  6. 測試執行記錄 (TestRun / ExecutionRecord):記錄每一次測試任務的執行情況。
  7. 測試報告 (TestReport):匯總展示某次測試執行的結果。

為了讓小白更容易上手,我們先從最核心的 項目 (Project)模塊 (Module)測試用例 (TestCase) 開始設計,并逐步完善。

準備工作:創建 Django App

在 Django 中,項目通常由多個 App 組成,每個 App 負責一部分獨立的功能。我們將創建一個名為 api 的 App 來存放我們測試平臺后端的核心邏輯,包括數據模型。

  1. 激活 Python 虛擬環境

    • 打開Terminal:
      • Windows:venv\Scripts\activate
      • macOS/Linux: source venv/bin/activate
  2. 創建 Django 項目
    雖然我們之前安裝了 Django,但還沒有正式創建一個 Django 項目。一個 Django 項目是配置和多個應用的集合。
    test-platform 目錄下 (確保 (venv) 已激活),執行:

    django-admin startproject backend .
    

    注意命令最后的那個點 .,它表示在當前目錄 (test-platform) 下創建 Django 項目文件,而不是再新建一個同名子目錄。

    執行后,你的 test-platform 目錄結構如下圖所示:

    在這里插入圖片描述

    這里的 backend 文件夾是 Django 項目的配置目錄,settings.py 是項目配置文件,而 manage.py 是Django 項目管理腳本工具,我們將頻繁使用它。

  3. 創建 Django App
    現在,使用 manage.py 來創建我們的 api 應用。確保你在 test-platform 根目錄下。

    python manage.py startapp api
    

    執行后,test-platform 目錄下會新增一個 api 文件夾:

    在這里插入圖片描述
    我們將在models.py這里定義數據模型。

  4. 注冊 App
    創建了 App 之后,還需要告訴 Django 項目它的存在。打開 test-platform/backend/settings.py 文件,找到 INSTALLED_APPS 列表,在列表末尾添加我們的 api 應用:
    在這里插入圖片描述

    # test-platform/backend/settings.pyINSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','rest_framework',  # 我們之前安裝了DRF,在這里也注冊上'api',             # 添加我們新建的 app
    ]
    

    記得保存文件。

開始設計數據模型 (Models)

現在,打開 test-platform/api/models.py 文件。這個文件初始只有一些注釋。我們將在這里用 Python 類來定義我們的數據模型。

1. 通用基礎模型 (可選但推薦)

為了代碼復用和統一管理創建時間、更新時間等通用字段,我們可以先定義一個基礎模型。

在這里插入圖片描述

# test-platform/api/models.py
from django.db import modelsclass BaseModel(models.Model):"""公共模型,可添加創建時間/更新時間/邏輯刪除等通用字段"""name = models.CharField(max_length=100, unique=True, verbose_name="名稱")description = models.TextField(null=True, blank=True, verbose_name="描述")create_time = models.DateTimeField(auto_now_add=True, verbose_name="創建時間")update_time = models.DateTimeField(auto_now=True, verbose_name="更新時間")class Meta:abstract = True  # 設置為抽象基類,不會在數據庫中創建表ordering = ['-create_time'] # 默認按創建時間倒序def __str__(self):return self.name
  • models.Model: 所有 Django 模型都繼承自它。
  • name = models.CharField(...): 定義一個字符類型字段,max_length 是最大長度,unique=True 表示名稱不能重復,verbose_name 是在 Django admin 后臺顯示的友好名稱。
  • description = models.TextField(...): 定義一個文本類型字段,null=True 表示數據庫中可以為空,blank=True 表示在表單中可以不填。
  • create_time = models.DateTimeField(auto_now_add=True, ...): 日期時間字段,auto_now_add=True 表示在對象第一次創建時自動設置為當前時間。
  • update_time = models.DateTimeField(auto_now=True, ...): 日期時間字段,auto_now=True 表示在對象每次保存時自動更新為當前時間。
  • class Meta: 用于定義模型的元數據。
    • abstract = True: 表示 BaseModel 是一個抽象基類。它本身不會被創建成數據庫表,而是用來被其他模型繼承,從而共享這些通用字段。
    • ordering = ['-create_time']: 指定查詢此模型的對象時,默認按創建時間降序排列 (最新的在前面)。
  • __str__(self): 定義當打印模型實例時,返回的內容。這里我們返回其名稱。
2. 項目模型 (Project)

一個測試項目是我們組織測試的頂層單位。

在這里插入圖片描述

# test-platform/api/models.py
# (繼續在同一個文件中添加,BaseModel定義之后)class Project(BaseModel): # 繼承自我們定義的 BaseModel"""項目表"""# name 和 description 字段已從 BaseModel 繼承# create_time 和 update_time 字段已從 BaseModel 繼承# 可以添加項目特有的字段,例如:#負責人owner = models.CharField(max_length=50, null=True, blank=True, verbose_name="負責人")#項目狀態:0-規劃中,1-進行中,2-已完成,3-擱置status = models.PositiveSmallIntegerField(default=1, verbose_name="項目狀態", help_text="0:規劃中, 1:進行中, 2:已完成, 3:擱置")class Meta:verbose_name = "項目" # 單數形式的友好名稱verbose_name_plural = "項目列表" # 復數形式的友好名稱ordering = ['-create_time'] # 也可以在這里覆蓋或添加排序規則# __str__ 方法已從 BaseModel 繼承

我們讓 Project 模型繼承了 BaseModel,所以它自動擁有了 name, description, create_time, update_time 字段。我們又添加了 ownerstatus 兩個項目特有的字段。

3. 模塊模型 (Module)

模塊通常屬于某個項目,用于對測試用例進行分類。

在這里插入圖片描述

# test-platform/api/models.py
# (繼續在同一個文件中添加)class Module(BaseModel):"""模塊表"""# name 和 description 字段已從 BaseModel 繼承# create_time 和 update_time 字段已從 BaseModel 繼承project = models.ForeignKey(Project, on_delete=models.CASCADE, verbose_name="所屬項目", related_name="modules")# 'Project':關聯到 Project 模型。# on_delete=models.CASCADE:級聯刪除。當其所屬的 Project 被刪除時,這個 Module 也會被自動刪除。# verbose_name:友好名稱。# related_name="modules":這允許我們從一個 Project 實例通過 `project_instance.modules.all()` 來獲取其下所有的 Module 實例。class Meta:verbose_name = "模塊"verbose_name_plural = "模塊列表"# 同一個項目下的模塊名不能重復unique_together = ('project', 'name') # project 和 name 組合起來必須唯一# __str__ 方法已從 BaseModel 繼承,可以考慮重寫以包含項目信息def __str__(self):return f"{self.project.name} - {self.name}"

這里最重要的是 project = models.ForeignKey(Project, ...),它定義了一個外鍵關系。這意味著一個模塊必須屬于一個項目。

4. 測試用例模型 (TestCase)

測試用例是測試的核心,它屬于某個模塊。

在這里插入圖片描述

# test-platform/api/models.py
# (繼續在同一個文件中添加)class TestCase(BaseModel):"""測試用例表"""# name 和 description 字段已從 BaseModel 繼承# create_time 和 update_time 字段已從 BaseModel 繼承module = models.ForeignKey(Module, on_delete=models.CASCADE, verbose_name="所屬模塊", related_name="testcases")# 用例級別: P0, P1, P2, P3priority_choices = [('P0', 'P0 - 最高'),('P1', 'P1 - 高'),('P2', 'P2 - 中'),('P3', 'P3 - 低'),]priority = models.CharField(max_length=2, choices=priority_choices, default='P1', verbose_name="優先級")# 前置條件precondition = models.TextField(null=True, blank=True, verbose_name="前置條件")# 測試步驟 (初期簡化,直接存在用例中,可以用JSON格式或特定文本格式)# 更好的做法是單獨創建一個 TestStep 模型,并與 TestCase 建立一對多關系steps_text = models.TextField(verbose_name="測試步驟 (文本描述)")# 預期結果expected_result = models.TextField(verbose_name="預期結果")# 用例類型:例如 功能測試,接口測試,UI測試 (初期可以簡單點,后續擴展)case_type_choices = [('functional', '功能測試'),('api', '接口測試'),('ui', 'UI測試'),]case_type = models.CharField(max_length=20, choices=case_type_choices, default='functional', verbose_name="用例類型")# 維護人maintainer = models.CharField(max_length=50, null=True, blank=True, verbose_name="維護人")class Meta:verbose_name = "測試用例"verbose_name_plural = "測試用例列表"# 同一個模塊下的用例名不能重復unique_together = ('module', 'name')# __str__ 方法已從 BaseModel 繼承,可以考慮重寫def __str__(self):return f"{self.module.project.name} - {self.module.name} - {self.name}"
  • priority = models.CharField(..., choices=priority_choices, ...): choices 參數允許你定義一個下拉選擇列表。
  • steps_text: 我們暫時用一個大的文本字段來存儲測試步驟,這對于入門比較簡單。在更復雜的系統中,你可能會創建一個單獨的 TestStep 模型,并讓一個 TestCase 關聯多個 TestStep

生成和應用數據庫遷移

模型定義好了,但數據庫還不知道這些。我們需要告訴 Django 根據我們的模型定義來創建或修改數據庫表結構。這個過程叫做數據庫遷移 (Migrations)

  1. 生成遷移文件
    在終端中 (確保在 test-platform 目錄下,并且 (venv) 已激活),運行:

    python manage.py makemigrations api
    

    你會看到以下輸出:

    在這里插入圖片描述

    如果你的模型定義沒有語法錯誤,Django 會檢查 api/models.py 文件的改動,并在 api/migrations/ 目錄下生成一個新的遷移文件, 0001_initial.py。這個文件描述了如何創建 Project, Module, TestCase 表。

    在這里插入圖片描述

  2. 應用遷移到數據庫
    遷移文件生成后,運行以下命令將這些更改應用到數據庫(Django 默認使用 SQLite 文件數據庫,它會在你項目根目錄下自動創建一個 db.sqlite3 文件):

    python manage.py migrate
    

    你會看到以下輸出,表示你的數據庫表已經根據模型成功創建了!

    在這里插入圖片描述
    在這里插入圖片描述

驗證數據庫表 (可選,但推薦)

我們可以使用 SQLite 的瀏覽器工具(比如 DB Browser for SQLite)打開項目根目錄下的 db.sqlite3 文件,查看是否生成了表,以及它們的列結構是否符合定義。

在這里插入圖片描述

在 Django Admin 中查看和管理數據 (可選的快速驗證)

Django 自帶一個強大的后臺管理界面 (Django Admin),我們可以用它來快速查看和添加數據,驗證模型是否工作正常。

  1. 創建超級用戶

    你需要一個管理員賬號來登錄 Django Admin。在終端運行:

    python manage.py createsuperuser
    

    按照提示輸入用戶名、郵箱(可以隨便填一個格式正確的)、密碼。

    在這里插入圖片描述

  2. 注冊模型到 Admin
    打開 test-platform/api/admin.py 文件,將我們的模型注冊進去:
    在這里插入圖片描述

    # test-platform/api/admin.py
    from django.contrib import admin
    from .models import Project, Module, TestCase # 導入你的模型# 注冊模型到 admin 站點
    admin.site.register(Project)
    admin.site.register(Module)
    admin.site.register(TestCase)
    
  3. 啟動開發服務器

    python manage.py runserver
    

    默認情況下,服務器會運行在 http://127.0.0.1:8000/
    在這里插入圖片描述
    訪問 http://127.0.0.1:8000/,安裝成功如下圖所示:
    在這里插入圖片描述

  4. 訪問 Admin 界面
    在瀏覽器中打開 http://127.0.0.1:8000/admin/
    使用你剛才創建的超級用戶賬號登錄。
    在這里插入圖片描述

    登錄后,你能看到 “API” 部分,下面列出了 “模塊列表”, “測試用例列表”, “項目列表”。你可以點擊它們,嘗試添加一些測試數據。
    在這里插入圖片描述

通過 Django Admin 添加幾條數據,驗證下模型之間的關系是否按預期工作。比如:

  • 創建一個項目 “電商平臺測試”。
    在這里插入圖片描述

  • 在 “電商平臺測試” 項目下創建一個模塊 “用戶登錄模塊”。
    在這里插入圖片描述

  • 在 “用戶登錄模塊” 下創建一個測試用例 “TC001_正確用戶名密碼登錄”,再輸入測試步驟和預期結果。
    在這里插入圖片描述

總結

你已經成功為測試平臺設計了核心的數據模型,并學會了以下內容:

  • ? 在 Django 中創建 App。
  • ? 使用 Python 類定義 Django Models (Project, Module, TestCase)。
  • ? 理解了字段類型、外鍵關系 (ForeignKey)、元數據 (class Meta) 的基本用法。
  • ? 生成并應用了數據庫遷移 (makemigrations, migrate)。
  • ? 通過 Django Admin 快速驗證了模型。

在下一篇文章中,我們將基于這些模型,開始使用 Django REST Framework (DRF) 來創建后端 API 接口,讓前端能夠通過網絡來讀取和操作這些數據。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82015.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82015.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82015.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

centos原系統安裝了Python3.7.9兼用在安裝一個python3.8

系統有個3.7.9版本的python 但是會遇到錯誤 usr/local/python3/lib/python3.7/site-packages/urllib3/connectionpool.py:1050: InsecureRequestWarning: Unverified HTTPS request is being made to host ‘www.xxx.com’. Adding certificate verification is strongly advi…

道可云人工智能每日資訊|浙江省人民政府印發《關于支持人工智能創新發展的若干措施》

道可云元宇宙每日簡報(2025年5月21日)訊,今日元宇宙新鮮事有: 浙江省人民政府印發《關于支持人工智能創新發展的若干措施》 為搶占人工智能發展制高點,打造全球人工智能創新發展高地,浙江省人民政府于近日…

OpenGL ES 基本基本使用、繪制基本2D圖形

OpenGL ES 繪制基礎圖形 OpenGL ES基本概念 OpenGL ES (Embedded-System) 是專為嵌入式設備(如手機、平板、VR 設備)設計的圖形 API,是 OpenGL 的輕量級版本。 |下面是一個Android使用 OpenGL ES的基本框架 MainActivity 設置一…

JavaScript進階(十二)

第三部分:JavaScript進階 目錄 第三部分:JavaScript進階 十二、深淺拷貝 12.1 淺拷貝 12.2 深拷貝 1. 通過遞歸實現深拷貝 2. js庫lodash里面cloneDeep內部實現了深拷貝 3. 通過JSON.stringify()實現 十三、異常處理 13.1 throw拋異常 13.2 try /catch捕獲異常 1…

大疆制圖跑飛馬D2000的正射與三維模型

1 問題描述 大疆制圖在跑大疆無人機飛的影像的時候,能夠自動識別相機參數并且影像自帶pos信息,但是用飛馬無人機獲取的影像pos信息與影像是分開的(飛馬無人機數據處理有講),所以在用大疆制圖時需要對相機參數進行設置…

探索服務網格(Service Mesh):云原生時代的網絡新范式

文章目錄 一、引言二、什么是服務網格基本定義形象比喻 三、服務網格解決了哪些問題微服務通信復雜性可觀察性安全性 四、常見的服務網格實現IstioLinkerdConsul Connect 五、服務網格的應用場景大型微服務架構混合云環境 六、服務網格的未來發展與其他技術的融合標準化和行業規…

Electron+vite+vue3 從0到1搭建項目,開發Win、Mac客戶端

隨著前端技術的發展,出現了所謂的大前端。 大前端則是指基于前端技術延伸出來的各種終端平臺及應用場景,包括APP、桌面端、手表終端、服務端等。 本篇文章主要是和大家一起學習一下使用Electron 如何打包出 Windows 和 Mac 所使用的客戶端APP&#xff…

【DevSecOps】從零到一:用OpenAI Codey與Trivy打造智能化安全掃描 CI/CD 流水線實戰

背景與動機 核心概念:DevSecOps、OpenAI Codey 與 Trivy 什么是 DevSecOpsOpenAI Codey(Codex)概覽Trivy 掃描器簡介 架構設計與技術選型 流水線實戰:GitHub Actions 集成示例 多平臺適配:GitLab CI 與 Azure DevO…

Swagger、Springfox、Springdoc-openapi 到底是什么關系

記得剛開始想在 SpringBoot 應用中使用 Swagger 生成 API 文檔時,在 Swagger 官網上想找如何在 SpringBoot 中使用的指導,結果肯定是找不到,因為當時不清楚 Swagger 的定位是什么,只知道可以用它生成 API 文檔。所以就想寫這篇文章…

目標檢測DINO-DETR(2023)詳細解讀

文章目錄 對比去噪訓練混合查詢選擇look forward twice 論文全稱為:DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection 提出了三個新的方法: 首先,為了改進一對一的匹配效果,提出了一種對比去噪訓練方法…

深度學習-162-DeepSeek之調用遠程大模型API接口參數結構分析

文章目錄 1 文本對話請求1.1 請求參數1.1.1 參數說明1.1.2 參數總結1.2 返回參數1.2.1 id1.2.2 choices1.2.3 usage1.2.4 created1.2.5 model1.2.6 object1.2.7 參數總結2 應用示例2.1 調用大模型API2.2 返回結果3 參考附錄分析文本對話請求v1/chat/completions的參數結構含義。…

uniapp原生插件

前言 使用uniapp開發Android app時,一些特定的需求沒辦法實現的時候就只能開發原生插件或者uts插件去滿足需求,我的需求目前uts插件沒法實現,只能靠原生插件了😆 需求:拍照不保存圖片到相冊,uniapp的API或…

CVE-2024-42323

漏洞名稱 Apache HertzBeat SnakeYaml 反序列化遠程代碼執行漏洞(CVE-2024-42323) 漏洞描述 Apache HertzBeat 是一款開源的實時監控告警工具,支持對操作系統、中間件、數據庫等多種對象進行監控,并提供 Web 界面進行管理。 在…

“人工智能+多學科”選題思路,2025熱點AI+(180個)

給大家整理了一份超全的論文資料合集 不僅有論文創新點的干貨知識、開題報告模板、文獻綜述模板、審稿意見回復模板、還有全套的SCI論文寫作指導教程和人工智能各方向經典的論文合集以及各大熱門科研和論文寫作潤色工具等 以及1000G人工智能資料包(如下圖&#xff…

LangChain4j入門AI(八)使用RAG增加私有知識庫

前言 我們通過提示詞工程提升了通用LLM的專業知識水平,并結合Function Calling構建了私有業務能力。為了在實際應用中有效維護私有領域的專有數據,我們進一步采用大模型微調或RAG檢索增強技術,使LLM能夠充分掌握私有知識庫的內容。 一、微調…

使用arXiv.org上的資源進行學術研究

arXiv.org e-Print archive arXiv.org 是一個收集物理學、數學、計算機科學、定量生物學、定量金融學和統計學等領域學術論文預印本的網站,其使命是促進科學文獻的傳播與交流。以下是關于該網站的詳細介紹: 核心定位與功能 學術預印本平臺&#xff1a…

Redis 中的緩存擊穿、緩存穿透和緩存雪崩是什么?

在 Redis 中,緩存擊穿、緩存穿透和緩存雪崩是常見的緩存問題,它們都會影響系統的性能和穩定性。以下是針對這三個問題的詳細解釋: 一、緩存擊穿(Cache Breakdown) 定義:緩存擊穿是指某個熱點數據在緩存中…

RabbitMQ配置環境變量

一、RabbitMQ下載 1、從官網下載 在官網中下載,適合自己電腦的版本。我直接下載的windows版本。 然后下載opt這個軟件這個版本適合3.6.3的RabbitMQ,點擊藍色的字體即可下載。 2、安裝erlang 當你雙擊安裝程序并進入安裝向導后,會看到這樣…

基于vue框架的東莞市二手相機交易管理系統5yz0u(程序+源碼+數據庫+調試部署+開發環境)帶論文文檔1萬字以上,文末可獲取,系統界面在最后面。

系統程序文件列表 項目功能:用戶,相機分類,二手相機 開題報告內容 基于FlaskVue框架的東莞市二手相機交易管理系統開題報告 一、研究背景與意義 1.1 研究背景 隨著數字技術的迅猛發展和攝影文化的廣泛普及,相機已成為人們記錄生活、表達創意的重要工…

dify調用Streamable HTTP MCP應用

一、概述 上一篇文章,介紹了使用python開發Streamable HTTP MCP應用,鏈接:https://www.cnblogs.com/xiao987334176/p/18872195 接下來介紹dify如何調用MCP 二、插件 安裝插件 需要安裝2個插件,分別是:Agent 策略(支持 …