# Django_Test **Repository Path**: tianjianchao/Django_Test ## Basic Information - **Project Name**: Django_Test - **Description**: Django+Pytest 自动化测试平台 个人学习 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2024-08-18 - **Last Updated**: 2024-11-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README python manage.py runserver 192.168.21.15xxx:8000 Django+Pytest+allure搭建在线测试平台 1、基于Django在线平台系统搭建步骤 2、在线平台系统中集成用例管理和用例执行 3、上传yaml或Excel执行用例并生成测试报告 4、Django+Redis+celery分布式测试平台架构 sanmu 0.4.0 低代码全栈自动化测试框架,可以使用它执行用例和生产测试报告 启动项目: Tool -》Run manage.py RUN 常用的管理命令: runserver makemigrations 创建数据库迁移脚本 migrate:执行数据库脚本 - createsuperuser 创建管理员账号 - changepassword 修改账号密码 pip install sanmu==0.4.0 pip install sanmu==0.4.0 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com 1、初始化Django 2、Model驱动开发 ​ 1、设计Model ```python import os.path import uuid from django.db import models # Create your models here. def get_case_path(instance, filename): """ 获取用例文件保存路径,保存到tests// """ return os.path.join('tests', str(instance.id), filename) class TestTask(models.Model): """ 测试任务 将用例文件上传到指定的目录,并在该目录执行用例 """ id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) name = models.CharField('任务名称',max_length=100) case = models.FileField('用例文件',upload_to=get_case_path) status = models.IntegerField('任务状态',default=-1, choices=[ ('-2', '执行出错'), ('-1', '初始化'), ('0', '待执行'), ('1', '执行用例'), ('2', '生成报告'), ('3', '执行完毕'), ]) # 是否正在执行, 默认为False is_processing = models.BooleanField('正在执行', default=False, editable=False) is_pass = models.BooleanField('是否通过', default=False, editable=False) has_report = models.BooleanField('是否生成报告', default=False, editable=False) created_at = models.DateTimeField('创建时间', auto_now_add=True) updated_at = models.DateTimeField('更新时间', auto_now=True) class Meta: verbose_name = '测试任务' verbose_name_plural = verbose_name def __str__(self): return self.name ``` ​ 2、model注册、迁移 ```python LANGUAGE_CODE = 'zh-hans' USE_I18N = True USE_L10N = False TIME_ZONE = 'Asia/Shanghai' DATE_FORMAT = 'Y-m-d H:i:s' USE_TZ = False META_ROOT = 'uploads/' MEDIA_URL = 'uploads/' ``` 1. 启动APP 2. 生成迁移脚本 ```python python .\manage.py makemigrations ``` 3. 执行迁移脚本 ```python python .\manage.py migrate ``` 4. 创建管理员账号 ```PYTHON python .\manage.py createsuperuser 创建管理员账号 ``` 5. 在管理后台注册model 3、**执行用例** - 上传:零代码用例 1、Django调用测试框架 ```python import os.path import uuid from pathlib import Path import pytest from django.db import models # Create your models here. def get_case_path(instance, filename): """ 获取用例文件保存路径,保存到tests// """ return os.path.join('tests', str(instance.id), filename) class TestTask(models.Model): """ 测试任务 将用例文件上传到指定的目录,并在该目录执行用例 """ id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) name = models.CharField('任务名称',max_length=100) case = models.FileField('用例文件',upload_to=get_case_path) status = models.IntegerField('任务状态',default=-1, choices=[ ('-2', '执行出错'), ('-1', '初始化'), ('0', '待执行'), ('1', '执行用例'), ('2', '生成报告'), ('3', '执行完毕'), ]) # 是否正在执行, 默认为False is_processing = models.BooleanField('正在执行', default=False, editable=False) is_pass = models.BooleanField('是否通过', default=False, editable=False) has_report = models.BooleanField('是否生成报告', default=False, editable=False) created_at = models.DateTimeField('创建时间', auto_now_add=True) updated_at = models.DateTimeField('更新时间', auto_now=True) class Meta: verbose_name = '测试任务' verbose_name_plural = verbose_name def __str__(self): return self.name def save(self, *args, **kwargs): # 在model进行保存时,自动调用 super().save(*args, **kwargs) # 用例执行逻辑 if self.status == 0 and self.is_processing == False: self.status = 1 # 执行用例, 更新状态 self.is_processing = True # 设置正在执行 self.save() # 保存, 更新状态 test_dir = Path(str(self.case.path)).parent # 获取用例文件所在目录, 用于执行用例 res = pytest.main_with(test_dir) # 执行用例 if res == pytest.ExitCode.OK: self.is_pass = True else: self.is_pass = False # 用例执行完毕逻辑,更新状态 self.status = 2 # 执行用例, 更新状态 self.is_processing = True # 设置正在执行 self.save() # 保存, 更新状态 res = os.system(f'allure generate -c -o {test_dir / "report"} {test_dir / ".allure_results"}') if res == 0: self.has_report = True else: self.has_report = False # 用例执行完毕逻辑,更新状态 self.status = 3 # 执行用例, 更新状态 self.is_processing = False self.save() # 保存, 更新状态 ``` 4、**展示测试报告** - 判断任务的状态 - 生成正确的URL报告 - 展示URL报告 ![image-20240818021530026](C:\Users\72882\AppData\Roaming\Typora\typora-user-images\image-20240818021530026.png) ![image-20240818022427108](C:\Users\72882\AppData\Roaming\Typora\typora-user-images\image-20240818022427108.png) ```python ├───Django_Test ├───master ├───项目 ├───__init__.py ├───asgi.py ├───settings.py ├───urls.py ├───wsgi.py └───logs └───suite └───migrations └───__init__.py └───admin.py └───apps.py └───models.py └───tests.py └───views.py └───tests └───399dbeb1-b04a-482e-979b-2333bf e9b311 └───allure_results └───report └───test_data.yaml └───551d5a3c-22f7-45bf-b214-53b9ddd4ba12 └───686c0e9d-6253-4925-a30a-fa619a393a1c └───8819ca95-a4a0-4e33-b7de-deda95753c1b └───86233521-e9f5-478f-80b6-04eca92ac952 └───c59175bb-916d-4810-81c1-fcb6966073215 └───manage.py └───README.md └───requirements.txt ```