Django はインターフェイス自動化プラットフォーム (7 つ) のデータベース設計を実装します

前の章:

Django インターフェース自動化プラットフォームを実装 (6) httprunner (2.x) 基本的な使い方【随時更新】_テストニャーソースブログ - CSDN ブログ

次の章:

Django がインターフェイス自動化プラットフォームを実装 (8) テスト レポート レポート シリアライザーとビュー [継続的に更新]_Do テスト ニャー ソース ブログ - CSDN ブログ

1. データベース設計

インターフェース自動化プラットフォーム、組み込みエンジンは httprunner2 を使用するため、データベース設計は httprunner2 のデータ構造と似ています。

1.1 合計 9 つのテーブルが関係する

  • プロジェクトモデル
  • インターフェースモデル
  • ユースケースモデル
  • 構成モデル
  • キットモデル
  • 組み込み関数モデル
  • 環境変数モデル
  • テストレポートモデル
  • ユーザーモデル

ログイン関連:

  • ユーザーテーブル: auth_user

インターフェース自動化関連:

  • プロジェクトテーブル: tb_projects
  • インターフェーステーブル: tb_interfaces
  • case表:tb_testcases
  • テスト スイート テーブル: tb_testsuits
  • インターフェース環境構成テーブル: tb_configures
  • グローバル環境構成テーブル: tb_envs
  • テストレポートテーブル: tb_reposts
  • 組み込み関数の表: tb_debugtalks

1.2 テーブル間の関係

 1. プロジェクト (プロジェクト テーブル tb_projects) は組み込み関数 (tb_debugtalks 関数テーブル) に対応します。

2. 1 つのプロジェクトは 1 つのテスト スイートに対応します

3. 1つのプロジェクトが複数のインターフェースに対応します。

4. 1つのインターフェースで複数のユースケースに対応

5. インターフェースは一連の環境に対応します

tb_レポート:

  • ID
  • 名前
  • 結果
  • 成功
  • html
  • まとめ
  • 作成時間
  • 更新時間
  • is_delete

tb_プロジェクト:

  • ID
  • 名前
  • リーダー
  • テスター
  • プロジェクトフレーム
  • 公開アプリ
  • 説明
  • 作成時間
  • 更新時間
  • is_delete

tb_インターフェース:

  • ID
  • 名前
  • 計画
  • テスター
  • 説明
  • 作成時間
  • 更新時間
  • is_delete

tb_testcases:

  • ID
  • 名前
  • インターフェース
  • 含む
  • 著者
  • リクエスト
  • 作成時間
  • 更新時間
  • is_delete

 tb_debugtalks

  • id (主キー)
  • 名前
  • デバッグトーク
  • プロジェクト (外部キー tb_projects)
  • 作成時間
  • 更新時間

tb_envs:

  • ID
  • 名前
  • ベースURL
  • 説明
  • 作成時間
  • 更新時間
  • is_delete

tb_testsuites:

  • ID
  • 名前
  • 計画
  • 含む
  • リクエスト
  • 作成時間
  • 更新時間
  • is_delete

tb_configures:

  • ID
  • 名前
  • インターフェース
  • 著者
  • リクエスト
  • 作成時間
  • 更新時間
  • is_delete

2. サブアプリケーションの作成

知らせ:

ユーザーテーブルは第 2 章と第 3 章で実装されました。

Django がインターフェース自動化プラットフォームを実装 (2) 認証&認可&ログイン【随時更新】_Do Test ニャーソースブログ - CSDN ブログ

Django、インターフェース自動化プラットフォームを実現(3) 登録機能を実現【随時更新】 - テストニャーソースブログ - CSDNブログ

2.1、サブアプリケーションの作成

python manage.py startapp projects

python manage.py startapp interfaces

python manage.py startapp testcases

python manage.py startapp testsuits

python manage.py startapp configures

python manage.py startapp envs

python manage.py startapp reports

python manage.py startapp debugtalks

2.2. アプリケーションの登録

settings.py で INSTALLED_APPS を構成します。

    'projects',
    'interfaces',
    'users',
    'testcases',
    'configures',
    'reports',
    'debugtalks',
    'testsuites',
    'envs',

2.3 統合管理アプリケーション

私たちのプロジェクト全体には、多数のアプリケーションが関係します。アプリケーションフォルダーがすべてルートディレクトリにあると、見た目が乱雑になります。

したがって、ルート ディレクトリに apps というパッケージを作成し、すべてのアプリケーションを apps に移動できます。

1. プロジェクトのルート ディレクトリに、パッケージとアプリを作成します

2. すべてのアプリケーションをマウスでアプリにドラッグし、

 アプリケーションをドラッグするときは、ポップアップ ウィンドウでは何もチェックしないでください。

最終的な効果:

3. アプリケーションのパスを設定します

settings.py でアプリの絶対パスを設定します。

# apps绝对路径
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))

 知らせ:

a、BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

BASE_DIR はプロジェクトのルート パスです。

b. アプリの絶対パス: os.path.join(BASE_DIR, 'apps')

c. アプリケーション ファイルを検索すると、設定ファイルが sys.path に見つかります。

sys.path はリストです

プロジェクト構成ファイルがアプリのパスを見つけるには、そのパスを sys.path に挿入する必要があります。

sys.path.insert(0,) は、より速く検索するために最初の場所に挿入されます。

4. 右クリックしてアプリファイルを設定します。ディレクトリを -------ソース ルートとしてマークする

apps ファイルをリソース ファイルとして設定します。(オプション操作)

このように、pycharmではアプリ内でアプリケーションを参照する際に自動的に関連付けられるのでコードを書くのに便利です。

3. データベースモデルの設計

3.1 基本モデルクラスBaseModel

utils フォルダーの下に、基本モデル クラスを作成します。utils/base_models.py

# -*- coding:utf-8 -*-
# @Author: 喵酱
# @time: 2023 - 05 -25
# @File: base_model.py
# desc:
from django.db import models


class BaseModel(models.Model):
    # id = models.AutoField(primary_key=True, verbose_name='id主键', help_text='id主键')
    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间', help_text='创建时间')
    update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间', help_text='更新时间')

    class Meta:
        # 在内部类Meta中,一旦指定abstract = True,那么当前模型类为抽象模型类,在迁移时不会创建表,仅仅是为了供其他类继承
        abstract = True

知らせ:

内部クラス Meta で、abstract = True が指定されると、現在のモデル クラスは抽象モデル クラスになり、移行中にテーブルは作成されず、他のクラスが継承するだけになります。

3.2 テストレポートモデルクラス Reports

アプリ/レポート/モデル.py
from django.db import models

from utils.base_models import BaseModel


class Reports(BaseModel):
    id = models.AutoField(verbose_name='id主键', primary_key=True, help_text='id主键')
    name = models.CharField('报告名称', max_length=200, unique=True, help_text='报告名称')
    result = models.BooleanField('执行结果', default=1, help_text='执行结果')   # 1为成功, 0为失败
    count = models.IntegerField('用例总数', help_text='总用例数')
    success = models.IntegerField('成功总数', help_text='成功总数')
    html = models.TextField('报告HTML源码', help_text='报告HTML源码', null=True, blank=True, default='')
    summary = models.TextField('报告详情', help_text='报告详情', null=True, blank=True, default='')

    class Meta:
        db_table = 'tb_reports'
        verbose_name = '测试报告'
        verbose_name_plural = verbose_name
        ordering = ('id',)

    def __str__(self):
        return self.name

3.3 グローバル環境変数モデルクラス Envs

apps/envs/models.py

from django.db import models

from utils.base_models import BaseModel


class Envs(BaseModel):
    id = models.AutoField(verbose_name='id主键', primary_key=True, help_text='id主键')
    name = models.CharField(verbose_name='环境名称', max_length=200, unique=True, help_text='环境名称')
    base_url = models.URLField(verbose_name='请求base url', max_length=200, help_text='请求base url')
    desc = models.CharField(verbose_name='简要描述', max_length=200, help_text='简要描述')

    class Meta:
        db_table = 'tb_envs'
        verbose_name = '环境信息'
        verbose_name_plural = verbose_name
        ordering = ('id',)

    def __str__(self):
        return self.name

3.4 プロジェクト テーブル モデル クラス プロジェクト

アプリ/プロジェクト/モデル.py

from django.db import models

from utils.base_models import BaseModel


class Projects(BaseModel):
    id = models.AutoField(verbose_name='id主键', primary_key=True, help_text='id主键')
    name = models.CharField('项目名称', max_length=200, unique=True, help_text='项目名称')
    leader = models.CharField('负责人', max_length=50, help_text='项目负责人')
    tester = models.CharField('测试人员', max_length=50, help_text='项目测试人员')
    programmer = models.CharField('开发人员', max_length=50, help_text='开发人员')
    publish_app = models.CharField('发布应用', max_length=100, help_text='发布应用')
    desc = models.CharField('简要描述', max_length=200, null=True, blank=True, default='', help_text='简要描述')

    class Meta:
        db_table = 'tb_projects'
        verbose_name = '项目信息'
        verbose_name_plural = verbose_name
        ordering = ('id',)

    def __str__(self):
        return self.name

3.5 インターフェーステーブルモデルクラスインターフェース

アプリ/インターフェイス/モデル.py

from django.db import models

from utils.base_models import BaseModel


class Interfaces(BaseModel):
    id = models.AutoField(verbose_name='id主键', primary_key=True, help_text='id主键')
    name = models.CharField('接口名称', max_length=200, unique=True, help_text='接口名称')
    project = models.ForeignKey('projects.Projects', on_delete=models.CASCADE,
                                related_name='interfaces', help_text='所属项目')
    tester = models.CharField('测试人员', max_length=50, help_text='测试人员')
    desc = models.CharField('简要描述', max_length=200, null=True, blank=True, help_text='简要描述')

    class Meta:
        db_table = 'tb_interfaces'
        verbose_name = '接口信息'
        verbose_name_plural = verbose_name
        ordering = ('id',)

    def __str__(self):
        return self.name

3.6 組み込み関数テーブルのモデルクラス DebugTalks

apps/debugtalks/models.py

from django.db import models

from utils.base_models import BaseModel


class DebugTalks(BaseModel):
    id = models.AutoField(verbose_name='id主键', primary_key=True, help_text='id主键')
    name = models.CharField('debugtalk文件名称', max_length=200, default='debugtalk.py', help_text='debugtalk文件名称')
    debugtalk = models.TextField(null=True, default='#debugtalk.py', help_text='debugtalk.py文件')
    project = models.OneToOneField('projects.Projects', on_delete=models.CASCADE,
                                   related_name='debugtalks', help_text='所属项目')

    class Meta:
        db_table = 'tb_debugtalks'
        verbose_name = 'debugtalk.py文件'
        verbose_name_plural = verbose_name
        ordering = ('id',)

    def __str__(self):
        return self.name

3.7 テストスイートのモデルクラス

アプリ/テストスイート/モデル.py

from django.db import models

from utils.base_models import BaseModel


class Testsuits(BaseModel):
    id = models.AutoField(verbose_name='id主键', primary_key=True, help_text='id主键')
    name = models.CharField('套件名称', max_length=200, unique=True, help_text='套件名称')
    project = models.ForeignKey('projects.Projects', on_delete=models.CASCADE,
                                related_name='testsuits', help_text='所属项目')
    include = models.TextField('包含的接口', null=False, help_text='包含的接口')

    class Meta:
        db_table = 'tb_testsuits'
        verbose_name = '套件信息'
        verbose_name_plural = verbose_name
        ordering = ('id', )

    def __str__(self):
        return self.name

3.8 ユースケーステーブルのモデルクラス

アプリ/テストケース/モデル.py

from django.db import models

from utils.base_models import BaseModel


class Testcases(BaseModel):
    id = models.AutoField(verbose_name='id主键', primary_key=True, help_text='id主键')
    name = models.CharField('用例名称', max_length=50, unique=True, help_text='用例名称')
    interface = models.ForeignKey('interfaces.Interfaces', on_delete=models.CASCADE,
                                  help_text='所属接口')
    include = models.TextField('前置', null=True, help_text='用例执行前置顺序')
    author = models.CharField('编写人员', max_length=50, help_text='编写人员')
    request = models.TextField('请求信息', help_text='请求信息')

    class Meta:
        db_table = 'tb_testcases'
        verbose_name = '用例信息'
        verbose_name_plural = verbose_name
        ordering = ('id',)

    def __str__(self):
        return self.name

3.9 インターフェース環境設定用のモデルクラス

apps/configures/models.py

from django.db import models

from utils.base_models import BaseModel


class Configures(BaseModel):
    id = models.AutoField(verbose_name='id主键', primary_key=True, help_text='id主键')
    name = models.CharField('配置名称', max_length=50, help_text='配置名称')
    interface = models.ForeignKey('interfaces.Interfaces',
                                  on_delete=models.CASCADE,
                                  related_name='configures',
                                  help_text='所属接口')
    author = models.CharField('编写人员', max_length=50, help_text='编写人员')
    request = models.TextField('请求信息', help_text='请求信息')

    class Meta:
        db_table = 'tb_configures'
        verbose_name = '配置信息'
        verbose_name_plural = verbose_name
        ordering = ('id',)

    def __str__(self):
        return self.name

おすすめ

転載: blog.csdn.net/qq_39208536/article/details/131138016