plugin_test.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. # coding=utf-8
  2. """
  3. 插件测试模型
  4. 存储插件测试执行记录和结果
  5. """
  6. import uuid_utils.compat as uuid
  7. from django.db import models
  8. from common.mixins.app_model_mixin import AppModelMixin
  9. class PluginTestStatus(models.TextChoices):
  10. """测试状态"""
  11. PENDING = 'PENDING', '待执行'
  12. RUNNING = 'RUNNING', '执行中'
  13. SUCCESS = 'SUCCESS', '成功'
  14. FAILED = 'FAILED', '失败'
  15. ERROR = 'ERROR', '错误'
  16. class PluginTest(AppModelMixin):
  17. """插件测试记录"""
  18. id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id")
  19. plugin = models.ForeignKey(
  20. 'plugin.Plugin',
  21. on_delete=models.CASCADE,
  22. db_constraint=False,
  23. verbose_name="插件",
  24. db_index=True
  25. )
  26. version = models.CharField(max_length=32, verbose_name="测试版本", default="")
  27. test_type = models.CharField(max_length=32, verbose_name="测试类型", default="smoke")
  28. status = models.CharField(
  29. max_length=20,
  30. choices=PluginTestStatus.choices,
  31. default=PluginTestStatus.PENDING,
  32. verbose_name="测试状态"
  33. )
  34. input_data = models.JSONField(verbose_name="测试输入", default=dict)
  35. output_data = models.JSONField(verbose_name="测试输出", default=dict)
  36. error_code = models.CharField(max_length=32, verbose_name="错误码", default="")
  37. error_message = models.TextField(verbose_name="错误信息", default="")
  38. duration_ms = models.IntegerField(verbose_name="执行耗时(毫秒)", default=0)
  39. passed = models.BooleanField(verbose_name="是否通过", default=False)
  40. class Meta:
  41. db_table = "plugin_test"
  42. ordering = ['-create_time']
  43. def __str__(self):
  44. return f"PluginTest({self.plugin_id} v{self.version}) - {self.status}"