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

 更新时间:2022年07月13日 09:18:54   作者:qq阙继婷  
最近由于公司的发展安排本人实现公司项目的自动化测试,下面这篇文章主要给大家介绍了关于如何Django + Pytest搭建在线自动化测试平台的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

一、测试平台:

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

主要是基于:

    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在线自动化测试平台内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅析Python条件语句中的解密逻辑与控制流

    浅析Python条件语句中的解密逻辑与控制流

    这篇文章主要想来和大家一起探索一下Python条件语句的奇妙世界——解密逻辑与控制流,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
    2023-07-07
  • mac安装pytorch及系统的numpy更新方法

    mac安装pytorch及系统的numpy更新方法

    今天小编就为大家分享一篇mac安装pytorch及系统的numpy更新方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • python实现自动生成SQL语句

    python实现自动生成SQL语句

    在数据处理和管理中,SQL(Structured Query Language)是一种非常重要的语言,本文主要介绍了如何使用python实现自动生成SQL语句,需要的可以参考下
    2024-04-04
  • Python类装饰器实现方法详解

    Python类装饰器实现方法详解

    这篇文章主要介绍了Python类装饰器实现方法,结合实例形式较为详细的分析了Python类装饰器的相关概念、原理、实现方法与使用技巧,需要的朋友可以参考下
    2018-12-12
  • Python tempfile模块生成临时文件和临时目录

    Python tempfile模块生成临时文件和临时目录

    这篇文章主要介绍了Python tempfile模块生成临时文件和临时目录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Python3 用matplotlib绘制sigmoid函数的案例

    Python3 用matplotlib绘制sigmoid函数的案例

    这篇文章主要介绍了Python3 用matplotlib绘制sigmoid函数的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Python函数学习笔记

    Python函数学习笔记

    Python探测局部作用域的时候:是在python编译代码时检测,而不是通过他们在运行时的赋值。
    2008-10-10
  • Python利用PaddleOCR制作个搜题小工具

    Python利用PaddleOCR制作个搜题小工具

    PaddleOCR是一个基于百度飞桨的OCR工具库,单模型支持中英文数字组合识别、竖排文本识别、长文本识别。本文将利用PaddleOCR开发一个搜题小工具,感兴趣的可以了解一下
    2022-06-06
  • python中使用正则表达式的连接符示例代码

    python中使用正则表达式的连接符示例代码

    在正则表达式中,匹配数字或者英文字母的书写非常不方便。因此,正则表达式引入了连接符“-”来定义字符的范围,下面这篇文章主要给大家介绍了关于python中如何使用正则表达式的连接符的相关资料,需要的朋友可以参考下。
    2017-10-10
  • python 测试实现方法

    python 测试实现方法

    使用python进行测试也足够简明了
    2008-12-12

最新评论