首页 > Python资料 博客日记
自动化测试平台设计与实现(二、自动化测试用例对象设计实现、关键字对象设计与实现)
2024-08-06 02:00:03Python资料围观50次
Python资料网推荐自动化测试平台设计与实现(二、自动化测试用例对象设计实现、关键字对象设计与实现)这篇文章给大家,欢迎收藏Python资料网享受知识的乐趣
1、模型设计
建立自动化用例,关键字模型。其中自动化用例基本内容包含title(目录展示)、name等常见文本信息,关键字则是实现自动化测试提速的关键所在,考虑到业务场景的自动化,就能发现有很多业务步骤是重复的:比如一个管理系统里面的创建对象,我们将该步骤抽象出来,形成一个关键字(keyword),关键字保存url、header等信息,要录入到自动化用例testcase模型中,则使用中间表TestCaseKeyword,它会详细记录某个自动化用例的(关键字-顺序),并且关键字会带有详细的params、body等信息,也就是可以被全局变量,或者常量所覆盖。
import functools import uuid import random import string from django.db import models from django.core.exceptions import ValidationError from django.utils import timezone # Create your models here. def generate_random_string(except_str, length=10): characters = string.ascii_letters + string.digits random_chars = ''.join(random.choice(characters) for _ in range(length)) return f'{except_str}_{random_chars}' if except_str else random_chars def validate_positive(value): if value < 0: raise ValidationError('%(value)s is not a positive integer or 0', params={'value': value}) class Testcase(models.Model): # title:标题; name:编号; level:等级;前置条件,测试步骤,预期结果 title_default = functools.partial(generate_random_string, "title") name_default = functools.partial(generate_random_string, "test") title = models.CharField(max_length=50, unique=True, null=False, blank=False, default=title_default) name = models.CharField(max_length=50, unique=True, null=False, blank=False, default=name_default) level = models.IntegerField(default=0, validators=[validate_positive]) precondition = models.CharField(max_length=300, null=True, blank=True, default=None) test_precondition = models.CharField(max_length=300, null=True, blank=True, default=None) expected_result = models.CharField(max_length=300, null=True, blank=True, default=None) TYPE = [ ("function_case", "功能用例"), ("performance_case", "性能用例"), ("reliability_case", "可靠性用例"), ] type = models.CharField(max_length=20, choices=TYPE, default="function_case") auto_flag = models.BooleanField(default=False, null=True, blank=True) description = models.TextField(blank=True, null=True) keywords = models.ManyToManyField("KeyWord", through='TestCaseKeyword') def __str__(self): return f"{self.title}_{self.name}" class KeyWord(models.Model): BODY_TYPES = [ ('application/x-www-form-urlencoded', 'Application/X-WWW-Form-Urlencoded'), ('raw', 'Raw'), ('multipart/form-data', 'Multipart/Form-Data'), ] name_default = functools.partial(generate_random_string, "kw") name = models.CharField(max_length=100, unique=True, null=False, blank=False, default=name_default) url = models.URLField() params = models.JSONField(blank=True, null=True) headers = models.JSONField(blank=True, null=True) body_type = models.CharField(max_length=50, choices=BODY_TYPES) body = models.TextField(blank=True, null=True) description = models.TextField(blank=True, null=True) def __str__(self): return self.name class TestCaseKeyword(models.Model): test_case = models.ForeignKey(Testcase, on_delete=models.CASCADE) keyword = models.ForeignKey(KeyWord, on_delete=models.CASCADE) order = models.PositiveIntegerField() params = models.JSONField(blank=True, null=True) headers = models.JSONField(blank=True, null=True) body = models.TextField(blank=True, null=True) class Meta: ordering = ['order'] def __str__(self): return f"{self.test_case.name} - {self.keyword.name} ({self.order})"
tips:
1. python有前向引用:如果在一个模型类中引用了另一个尚未定义的模型类,可能会出现 Unresolved reference
错误。
可以在 Testcase
模型中使用前向引用,即在字符串中引用 KeyWord
模型。这样可以解决。但函数可以在代码的任何位置定义和调用。
前向引用:在字段定义中使用字符串形式的类名引用未定义的模型类。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj