主动化测试平台计划与实现(二、主动化测试用例对象计划实现、关键字对象设 ...

打印 上一主题 下一主题

主题 876|帖子 876|积分 2628

1、模型计划

建立主动化用例,关键字模型。此中主动化用例基本内容包含title(目录展示)、name等常见文本信息,关键字则是实现主动化测试提速的关键地点,考虑到业务场景的主动化,就能发现有许多业务步骤是重复的:好比一个管理系统里面的创建对象,我们将该步骤抽象出来,形成一个关键字(keyword),关键字保存url、header等信息,要录入到主动化用例testcase模型中,则使用中间表TestCaseKeyword,它会详细记载某个主动化用例的(关键字-序次),并且关键字会带有详细的params、body等信息,也就是可以被全局变量,或者常量所覆盖。
  1. import functools
  2. import uuid
  3. import random
  4. import string
  5. from django.db import models
  6. from django.core.exceptions import ValidationError
  7. from django.utils import timezone
  8. # Create your models here.
  9. def generate_random_string(except_str, length=10):
  10.     characters = string.ascii_letters + string.digits
  11.     random_chars = ''.join(random.choice(characters) for _ in range(length))
  12.     return f'{except_str}_{random_chars}' if except_str else random_chars
  13. def validate_positive(value):
  14.     if value < 0:
  15.         raise ValidationError('%(value)s is not a positive integer or 0', params={'value': value})
  16. class Testcase(models.Model):
  17.     # title:标题; name:编号; level:等级;前置条件,测试步骤,预期结果
  18.     title_default = functools.partial(generate_random_string, "title")
  19.     name_default = functools.partial(generate_random_string, "test")
  20.     title = models.CharField(max_length=50, unique=True, null=False, blank=False, default=title_default)
  21.     name = models.CharField(max_length=50, unique=True, null=False, blank=False, default=name_default)
  22.     level = models.IntegerField(default=0, validators=[validate_positive])
  23.     precondition = models.CharField(max_length=300, null=True, blank=True, default=None)
  24.     test_precondition = models.CharField(max_length=300, null=True, blank=True, default=None)
  25.     expected_result = models.CharField(max_length=300, null=True, blank=True, default=None)
  26.     TYPE = [
  27.         ("function_case", "功能用例"),
  28.         ("performance_case", "性能用例"),
  29.         ("reliability_case", "可靠性用例"),
  30.     ]
  31.     type = models.CharField(max_length=20, choices=TYPE, default="function_case")
  32.     auto_flag = models.BooleanField(default=False, null=True, blank=True)
  33.     description = models.TextField(blank=True, null=True)
  34.     keywords = models.ManyToManyField("KeyWord", through='TestCaseKeyword')
  35.     def __str__(self):
  36.         return f"{self.title}_{self.name}"
  37. class KeyWord(models.Model):
  38.     BODY_TYPES = [
  39.         ('application/x-www-form-urlencoded', 'Application/X-WWW-Form-Urlencoded'),
  40.         ('raw', 'Raw'),
  41.         ('multipart/form-data', 'Multipart/Form-Data'),
  42.     ]
  43.     name_default = functools.partial(generate_random_string, "kw")
  44.     name = models.CharField(max_length=100, unique=True, null=False, blank=False, default=name_default)
  45.     url = models.URLField()
  46.     params = models.JSONField(blank=True, null=True)
  47.     headers = models.JSONField(blank=True, null=True)
  48.     body_type = models.CharField(max_length=50, choices=BODY_TYPES)
  49.     body = models.TextField(blank=True, null=True)
  50.     description = models.TextField(blank=True, null=True)
  51.     def __str__(self):
  52.         return self.name
  53. class TestCaseKeyword(models.Model):
  54.     test_case = models.ForeignKey(Testcase, on_delete=models.CASCADE)
  55.     keyword = models.ForeignKey(KeyWord, on_delete=models.CASCADE)
  56.     order = models.PositiveIntegerField()
  57.     params = models.JSONField(blank=True, null=True)
  58.     headers = models.JSONField(blank=True, null=True)
  59.     body = models.TextField(blank=True, null=True)
  60.     class Meta:
  61.         ordering = ['order']
  62.     def __str__(self):
  63.         return f"{self.test_case.name} - {self.keyword.name} ({self.order})"
复制代码
 
tips:

1. python有前向引用:假如在一个模型类中引用了另一个尚未界说的模型类,大概会出现 Unresolved reference 错误。
可以在 Testcase 模型中使用前向引用,即在字符串中引用 KeyWord 模型。这样可以解决。但函数可以在代码的任何位置界说和调用。
前向引用:在字段界说中使用字符串形式的类名引用未界说的模型类。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

九天猎人

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表