使用Django+Pytest搭建在线自动化测试平台,


目录
  • 一、测试平台:
  • 二、搭建过程
    • 2.1 使用django搭建一个web系统
    • 2.2 搭建测试框架
  • 三、平台如何管理
    • 总结

      一、测试平台:

      解决分散用例执行方式,提供统一测试用例执行过程、用例管理、测试报告

      主要是基于:

          fastapi+vue.js
          django+vue.js
          django

      二、搭建过程

      2.1 使用django搭建一个web系统

      1. 创建项目

        django-admin startproject TestPlatform

      创建python的包,测试平台的配置和功能

      2. 创建app

      django-admin startapp web

      创建python的包,具体的功能代码

      (1)在TestPlatform/Web/apps.py中注册app

      from django.apps import AppConfig
      class WebConfig(AppConfig):
          # default_auto_field = 'django.db.models.BigAutoField'
          name = 'Web'
          verbose_name = "自动化测试"
      

      (2) 在TestPlatform/TestPlatform/settings.py中进行相关设置

      INSTALLED_APPS = [
          'django.contrib.admin',
          'django.contrib.auth',
          'django.contrib.contenttypes',
          'django.contrib.sessions',
          'django.contrib.messages',
          'django.contrib.staticfiles',
          'Web.apps.WebConfig'
      ]
      
      LANGUAGE_CODE = 'zh-hans'# 设置中文
      TIME_ZONE = 'Asia/Shanghai'# 设置时区
      
      USE_I18N = True
      
      USE_L10N = True
      
      USE_TZ = False
      
      MEDIA_ROOT = 'uploads/'
      MEDIA_URL = 'uploads/'
      

      (3)编辑TestPlatform/TestPlatform/urls.py文件

      from django.conf import settings
      from django.conf.urls.static import static
      from django.contrib import admin
      from django.urls import path
      
      # 定义http路由,是web系统的入口点
      urlpatterns = static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + [
          path('', admin.site.urls),
      ]

      (4)启动测试平台

           python manage.py runserver

      2.2 搭建测试框架

      1. 定义model

      model驱动开发

      import pathlib
      from django.db import models
      
      # 定义model
      # 抽象化
      from django.utils import html
      
      
      class Task(models.Model):
          name = models.CharField("用例名称", max_length=20)
          case = models.FileField("用例文件", upload_to='tests/%Y_%m_%d_%H_%M_%S/')
          status = models.IntegerField(
              "测试状态", default=-1, choices=[
                  (-1, '初始化'),
                  (0, '马上执行'),
                  (1, '正在执行测试用例'),
                  (2, '正在生成测试报告'),
                  (3, '执行完毕'),
              ]
          )
          run_datatime = models.DateTimeField(
              "最近执行时间", null=True, blank=True
          )
      
          class Meta:
              verbose_name_plural = verbose_name = "测试任务"
      
          def __str__(self):
              return self.name
      
          def get_url(self, _type):
              """生成报告或者测试日志的Url"""
              if self.case and self.status == 3:  # 执行完毕
                  case_path = pathlib.PurePosixPath(str(self.case))
                  root_path = pathlib.PurePosixPath('/uploads')
      
                  if _type == 'report':  # 报告的url
                      report_path = root_path / case_path.parent / "report/index.html"
                  elif _type == 'log':  # 日志的url
                      report_path = root_path / case_path.parent / "pytest.txt"
                  else:
                      report_path = '_'
      
                  return html.format_html(f"<a href='{report_path}' target='_blank'> 点击查看</a>")
              else:
                  return "-"

      2. 定义界面

      from django.contrib import admin
      from .models import Task
      
      
      # Register your models here.
      
      @admin.register(Task)
      class TaskAdmin(admin.ModelAdmin):
          # 决定了model 怎么显示
          list_display = ("id", "name", "status", "run_datatime",
                          "report_url", "log_url",
                          )
          # 要显示的字段
      
          readonly_fields = ('run_datatime',)
      
          def report_url(self, obj):
              return obj.get_url('report')
      
          report_url.short_description = '测试报告'
      
          def log_url(self, obj):
              return obj.get_url('url')
      
          log_url.short_description = '执行日志'

      3. 执行数据库迁移

         python manage.py makemigrations
         python manage.py migrate

      三、平台如何管理

      1. 创建管理员账号

         python manage.py createsuperuser

        用户名:admin

        邮箱:admin@qq.com

        密码:admin

      2. 调整页面显示

      3. 执行测试用例

      在models.py文件中调用pytest,pytest执行yaml文件(关键字驱动)

      import pathlib
      from datetime import datetime
      
      from django.db import models
      
      # 定义model
      # 抽象化
      from django.utils import html
      
      
      class Task(models.Model):
          name = models.CharField("用例名称", max_length=20)
          case = models.FileField("用例文件", upload_to='tests/%Y_%m_%d_%H_%M_%S/')
          status = models.IntegerField(
              "测试状态", default=-1, choices=[
                  (-1, '初始化'),
                  (0, '马上执行'),
                  (1, '正在执行测试用例'),
                  (2, '正在生成测试报告'),
                  (3, '执行完毕'),
              ]
          )
          run_datatime = models.DateTimeField(
              "最近执行时间", null=True, blank=True
          )
      
          class Meta:
              verbose_name_plural = verbose_name = "测试任务"
      
          def __str__(self):
              return self.name
      
          def get_url(self, _type):
              """生成报告或者测试日志的Url"""
              if self.case and self.status == 3:  # 执行完毕
                  case_path = pathlib.PurePosixPath(str(self.case))
                  root_path = pathlib.PurePosixPath('/uploads')
      
                  if _type == 'report':  # 报告的url
                      report_path = root_path / case_path.parent / "report/index.html"
                  elif _type == 'log':  # 日志的url
                      report_path = root_path / case_path.parent / "pytest.txt"
                  else:
                      report_path = '_'
      
                  return html.format_html(f"<a href='{report_path}' target='_blank'> 点击查看</a>")
              else:
                  return "-"
      
          def save(self, *args, **kwargs):
              super().save(*args, **kwargs)
      
              # 判断是否需要启动测试框架,执行测试用例
      
              if self.status == 0:
                  self.status = 1  # 修改状态:正在执行
                  self.run_datatime = datetime.datetime.now()
                  super().save()
      
                  # 启动测试框架
                  import pytest
      
                  pytest.main(self.case.path)  # 执行指定的测试用例文件
      
                  self.status = 3  # 修改状态:执行完毕
                  self.run_datatime = datetime.datetime.now()
                  super().save()
      
      

      总结

      到此这篇关于使用Django+Pytest搭建在线自动化测试平台的文章就介绍到这了,更多相关Django+Pytest在线自动化测试平台内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

      评论关闭