# coding=utf-8 """ 插件测试模型 存储插件测试执行记录和结果 """ import uuid_utils.compat as uuid from django.db import models from common.mixins.app_model_mixin import AppModelMixin class PluginTestStatus(models.TextChoices): """测试状态""" PENDING = 'PENDING', '待执行' RUNNING = 'RUNNING', '执行中' SUCCESS = 'SUCCESS', '成功' FAILED = 'FAILED', '失败' ERROR = 'ERROR', '错误' class PluginTest(AppModelMixin): """插件测试记录""" id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id") plugin = models.ForeignKey( 'plugin.Plugin', on_delete=models.CASCADE, db_constraint=False, verbose_name="插件", db_index=True ) version = models.CharField(max_length=32, verbose_name="测试版本", default="") test_type = models.CharField(max_length=32, verbose_name="测试类型", default="smoke") status = models.CharField( max_length=20, choices=PluginTestStatus.choices, default=PluginTestStatus.PENDING, verbose_name="测试状态" ) input_data = models.JSONField(verbose_name="测试输入", default=dict) output_data = models.JSONField(verbose_name="测试输出", default=dict) error_code = models.CharField(max_length=32, verbose_name="错误码", default="") error_message = models.TextField(verbose_name="错误信息", default="") duration_ms = models.IntegerField(verbose_name="执行耗时(毫秒)", default=0) passed = models.BooleanField(verbose_name="是否通过", default=False) class Meta: db_table = "plugin_test" ordering = ['-create_time'] def __str__(self): return f"PluginTest({self.plugin_id} v{self.version}) - {self.status}"